changeset 33092:6c44d6d505f5

maint: merge stable to default.
author Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
date Mon, 26 Feb 2024 23:30:33 -0500
parents f1cb625c8eb5 (diff) 6ed312edd0d4 (current diff)
children f93c00562f70 aabaf97c66ab
files libinterp/corefcn/regexp.cc
diffstat 559 files changed, 8172 insertions(+), 6115 deletions(-) [+]
line wrap: on
line diff
--- a/.github/workflows/make.yaml	Mon Feb 26 23:28:09 2024 -0500
+++ b/.github/workflows/make.yaml	Mon Feb 26 23:30:33 2024 -0500
@@ -640,7 +640,7 @@
       matrix:
         # For available GitHub-hosted runners, see: https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners
         os: [windows-latest]
-        msystem: [MINGW64, UCRT64]
+        msystem: [MINGW64, CLANG64]
         include:
           - msystem: MINGW64
             mingw-prefix: mingw64
@@ -650,14 +650,23 @@
             f77: gfortran
             extra-config-flags: ""
             ccache-max: 0.9G
-          - msystem: UCRT64
-            mingw-prefix: ucrt64
-            target-prefix: mingw-w64-ucrt-x86_64
-            cc: gcc
-            cxx: g++
-            f77: gfortran
-            extra-config-flags: ""
-            ccache-max: 0.9G
+            allow-error: false
+          - msystem: CLANG64
+            mingw-prefix: clang64
+            target-prefix: mingw-w64-clang-x86_64
+            cc: clang
+            # It looks like we and graphicsmagick++ aren't ready for C++17 yet.
+            cxx: "clang++ -std=gnu++14"
+            f77: flang
+            # Clang seems to require a different set of dllexport attributes than GCC.
+            # autoconf and libtool still need help to correctly invoke flang.
+            extra-config-flags:
+              --disable-lib-visibility-flags
+              ac_cv_f77_compiler_gnu=yes
+              lt_cv_prog_gnu_ld=yes
+            ccache-max: 400M
+            # This configuration is not fully supported yet
+            allow-error: true
 
     env:
       CHERE_INVOKING: 1
@@ -853,6 +862,7 @@
           make -C ./.build DESTDIR=/c/octave/pkg install
 
       - name: test stand-alone executable
+        continue-on-error: ${{ matrix.allow-error }}
         run: |
           unset CC
           unset CXX
@@ -865,10 +875,26 @@
       - name: analyze test suite results
         # Make sure the test summary lists 0 "FAIL"s and no "REGRESSION"
         run: |
-          [ -n "$(grep -e "FAIL\s*0" ./test-suite.log)" ] || (echo "::warning::At least one test failed" && exit 1)
-          [ -z "$(grep -e "REGRESSION" ./test-suite.log)" ] || (echo "::warning::At least one regression in test suite" && exit 1)
+          [ -n "$(grep -e "FAIL\s*0" ./test-suite.log)" ] || echo "::warning::At least one test failed"
+          [ -z "$(grep -e "REGRESSION" ./test-suite.log)" ] || echo "::warning::At least one regression in test suite"
           echo Finished analyzing test suite results.
 
+      - name: compress build artifact
+        if: matrix.msystem == 'MINGW64'
+        continue-on-error: true
+        run: |
+          cd /c/octave/pkg
+          tar -cvzf octave.tar.gz *
+
+      - name: upload build artifact
+        if: matrix.msystem == 'MINGW64'
+        continue-on-error: true
+        uses: actions/upload-artifact@v4
+        with:
+          name: ${{ matrix.target-prefix }}-octave-${{ steps.ccache-prepare.outputs.timestamp }}
+          path: C:\octave\pkg\octave.tar.gz
+          retention-days: 7
+
 
   cygwin:
     runs-on: ${{ matrix.os }}
--- a/build-aux/mk-octave-config-h.sh	Mon Feb 26 23:28:09 2024 -0500
+++ b/build-aux/mk-octave-config-h.sh	Mon Feb 26 23:30:33 2024 -0500
@@ -104,7 +104,6 @@
 
 $SED -n 's/#\(\(undef\|define\) OCTAVE_ENABLE_64.*$\)/#  \1/p' $config_h_file
 $SED -n 's/#\(\(undef\|define\) OCTAVE_ENABLE_BOUNDS_CHECK.*$\)/#  \1/p' $config_h_file
-$SED -n 's/#\(\(undef\|define\) OCTAVE_ENABLE_FLOAT_TRUNCATE.*$\)/#  \1/p' $config_h_file
 $SED -n 's/#\(\(undef\|define\) OCTAVE_ENABLE_INTERNAL_CHECKS.*$\)/#  \1/p' $config_h_file
 $SED -n 's/#\(\(undef\|define\) OCTAVE_ENABLE_LIB_VISIBILITY_FLAGS.*$\)/#  \1/p' $config_h_file
 $SED -n 's/#\(\(undef\|define\) OCTAVE_ENABLE_OPENMP.*$\)/#  \1/p' $config_h_file
--- a/configure.ac	Mon Feb 26 23:28:09 2024 -0500
+++ b/configure.ac	Mon Feb 26 23:30:33 2024 -0500
@@ -27,7 +27,7 @@
 
 ### Initialize Autoconf
 AC_PREREQ([2.65])
-AC_INIT([GNU Octave], [9.0.91], [https://octave.org/bugs.html], [octave],
+AC_INIT([GNU Octave], [10.0.0], [https://octave.org/bugs.html], [octave],
         [https://www.gnu.org/software/octave/])
 
 ### Declare version numbers
@@ -39,9 +39,9 @@
 ## explains how to update these numbers for release and development
 ## versions.
 
-OCTAVE_MAJOR_VERSION=9
+OCTAVE_MAJOR_VERSION=10
 OCTAVE_MINOR_VERSION=0
-OCTAVE_PATCH_VERSION=91
+OCTAVE_PATCH_VERSION=0
 
 dnl PACKAGE_VERSION is set by the AC_INIT VERSION argument.
 OCTAVE_VERSION="$PACKAGE_VERSION"
@@ -305,10 +305,10 @@
 AC_PROG_CXX
 AC_PROG_CXXCPP
 
-ENABLE_STD_PMR_POLYMORPHIC_ALLOCATOR=no
+ENABLE_STD_PMR_POLYMORPHIC_ALLOCATOR=yes
 AC_ARG_ENABLE(std-pmr-polymorphic-allocator,
-  [AS_HELP_STRING([--enable-std-pmr-polymorphic-allocator],
-    [build libraries requiring std::pmr::polymorphic_allocator if possible.  This allows more efficient transfer of arrays at the .mex file interface.  That also means that all libraries including Octave headers (e.g., .oct files) must be able to compile with that C++17 feature.])],
+  [AS_HELP_STRING([--disable-std-pmr-polymorphic-allocator],
+    [build libraries that do not require support for std::pmr::polymorphic_allocator.  This prevents more efficient transfer of arrays at the .mex file interface.  With enabled std::pmr::polymorphic_allocator, sources including Octave headers (e.g., for .oct files) must conform to C++17.])],
   [case $enableval in
      yes) ENABLE_STD_PMR_POLYMORPHIC_ALLOCATOR=yes ;;
      no) ENABLE_STD_PMR_POLYMORPHIC_ALLOCATOR=no ;;
@@ -944,28 +944,6 @@
 AC_SUBST(MKOCTFILE_F77)
 AC_SUBST(MKOCTFILE_RANLIB)
 
-### Enable float truncation to work around issues with x87 co-processors
-
-dnl When compiling math for x87, problems may arise in some code comparing
-dnl floating-point intermediate results.  The root cause is the extra precision
-dnl (~80 bits) of x87 co-processor registers versus the IEEE standard 64 bits.
-dnl Generally, storing the result in a local volatile variable forces a
-dnl truncation back to 64 bits, but it also degrades performance.
-dnl However, this performance degradation is very minimal, if indeed measurable.
-dnl Therefore, it has been enabled for all platforms and compilers.
-dnl Reported bugs indicate that --enable-float-truncate is required for MinGW
-dnl and Cygwin platforms and for GCC compilers >= 5.0.  It should not be
-dnl necessary for non-x87 targets or when using modern SSE math.
-ENABLE_FLOAT_TRUNCATE=yes
-AC_ARG_ENABLE([float-truncate],
-  [AS_HELP_STRING([--disable-float-truncate],
-    [truncate intermediate FP results])],
-  [if test "$enableval" = no; then ENABLE_FLOAT_TRUNCATE=no; fi], [])
-if test $ENABLE_FLOAT_TRUNCATE = yes; then
-  AC_DEFINE(OCTAVE_ENABLE_FLOAT_TRUNCATE, 1,
-    [Define to 1 to truncate intermediate FP results.])
-fi
-
 ### Enable internal checks
 
 ## The checks slow down the execution and are redundant,
@@ -2784,10 +2762,10 @@
 
 ### Determine whether libraries should be linked with visibility attributes.
 
-ENABLE_LIB_VISIBILITY_FLAGS=no
+ENABLE_LIB_VISIBILITY_FLAGS=yes
 AC_ARG_ENABLE(lib-visibility-flags,
-  [AS_HELP_STRING([--enable-lib-visibility-flags],
-    [build libraries with visibility flags (export only symbols from API)])],
+  [AS_HELP_STRING([--disable-lib-visibility-flags],
+    [don't build libraries with visibility flags (export all symbols)])],
   [case $enableval in
      yes) ENABLE_LIB_VISIBILITY_FLAGS=yes ;;
      no) ENABLE_LIB_VISIBILITY_FLAGS=no ;;
@@ -3388,7 +3366,6 @@
   64-bit BLAS array dims and indexing:  $HAVE_64_BIT_BLAS
   Use std::pmr::polymorphic_allocator:  $ENABLE_STD_PMR_POLYMORPHIC_ALLOCATOR
   OpenMP SMP multithreading:            $ENABLE_OPENMP
-  Truncate intermediate FP results:     $ENABLE_FLOAT_TRUNCATE
   Include support for GNU readline:     $USE_READLINE
   Use push parser in command line REPL: $ENABLE_COMMAND_LINE_PUSH_PARSER
   Build cross tools:                    $cross_tools
--- a/doc/interpreter/basics.txi	Mon Feb 26 23:28:09 2024 -0500
+++ b/doc/interpreter/basics.txi	Mon Feb 26 23:30:33 2024 -0500
@@ -73,13 +73,14 @@
 built-in functions of Octave.  This value is normally correct and should
 only need to be specified in extraordinary situations.
 
-@item  --debug
-@itemx -d
-@cindex @sortas{options, Octave command --debug} @ @ @code{--debug}
-@cindex @sortas{options, Octave command -d} @ @ @code{-d}
-Enter parser debugging mode.  Using this option will cause Octave's
-parser to print a lot of information about the commands it reads, and is
-probably only useful if you are actually trying to debug the parser.
+@c FIXME: Disabled debug option for parser 2023-12-29.
+@c Uncomment and restore code if Octave adds capability to
+@c immediately enter debug mode for a script.
+@c @item  --debug
+@c @itemx -d
+@c @cindex @sortas{options, Octave command --debug} @ @ @code{--debug}
+@c @cindex @sortas{options, Octave command -d} @ @ @code{-d}
+@c Enter debugging mode.
 
 @item --doc-cache-file @var{filename}
 @cindex @sortas{options, Octave command --doc-cache-file} @ @ @code{--doc-cache-file @var{filename}}
@@ -95,7 +96,8 @@
 @cindex @sortas{options, Octave command -x} @ @ @code{-x}
 Echo commands as they are executed.
 
-@item --eval @var{code}
+@item  --eval @var{code}
+@itemx -e @var{code}
 @cindex @sortas{options, Octave command --eval} @ @ @code{--eval @var{code}}
 Evaluate @var{code} and exit when finished unless @option{--persist} is also
 specified.
@@ -108,7 +110,8 @@
 in the system or user startup files that call the
 @w{@env{EXEC_PATH}}@ function.
 
-@item --gui
+@item  --gui
+@itemx -g
 @cindex @sortas{options, Octave command --gui} @ @ @code{--gui}
 Start the graphical user interface (GUI).
 
@@ -142,6 +145,11 @@
 commands in the system or user startup files that use the
 @code{info_program} function.
 
+@item  --init-trace
+@cindex @sortas{options, Octave command --init-trace} @ @ @code{--init-trace}
+Print the name of each configuration as it is read and executed during
+initialization.
+
 @item  --interactive
 @itemx -i
 @cindex @sortas{options, Octave command --interactive} @ @ @code{--interactive}
@@ -153,7 +161,8 @@
 @cindex @sortas{options, Octave command --line-editing} @ @ @code{--line-editing}
 Force readline use for command-line editing.
 
-@item --no-gui
+@item  --no-gui
+@itemx -G
 @cindex @sortas{options, Octave command --no-gui} @ @ @code{--no-gui}
 Disable the graphical user interface (GUI) and use the command line
 interface (CLI) instead.  This is the default behavior, but this option
@@ -165,26 +174,37 @@
 @cindex @sortas{options, Octave command -H} @ @ @code{-H}
 Disable recording of command-line history.
 
-@item --no-init-file
-@cindex @sortas{options, Octave command --no-init-file} @ @ @code{--no-init-file}
-@cindex @sortas{octaverc ~/.octaverc} @code{~/.octaverc}
-@cindex @sortas{octaverc .octaverc} @code{.octaverc}
-Don't read the initialization files @file{~/.octaverc} and @file{.octaverc}.
+@item  --no-init-all
+@itemx --norc
+@itemx -f
+@cindex @sortas{options, Octave command --no-init-all} @ @ @code{--no-init-all}
+@cindex @sortas{options, Octave command --norc} @ @ @code{--norc}
+@cindex @sortas{options, Octave command -f} @ @ @code{-f}
+Don't read any of the system or user initialization files at startup.
+This is equivalent to using both of the options @option{--no-site-file}
+and @option{--no-init-user}.
 
 @item --no-init-path
 @cindex @sortas{options, Octave command --no-init-path} @ @ @code{--no-init-path}
 Don't initialize the search path for function files to include default
 locations.
 
+@item --no-init-site
+@cindex @sortas{options, Octave command --no-init-site} @ @ @code{--no-init-site}
+@cindex site startup file
+Don't read the site-wide @file{octaverc} initialization files.
+
+@item --no-init-user
+@cindex @sortas{options, Octave command --no-init-user} @ @ @code{--no-init-user}
+@cindex @sortas{octaverc ~/.octaverc} @code{~/.octaverc}
+@cindex @sortas{octaverc .octaverc} @code{.octaverc}
+Don't read the user initialization files @file{~/.octaverc} and
+@file{.octaverc}.
+
 @item --no-line-editing
 @cindex @sortas{options, Octave command --no-line-editing} @ @ @code{--no-line-editing}
 Disable command-line editing.
 
-@item --no-site-file
-@cindex @sortas{options, Octave command --no-site-file} @ @ @code{--no-site-file}
-@cindex site startup file
-Don't read the site-wide @file{octaverc} initialization files.
-
 @item  --no-window-system
 @itemx -W
 @cindex @sortas{options, Octave command --no-window-system} @ @ @code{--no-window-system}
@@ -192,14 +212,6 @@
 Disable use of a windowing system including graphics.  This forces a
 strictly terminal-only environment.
 
-@item  --norc
-@itemx -f
-@cindex @sortas{options, Octave command --norc} @ @ @code{--norc}
-@cindex @sortas{options, Octave command -f} @ @ @code{-f}
-Don't read any of the system or user initialization files at startup.
-This is equivalent to using both of the options @option{--no-init-file}
-and @option{--no-site-file}.
-
 @item  --path @var{path}
 @itemx -p @var{path}
 @cindex @sortas{options, Octave command --path} @ @ @code{--path @var{path}}
@@ -215,11 +227,11 @@
 Go to interactive mode after @option{--eval} or reading from a file
 named on the command line.
 
-@item  --silent
-@itemx --quiet
+@item  --quiet
+@itemx --silent
 @itemx -q
+@cindex @sortas{options, Octave command --quiet} @ @ @code{--quiet}
 @cindex @sortas{options, Octave command --silent} @ @ @code{--silent}
-@cindex @sortas{options, Octave command --quiet} @ @ @code{--quiet}
 @cindex @sortas{options, Octave command -q} @ @ @code{-q}
 Don't print the usual greeting and version message at startup.
 
@@ -273,12 +285,6 @@
 that works in Octave but not @sc{matlab} (@pxref{XREFwarning,,warning},
 @ref{XREFwarning_ids,,warning_ids}).
 
-@item  --verbose
-@itemx -V
-@cindex @sortas{options, Octave command --verbose} @ @ @code{--verbose}
-@cindex @sortas{options, Octave command -V} @ @ @code{-V}
-Turn on verbose output.
-
 @item  --version
 @itemx -v
 @cindex @sortas{options, Octave command --version} @ @ @code{--version}
@@ -384,7 +390,7 @@
 
 A message will be displayed as each of the startup files is read if you
 invoke Octave with the @option{--verbose} option but without the
-@option{--silent} option.
+@option{--quiet} option.
 
 The startup files are always processed in the system's locale charset
 (independent of the m-file encoding that is set, for example, in the GUI
--- a/doc/interpreter/doccheck/mk_undocumented_list	Mon Feb 26 23:28:09 2024 -0500
+++ b/doc/interpreter/doccheck/mk_undocumented_list	Mon Feb 26 23:30:33 2024 -0500
@@ -34,7 +34,7 @@
 ################################################################################
 # Get a list from Octave of all visible functions
 @octave_output = <<`_END_OCT_SCRIPT_`;
-../../run-octave --norc --silent --no-history --eval '\
+../../run-octave --norc --quiet --no-history --eval '\
   funclist = vertcat (__list_functions__ , __builtins__); \
   funclist = funclist(! strncmp (funclist, \"meta.\", 5)) \
   disp ("#!-separator-!#") \
--- a/doc/interpreter/external.txi	Mon Feb 26 23:28:09 2024 -0500
+++ b/doc/interpreter/external.txi	Mon Feb 26 23:30:33 2024 -0500
@@ -310,7 +310,7 @@
 
 Note that these functions do significant error checking and so in some
 circumstances the user might prefer to access the data of the array or matrix
-directly through the @code{fortran_vec} method discussed below.
+directly through the @code{rwdata} method discussed below.
 
 @deftypefn {Method} {octave_idx_type} numel () const
 The total number of elements in the matrix or array.
@@ -336,7 +336,7 @@
 of rows and columns in the matrix.
 @end deftypefn
 
-@deftypefn {Method} {T *} fortran_vec ()
+@deftypefn {Method} {T *} rwdata ()
 This method returns a pointer to the underlying data of the matrix or array so
 that it can be manipulated directly, either within Octave or by an external
 library.
@@ -646,7 +646,7 @@
 @end example
 
 Finally, because the sparse types aren't represented by a contiguous block of
-memory, the @nospell{@code{fortran_vec}} method of @code{Array<T>} is not
+memory, the @nospell{@code{rwdata}} method of @code{Array<T>} is not
 available.  It is, however, replaced by three separate methods @code{ridx},
 @code{cidx}, and @code{data}, that access the raw compressed column format that
 Octave sparse matrices are stored in.  These methods can be used in a manner
@@ -1220,7 +1220,7 @@
 The disadvantage of this is that if the foreign code allocates any memory
 internally, then this memory might be lost during an interrupt, without being
 deallocated.  Therefore, ideally Octave itself should allocate any memory that
-is needed by the foreign code, with either the @nospell{@code{fortran_vec}}
+is needed by the foreign code, with either the @nospell{@code{rwdata}}
 method or the @w{@code{OCTAVE_LOCAL_BUFFER}}@ macro.
 
 The Octave @code{unwind_protect} mechanism (@ref{The unwind_protect Statement})
--- a/doc/interpreter/graphics_properties.mk	Mon Feb 26 23:28:09 2024 -0500
+++ b/doc/interpreter/graphics_properties.mk	Mon Feb 26 23:30:33 2024 -0500
@@ -11,7 +11,7 @@
 
 define gen-propdoc-texi
   rm -f $@-t $@ && \
-  $(top_builddir)/run-octave -disable-asan --norc --silent --no-history --path $(srcdir)/interpreter --eval "genpropdoc ('$(1)');" > $@-t && \
+  $(top_builddir)/run-octave -disable-asan --norc --quiet --no-history --path $(srcdir)/interpreter --eval "genpropdoc ('$(1)');" > $@-t && \
   mv $@-t $@
 endef
 
--- a/doc/interpreter/images.awk	Mon Feb 26 23:28:09 2024 -0500
+++ b/doc/interpreter/images.awk	Mon Feb 26 23:30:33 2024 -0500
@@ -54,7 +54,7 @@
 
     for (j = 2; j <= NF; j++) {
       printf ("%s%s.%s: %s%s\n", dir, $j, ext, dir, script);
-      printf ("\t$(AM_V_GEN)$(SHELL) run-octave -disable-asan --norc --silent --no-history --path $(abs_top_srcdir)/%s --eval \"%s ('%s', '%s', '%s');\"\n",
+      printf ("\t$(AM_V_GEN)$(SHELL) run-octave -disable-asan --norc --quiet --no-history --path $(abs_top_srcdir)/%s --eval \"%s ('%s', '%s', '%s');\"\n",
               dir, basename, dir, $j, ext);
     }
   }
--- a/doc/interpreter/module.mk	Mon Feb 26 23:28:09 2024 -0500
+++ b/doc/interpreter/module.mk	Mon Feb 26 23:30:33 2024 -0500
@@ -26,7 +26,7 @@
 
 define gen-propdoc-texi
   rm -f $@-t $@ && \
-  $(SHELL) run-octave -disable-asan --norc --silent --no-history --path $(srcdir)/doc/interpreter --eval "genpropdoc ('$(1)');" > $@-t && \
+  $(SHELL) run-octave -disable-asan --norc --quiet --no-history --path $(srcdir)/doc/interpreter --eval "genpropdoc ('$(1)');" > $@-t && \
   mv $@-t $@
 endef
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/etc/NEWS.10.md	Mon Feb 26 23:30:33 2024 -0500
@@ -0,0 +1,104 @@
+Summary of important user-visible changes for version 10 (yyyy-mm-dd):
+---------------------------------------------------------------------
+
+### General improvements
+
+- Three short form aliases have been added for long form options when starting
+`octave`.
+  * `-e CODE` for `--eval CODE`
+  * `-g` for `--gui`
+  * `-G` for `--no-gui`
+
+- Three long form options have been introduced for clarity.
+  * `--no-init-user` : Don't read user configuration files ~/.octaverc or
+    .octaverc files at startup.
+  * `--no-init-site` : Don't read site-wide configuration files at startup.
+  * `--no-init-all` : Don't read any configuration files at startup.
+
+- `nchoosek` algorithm is now ~2x faster and provides greater precision. 
+
+### Graphical User Interface
+
+### Graphics backend
+
+- `polar` plots now include the center tick mark value, typically 0, in
+the 'rtick' parameter when the plot is created.  Subsequent modifications
+to 'rtick' by the function `rticks` will only include the center tick mark
+value if it is specified.
+
+### Matlab compatibility
+
+- `height` and `width` are now aliases for the `rows` and `columns` functions.
+
+- All colormaps now default to a size of 256 colors. (The previous default
+size was 64.
+
+- `griddata` output size more consistently matches the input interpolation
+points when they are input as vectors.  When they are same-orientation vectors,
+the outputs will be the same size as those vectors.  When either is a row
+vector and the other is a column vector, the interpolating points are processed
+through meshgrid and the output is a matrix the same size as the meshgrid.
+
+- Enable the third output for `unique` with the `stable` sort option.
+
+### Alphabetical list of new functions added in Octave 10
+
+* `rticklabels`
+* `tticklabels`
+
+### Deprecated functions, properties, and operators
+
+The following functions and properties have been deprecated in Octave 10
+and will be removed from Octave 12 (or whatever version is the second
+major release after 10):
+
+- Functions
+
+        Function               | Replacement
+        -----------------------|------------------
+
+- Core
+
+        Function                              | Replacement
+        --------------------------------------|------------------
+        symbol_record_rep::mark_as_variable   | symbol_record_rep::mark_variable
+        symbol_record_rep::unmark_as_variable | symbol_record_rep::unmark_variable
+        symbol_record::mark_as_variable       | symbol_record::mark_variable
+        symbol_record::unmark_as_variable     | symbol_record::unmark_variable
+        interpreter::verbose                  | interpreter::init_trace
+        cmdline_options::verbose              | cmdline_options::init_trace
+
+  - A new method `rwdata ()` provides direct read/write access (a pointer) to the
+data in a liboctave `Array` object (or its derived classes such as `Matrix`).
+Historically, the method `fortran_vec ()` provided this access, but the name
+is unclear, and it is recommended to use `rwdata ()` in any new code.  There
+are no plans to deprecate `fortran_vec`.
+
+  - The `--verbose`,`-V` command-line option has been deprecated.  Use
+`--init-trace` to print the configuration files executed during initialization.
+
+The following features were deprecated in Octave 8 and have been removed
+from Octave 10.
+
+- Functions
+
+        Function               | Replacement
+        -----------------------|------------------
+        shift                  | circshift
+        sparse_auto_mutate     | none (see below)
+
+
+Summary of bugs fixed for version 10.1.0 (yyyy-mm-dd):
+----------------------------------------------------
+
+### Old release news
+
+- [Octave 9.x](etc/NEWS.9.md)
+- [Octave 8.x](etc/NEWS.8.md)
+- [Octave 7.x](etc/NEWS.7.md)
+- [Octave 6.x](etc/NEWS.6.md)
+- [Octave 5.x](etc/NEWS.5.md)
+- [Octave 4.x](etc/NEWS.4)
+- [Octave 3.x](etc/NEWS.3)
+- [Octave 2.x](etc/NEWS.2)
+- [Octave 1.x](etc/NEWS.1)
--- a/etc/RELEASE_CHECKLIST.md	Mon Feb 26 23:28:09 2024 -0500
+++ b/etc/RELEASE_CHECKLIST.md	Mon Feb 26 23:30:33 2024 -0500
@@ -24,6 +24,9 @@
   `etc/HACKING.md`).
 * Bump version numbers in `configure.ac` on default branch (see
   `etc/HACKING.md`).
+* Create new `etc/NEWS.VERSION+1.md` file on default branch by copying
+  `etc/NEWS.VERSION.md` and then removing text so that it is a template file
+  with headings only.
 
 ### ⚙️ Update gnulib to latest version ###
 
@@ -37,10 +40,13 @@
 
 Completion Date:
 
-* Put out a general call for reports on [Octave Discourse](https://octave.discourse.group/) for all outstanding unreported known bugs.
-* Create Savannah tag `VERSION.0.90` on bug tracker for 1st release candidate.
+* Put out a general call for reports on [Octave Discourse](https://octave.discourse.group/) for all outstanding, but unreported, known bugs.
+* Create Savannah `Release` tag `VERSION.0.90` on bug tracker for 1st release
+  candidate.
 * Mark items that should be fixed for the release with this tag.
-* Bug overview at <https://octave.space/savannah/>.
+* Update Savannah `Planned Release` and `Fixed Release` tags by adding
+  `VERSION.1.0 (current stable)` and `VERSION+1.1.0 (current default)`.
+* Review bug overview at <https://octave.space/savannah/>.
 
 ### 📢 Update GUI translation files ###
 
@@ -50,7 +56,7 @@
   might change GUI strings.
 * String freeze date:
 * Update language translation files (`*.ts`).  See instructions in
-  `libgui/languages/build_ts/README.md`).
+  `libgui/languages/build_ts/README.md`.
 * Create bug report on Savannah as a centralized location for uploading files
   and tracking status of translations.
 * Call for translations of GUI strings on [Octave Discourse Maintainers](https://octave.discourse.group/c/maintainers/7), CC-ing the translators (see [list of translators](https://hg.savannah.gnu.org/hgweb/octave/file/tip/libgui/languages/translators)).
@@ -61,8 +67,16 @@
 Completion Date:
 
 * Update copyright statements for all source controlled files.
-* Update dates in any other locations (launch message, citation, MXE files,
-  etc.).
+
+    Command to update copyright notifications
+
+    `hg locate | xargs sed -i 's/Copyright (C) \([0-9][0-9][0-9][0-9]\)-2023 The Octave Project Developers/Copyright (C) \1-2024 The Octave Project Developers/; s/Copyright (C) 2023 The Octave Project Developers/Copyright (C) 2023-2024 The Octave Project Developers/'`
+
+    Command to check results before checking in
+
+    `hg diff | grep ^[-+][^-+] | sed 's/[0-9][0-9][0-9][0-9]-/YYYY-/' | sort -u`
+
+* Update dates in any other locations (`CITATION`, MXE `README.html` file).
 * Add any new contributors to `doc/interpreter/contributors.in` who wish to be
   mentioned (don't add them without permission).
 
@@ -110,8 +124,11 @@
 * Use software tools to check quality of Octave code.
   * Check for memory leaks by configuring with
     `--enable-address-sanitizer-flags` and compiling with
-    `-fsanitize=undefined`, `-fno-omit-frame-pointer` in `CFLAGS`, `CXXFLAGS`,
-    and `LDFLAGS`.
+    `-g -O0 -fno-optimize-sibling-calls` in `CFLAGS`, `CXXFLAGS`, and
+    `LDFLAGS`.
+  * Check for bad memory accesses by compiling with
+    `-g -O0 -fsanitize=undefined -fno-omit-frame-pointer
+    -fno-optimize-sibling-calls` in `CFLAGS`, `CXXFLAGS`, and `LDFLAGS`.
   * Update static code analysis results.
       * For `clang`, do `scan-build make -j<N> all` and then `scan-view`.
       * See [PVS static analyzer - 5.0 Release](https://wiki.octave.org/PVS_static_analyzer_-_5.0_Release).
@@ -150,17 +167,18 @@
 * Create `hg tag` in repository with release candidate version number
   (`release-VERSION-1-0`).
 * Update `etc/NEWS.VERSION.md` (final release date in Summary header).
-* Update `CITATION` (version, year, URL).
+* Update `CITATION` (version, year, URL) if not already done as part of "GPL
+  License activities.
 * Update `etc/icons/org.octave.Octave.appdata.xml` (version number and release
   date).
 * Upload all tarballs to <https://ftp.gnu.org/gnu/octave/>.
 * Update web site files: `NEWS-VERSION.html`, `index.in`, `news.in`, and
   `download.in`.
 * Update <https://wiki.octave.org/Release_History> page.
-* Update Savannah bug tracker version info to have new release number.
+* Update Savannah bug tracker `Release` field to have new release number.
 * Update Savannah bug tracker: **OPEN** bugs marked as **WON'T FIX** should be
   marked as **CONFIRMED** (or more appropriate) for the final release.
-* Hide release candidate versions in Savannah.
+* Hide release candidate versions for `Release` field on Savannah.
 
 ### 📢 Announce final release ###
 
@@ -181,9 +199,8 @@
 
 Completion Date:
 
-* Remove all deprecated functions (either tagged with `OCTAVE_DEPRECATED` in
-  C++ or in the directory `scripts/deprecated` for m-files) scheduled for
-  deletion on default branch.  Check file `etc/NEWS.VERSION-2.md` for list of
-  features that have been deprecated.
-* Create new `etc/NEWS.VERSION+1.md` file by copying `etc/NEWS.VERSION.md` and
-  then removing text so that it is a template file with headings only.
+* Remove all deprecated functions scheduled for deletion on default
+  branch.  These functions are tagged with `OCTAVE_DEPRECATED` in C++ or are
+  m-files located in the directory `scripts/deprecated`.  Check file
+  `etc/NEWS.VERSION-2.md` for list of features that have been deprecated.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/etc/ROADMAP.md	Mon Feb 26 23:30:33 2024 -0500
@@ -0,0 +1,118 @@
+Octave Roadmap (version 10 onwards)
+
+This roadmap is intended to be a living document, and serves multiple purposes:
+* For developers to agree on activities and large-scale features,
+* To decide priorities,
+* To inform new contributors where they can contribute and feel ownership,
+* To allow easier parcelling of smaller activities into GSoC etc,
+* To be a transparent basis for any financial decisions to spend project money.
+
+This document is different from a wishlist of features, such as those
+present on the Octave wiki, in that this document lists names of people
+willing to work on specific activities, whether they are contributors writing code
+themselves, or existing Octave maintainers soliciting / reviewing / accepting code
+from new contributors.
+
+* For new contributors, this is a way to get your contribution
+reviewed and merged into the Octave codebase with more confidence, and a way
+to work with a more experienced Octave developer on a named activity so you too
+can become an Octave developer over time.
+
+* For existing maintainers, this is a way to get new developers and
+contributors in, which helps Octave development scale.
+
+If you want to take ownership of some activity below, or create a new activity,
+please edit the list as necessary, add your name, and post about it on Discourse.
+If you can, please split up a large activity into smaller pieces that can then
+be specifically written by new contributors, GSoC interns, etc. The aim is to
+allow anyone to jump in to start contributing to a topic.
+
+This roadmap process starts from Octave 10. As has been the practice for many
+years, a major version of Octave is released each year, and no single feature
+will be "required" for any given version to be released, but it is good to have
+target versions for this list of features so that certain long-pending activities
+get more priority.
+
+- Better support for classdef. (LEAD?)
+  - Matlab-compatible classdef behavior.
+  - (Needs to be split up into smaller activities.)
+  - Target: Octave 10.
+
+- HDF5 compatibility with Matlab: (LEAD?)
+  - Deprecate Octave's native savefile formats in favor of Matlab-compatible HDF5.
+  - Decide how to handle backwards compatibility with older savefiles.
+  - Needs h5read/h5write as well as v7.3 MAT-file load/save support.
+  - Influenced by classdef decision above.
+  - Note: Examine Nelson's implementation.
+  - Target: Octave 10.
+
+- String class "foo" as distinct from array of characters 'foo'. (LEAD?)
+  - See https://octave.discourse.group/t/implementation-of-a-string-class/1089
+  - Depends on HDF5. 
+  - Note: Examine Nelson's implementation.
+  - Target: Octave 10.
+
+- Dictionaries (aka associative arrays / hashmaps).  (LEAD? GUILLAUME?)
+  - See https://octave.discourse.group/t/adding-hashmaps-to-octave/3306
+  - Depends on HDF5 and string.
+  - Target: Octave 10.
+
+- Release bytecode interpreter.  (PETTER, JWE)
+  - First question: When Octave is released with the bytecode interpreter,
+    will it *replace* the tree-walker or will it sit alongside it? Once that
+    question is answered and agreed upon, these activities follow.
+  - Behavior compatibility with tree-walking interpreter.
+  - Code clarity and documentation.
+  - Style check.
+  - Performance experiments.
+  - Target: Octave 10
+
+- New command window widget.  (LEAD?)
+  - In Octave 9, this widget is available but experimental. It can be invoked
+    with the runtime argument `--experimental-terminal-widget`. To make it
+    production quality (i.e., not experimental), the following features and
+    more need to be added:
+    - readline-like command line editing: recall history with up/down arrow keys
+    - capture output written to stdout/stderr
+    - a pager to enable `more on` to work
+    - search the contents of the command window
+    - clear the command window for `clc`
+  - Background: https://wiki.octave.org/GUI_terminal_widget
+  - Discussion: https://octave.discourse.group/t/new-command-window-widget/501
+  - Target: Octave 11
+
+- Graph theory routines (ARUN)
+  - These need a full overhaul and in some cases ground-up implementation.
+  - Matlab switched to graph objects some versions ago, as opposed to the
+    traditional approach (pre-2016) of directly manipulating adjacency matrices
+    and edge lists.
+  - Octave needs to implement / import many classical graph functions
+    (e.g. all-pairs shortest paths, transitive closure, betweenness centrality, etc).
+    These are not difficult to write, but have mostly been written by end users
+    for their own work, so the first effort is to converge on a usable function API.
+  - Possible dependency on HDF5 if graph classes are written as classdefs,
+    so graph objects will not be saved until then, but the rest of the
+    development can start and proceed.
+  - Target: Octave 10-11, potential GSoC project for 2024.
+
+- Argument blocks implementation. (LEAD?)
+  - Some work has already been done, but needs to be completed.
+  - Target: Octave 11.
+
+- Assess OpenGL role and improvements.  (RIK?)
+  - May possibly need a paid consultant.
+  - Target: Octave 11
+
+- Replace GLPK with more performant solver for LP / MILP. (ARUN)
+  - Candidate: HiGHS.
+  - More generally, provide a usable API for optimization routines so that
+    users can drop in their own favorite solver. The idea is that the user
+    should be able to switch backend solvers with just a simple change
+    like changing this:
+    `linprog (... , "solver", "glpk")`
+    to this:
+    `linprog (... , "solver", "highs")`
+    without changing any other user-written code. Can this sort of thing
+    be done properly so that new solvers are easy to add to Octave by their
+    respective authors?
+  - Target: Octave 11
--- a/etc/module.mk	Mon Feb 26 23:28:09 2024 -0500
+++ b/etc/module.mk	Mon Feb 26 23:30:33 2024 -0500
@@ -14,6 +14,7 @@
   %reldir%/NEWS.7.md \
   %reldir%/NEWS.8.md \
   %reldir%/NEWS.9.md \
+  %reldir%/NEWS.10.md \
   %reldir%/gdbinit
 
 %canon_reldir%_EXTRA_DIST += \
--- a/examples/code/fortrandemo.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/examples/code/fortrandemo.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -15,7 +15,7 @@
 
   NDArray a = args(0).array_value ();
 
-  double *av = a.fortran_vec ();
+  double *av = a.rwdata ();
   octave_idx_type na = a.numel ();
 
   OCTAVE_LOCAL_BUFFER (char, ctmp, 128);
--- a/libgui/graphics/Canvas.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/graphics/Canvas.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -902,7 +902,7 @@
                   props.prepend (figObj.get_handle ().as_octave_value ());
 
                   emit interpreter_event
-                    ([=] (octave::interpreter& interp)
+                    ([this, props] (octave::interpreter& interp)
                      {
                        // INTERPRETER THREAD
 
--- a/libgui/graphics/FigureWindow.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/graphics/FigureWindow.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -35,7 +35,7 @@
 OCTAVE_BEGIN_NAMESPACE(octave)
 
 FigureWindow::FigureWindow (QWidget *xparent)
-: FigureWindowBase (xparent)
+  : FigureWindowBase (xparent)
 {
   // set icon from application resources
   setWindowIcon (QIcon (global_icon_paths.at (ICON_THEME_OCTAVE)));
@@ -51,7 +51,8 @@
   return nullptr;
 }
 
-void FigureWindow::showEvent (QShowEvent *ev)
+void
+FigureWindow::showEvent (QShowEvent *ev)
 {
   QMainWindow::showEvent (ev);
   emit figureWindowShown();
--- a/libgui/graphics/GLCanvas.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/graphics/GLCanvas.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -69,7 +69,7 @@
     {
       begin_rendering ();
 
-      unwind_action reset_current ([=] () { end_rendering (); });
+      unwind_action reset_current ([this] () { end_rendering (); });
 
       graphics_object fig = go.get_ancestor ("figure");
       double dpr = fig.get ("__device_pixel_ratio__").double_value ();
@@ -94,7 +94,7 @@
 
       begin_rendering ();
 
-      unwind_action reset_current ([=] () { end_rendering (); });
+      unwind_action reset_current ([this] () { end_rendering (); });
 
       // When the figure is not visible or its size is frozen for printing,
       // we use a framebuffer object to make sure we are rendering on a
@@ -108,7 +108,7 @@
 
           fbo.bind ();
 
-          unwind_action release_fbo ([&] () { fbo.release (); });
+          unwind_action release_fbo ([&fbo] () { fbo.release (); });
 
           m_renderer.set_viewport (pos(2), pos(3));
           m_renderer.set_device_pixel_ratio (dpr);
@@ -137,7 +137,7 @@
     {
       begin_rendering ();
 
-      unwind_action reset_current ([=] () { end_rendering (); });
+      unwind_action reset_current ([this] () { end_rendering (); });
 
       graphics_object fig (go.get_ancestor ("figure"));
 
@@ -159,7 +159,7 @@
 
           fbo.bind ();
 
-          unwind_action release_fbo ([&] () { fbo.release (); });
+          unwind_action release_fbo ([&fbo] () { fbo.release (); });
 
           octave::gl2ps_print (m_glfcns, fig, file_cmd.toStdString (),
                                term.toStdString ());
@@ -174,7 +174,7 @@
     {
       begin_rendering ();
 
-      unwind_action reset_current ([=] () { end_rendering (); });
+      unwind_action reset_current ([this] () { end_rendering (); });
 
       octave::opengl_selector s (m_glfcns);
 
@@ -201,7 +201,7 @@
 
   begin_rendering ();
 
-  unwind_action reset_current ([=] () { end_rendering (); });
+  unwind_action reset_current ([this] () { end_rendering (); });
 
   m_renderer.draw_zoom_box (width (), height (),
                             p1.x (), p1.y (), p2.x (), p2.y (),
@@ -348,7 +348,7 @@
   catch (octave::execution_exception& ee)
     {
       emit interpreter_event
-        ([=] ()
+        ([ee] ()
         {
           // INTERPRETER THREAD
           throw ee;
--- a/libgui/graphics/GenericEventNotify.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/graphics/GenericEventNotify.h	Mon Feb 26 23:30:33 2024 -0500
@@ -66,9 +66,8 @@
   virtual void eventNotifyAfter (QObject *obj, QEvent *evt) = 0;
 };
 
-inline
-bool GenericEventNotifySender::notifyReceiversBefore (QObject *obj,
-                                                      QEvent *evt)
+inline bool
+GenericEventNotifySender::notifyReceiversBefore (QObject *obj, QEvent *evt)
 {
   for (auto *r : m_receivers)
     if (r->eventNotifyBefore (obj, evt))
@@ -77,9 +76,8 @@
   return false;
 }
 
-inline
-void GenericEventNotifySender::notifyReceiversAfter (QObject *obj,
-                                                     QEvent *evt)
+inline void
+GenericEventNotifySender::notifyReceiversAfter (QObject *obj, QEvent *evt)
 {
   for (auto *r : m_receivers)
     r->eventNotifyAfter (obj, evt);
--- a/libgui/graphics/KeyMap.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/graphics/KeyMap.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -250,7 +250,8 @@
     return keyMapper;
   }
 
-  std::string qKeyToKeyString (int key)
+  std::string
+  qKeyToKeyString (int key)
   {
     static const QMap<int, std::string> keyMapper = makeKeyMapper ();
 
--- a/libgui/graphics/Object.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/graphics/Object.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -189,7 +189,8 @@
 Object::beingDeleted ()
 { }
 
-void Object::objectDestroyed (QObject *obj)
+void
+Object::objectDestroyed (QObject *obj)
 {
   if (obj && obj == m_qobject)
     m_qobject = nullptr;
--- a/libgui/graphics/ObjectProxy.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/graphics/ObjectProxy.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -40,7 +40,7 @@
 OCTAVE_BEGIN_NAMESPACE(octave)
 
 ObjectProxy::ObjectProxy (Object *obj)
-: QObject (), m_object (nullptr)
+  : QObject (), m_object (nullptr)
 {
   init (obj);
 }
--- a/libgui/graphics/PopupMenuControl.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/graphics/PopupMenuControl.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -71,7 +71,8 @@
 PopupMenuControl::~PopupMenuControl ()
 { }
 
-void PopupMenuControl::update (int pId)
+void
+PopupMenuControl::update (int pId)
 {
   uicontrol::properties& up = properties<uicontrol> ();
   QComboBox *box = qWidget<QComboBox> ();
--- a/libgui/graphics/QtHandlesUtils.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/graphics/QtHandlesUtils.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -85,7 +85,8 @@
     return v;
   }
 
-  Cell toCellString (const QStringList& l)
+  Cell
+  toCellString (const QStringList& l)
   {
     QStringList tmp = l;
 
@@ -159,7 +160,7 @@
   toRgb (const QColor& c)
   {
     Matrix rgb (1, 3);
-    double *rgbData = rgb.fortran_vec ();
+    double *rgbData = rgb.rwdata ();
 
 #if HAVE_QCOLOR_FLOAT_TYPE
     float tmp[3];
@@ -284,7 +285,7 @@
   QImage
   makeImageFromCData (const octave_value& v, int width, int height)
   {
-    dim_vector dv (v.dims ());
+    const dim_vector& dv = v.dims ();
 
     if (dv.ndims () == 3 && dv(2) == 3)
       {
@@ -384,7 +385,7 @@
 #if defined (Q_OS_MAC)
       modList.push_back ("command");
 #else
-    modList.push_back ("control");
+      modList.push_back ("control");
 #endif
     if (mods & Qt::AltModifier)
       modList.push_back ("alt");
--- a/libgui/graphics/Table.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/graphics/Table.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -61,7 +61,8 @@
 
 #define AUTO_HEIGHT (tp.get_fontsize () * 2 - 1)
 
-static QSize realQSizeForTable (QTableWidget *t)
+static QSize
+realQSizeForTable (QTableWidget *t)
 {
   int w = t->verticalHeader ()->width () + 4;
   for (int i = 0; i < t->columnCount (); i++)
@@ -329,8 +330,8 @@
 #undef FORMAT_UINT_VALUE
 #undef FORMAT_INT_VALUE
 
-static QTableWidgetItem * itemFor (octave_value val, std::string format = "",
-                                   bool enabled = false)
+static QTableWidgetItem *
+itemFor (octave_value val, std::string format = "", bool enabled = false)
 {
   QTableWidgetItem *retval = new QTableWidgetItem ();
   std::pair<Qt::AlignmentFlag, QString> flag_and_text =
--- a/libgui/graphics/ToolBarButton.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/graphics/ToolBarButton.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -153,7 +153,8 @@
 }
 
 template <typename T>
-QIcon ToolBarButton<T>::get_icon (const std::string& name)
+QIcon
+ToolBarButton<T>::get_icon (const std::string& name)
 {
   return QIcon (global_icon_paths.at (ICON_THEME_OCTAVE) + QString::fromStdString (name) + ".png");
 }
--- a/libgui/graphics/annotation-dialog.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/graphics/annotation-dialog.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -133,7 +133,7 @@
 
   m_props.append (ovl ("string", m_ui->edit_string->text ().toStdString ()));
   m_props.append (ovl ("fitboxtotext",
-                     m_ui->cb_fit_box_to_text->isChecked () ? "on" : "off"));
+                       m_ui->cb_fit_box_to_text->isChecked () ? "on" : "off"));
 
   // FIXME: only "normalized" units is selectable, change the code below
   //        once more units are added in the UI.
@@ -153,11 +153,11 @@
 
   m_props.append (ovl ("fontsize", m_ui->sb_font_size->value ()));
   m_props.append (ovl ("fontweight",
-                     m_ui->cb_font_bold->isChecked () ? "bold" : "normal"));
+                       m_ui->cb_font_bold->isChecked () ? "bold" : "normal"));
   m_props.append (ovl ("fontangle",
-                     m_ui->cb_font_italic->isChecked () ? "italic" : "normal"));
+                       m_ui->cb_font_italic->isChecked () ? "italic" : "normal"));
   m_props.append (ovl ("color", octave::Utils::toRgb (m_ui->btn_color->palette ().
-                     color (QPalette::Button))));
+                       color (QPalette::Button))));
 
   // FIXME: only "none" linestyle is selectable, change the code bellow
   //        once more linestyles are added in the UI.
--- a/libgui/graphics/qt-graphics-toolkit.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/graphics/qt-graphics-toolkit.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -459,47 +459,52 @@
     }
 }
 
-void qt_graphics_toolkit::gh_callback_event (const graphics_handle& h,
-                                             const std::string& nm)
+void
+qt_graphics_toolkit::gh_callback_event (const graphics_handle& h,
+                                        const std::string& nm)
 {
   gh_manager& gh_mgr = m_interpreter.get_gh_manager ();
 
   gh_mgr.post_callback (h, nm);
 }
 
-void qt_graphics_toolkit::gh_callback_event (const graphics_handle& h,
-                                             const std::string& nm,
-                                             const octave_value& data)
+void
+qt_graphics_toolkit::gh_callback_event (const graphics_handle& h,
+                                        const std::string& nm,
+                                        const octave_value& data)
 {
   gh_manager& gh_mgr = m_interpreter.get_gh_manager ();
 
   gh_mgr.post_callback (h, nm, data);
 }
 
-void qt_graphics_toolkit::gh_set_event (const graphics_handle& h,
-                                        const std::string& nm,
-                                        const octave_value& value)
+void
+qt_graphics_toolkit::gh_set_event (const graphics_handle& h,
+                                   const std::string& nm,
+                                   const octave_value& value)
 {
   gh_manager& gh_mgr = m_interpreter.get_gh_manager ();
 
   gh_mgr.post_set (h, nm, value);
 }
 
-void qt_graphics_toolkit::gh_set_event (const graphics_handle& h,
-                                        const std::string& nm,
-                                        const octave_value& value,
-                                        bool notify_toolkit)
+void
+qt_graphics_toolkit::gh_set_event (const graphics_handle& h,
+                                   const std::string& nm,
+                                   const octave_value& value,
+                                   bool notify_toolkit)
 {
   gh_manager& gh_mgr = m_interpreter.get_gh_manager ();
 
   gh_mgr.post_set (h, nm, value, notify_toolkit);
 }
 
-void qt_graphics_toolkit::gh_set_event (const graphics_handle& h,
-                                        const std::string& nm,
-                                        const octave_value& value,
-                                        bool notify_toolkit,
-                                        bool redraw_figure)
+void
+qt_graphics_toolkit::gh_set_event (const graphics_handle& h,
+                                   const std::string& nm,
+                                   const octave_value& value,
+                                   bool notify_toolkit,
+                                   bool redraw_figure)
 {
   gh_manager& gh_mgr = m_interpreter.get_gh_manager ();
 
--- a/libgui/qterminal/libqterminal/QTerminal.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/qterminal/libqterminal/QTerminal.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -195,7 +195,7 @@
   std::string expr = m_doc_selected_action->data ().toString ().toStdString ();
 
   emit interpreter_event
-    ([=] (octave::interpreter& interp)
+    ([expr] (octave::interpreter& interp)
      {
        // INTERPRETER THREAD
 
@@ -204,7 +204,7 @@
 }
 
 void
-QTerminal::notice_settings (void)
+QTerminal::notice_settings ()
 {
   octave::gui_settings settings;
 
@@ -278,7 +278,7 @@
 }
 
 void
-QTerminal::construct (void)
+QTerminal::construct ()
 {
   octave::gui_settings settings;
 
--- a/libgui/qterminal/libqterminal/QTerminal.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/qterminal/libqterminal/QTerminal.h	Mon Feb 26 23:30:33 2024 -0500
@@ -45,7 +45,7 @@
 
   static QTerminal * create (QWidget *xparent);
 
-  virtual ~QTerminal (void) = default;
+  virtual ~QTerminal () = default;
 
   virtual void setTerminalFont (const QFont& font) = 0;
 
@@ -57,8 +57,8 @@
 
   virtual void has_extra_interrupt (bool extra) = 0;
 
-  virtual QList<QAction*> get_hotspot_actions (const QPoint&)
-  { return QList<QAction*> (); }
+  virtual QList<QAction *> get_hotspot_actions (const QPoint&)
+  { return QList<QAction *> (); }
 
   enum CursorType
   {
@@ -91,7 +91,7 @@
 
   void report_status_message (const QString&);
 
-  void interrupt_signal (void);
+  void interrupt_signal ();
 
   void edit_mfile_request (const QString&, int);
 
@@ -105,36 +105,36 @@
 
   void set_screen_size_signal (int, int);
 
-  void clear_command_window_request (void);
+  void clear_command_window_request ();
 
   void interpreter_event (const octave::fcn_callback& fcn);
   void interpreter_event (const octave::meth_callback& meth);
 
 public slots:
 
-  virtual void copyClipboard (void) = 0;
+  virtual void copyClipboard () = 0;
 
-  virtual void pasteClipboard (void) = 0;
+  virtual void pasteClipboard () = 0;
 
-  virtual void selectAll (void) = 0;
+  virtual void selectAll () = 0;
 
   virtual void handleCustomContextMenuRequested (const QPoint& at);
 
-  void notice_settings (void);
+  void notice_settings ();
 
-  virtual void init_terminal_size (void) { }
+  virtual void init_terminal_size () { }
 
-  void terminal_interrupt (void) { emit interrupt_signal (); }
+  void terminal_interrupt () { emit interrupt_signal (); }
 
-  void run_selection (void);
+  void run_selection ();
 
-  void edit_file (void);
+  void edit_file ();
 
-  void edit_selected (void);
+  void edit_selected ();
 
-  void help_on_expression (void);
+  void help_on_expression ();
 
-  void doc_on_expression (void);
+  void doc_on_expression ();
 
   virtual void handle_visibility_changed (bool) { };
 
--- a/libgui/qterminal/libqterminal/unix/QUnixTerminalImpl.cpp	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/qterminal/libqterminal/unix/QUnixTerminalImpl.cpp	Mon Feb 26 23:30:33 2024 -0500
@@ -57,7 +57,7 @@
     connect(m_terminalView, SIGNAL(customContextMenuRequested(QPoint)),
             this, SLOT(handleCustomContextMenuRequested(QPoint)));
 
-    connect (m_terminalView, SIGNAL (interrupt_signal (void)),
+    connect (m_terminalView, SIGNAL (interrupt_signal ()),
              this, SLOT (terminal_interrupt ()));
 
 #ifdef Q_OS_MAC
--- a/libgui/qterminal/libqterminal/unix/TerminalView.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/qterminal/libqterminal/unix/TerminalView.h	Mon Feb 26 23:30:33 2024 -0500
@@ -466,7 +466,7 @@
 
 signals:
 
-    void interrupt_signal (void);
+    void interrupt_signal ();
 
     /**
      * Emitted when the user presses a key whilst the terminal widget has focus.
--- a/libgui/qterminal/libqterminal/win32/QTerminalColors.cpp	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/qterminal/libqterminal/win32/QTerminalColors.cpp	Mon Feb 26 23:30:33 2024 -0500
@@ -27,7 +27,7 @@
 
 //////////////////////////////////////////////////////////////////////////////
 
-QConsoleColors::QConsoleColors (void)
+QConsoleColors::QConsoleColors ()
     : QMap<int, QColor> ()
 {
   (*this)[0]  = Qt::white;
--- a/libgui/qterminal/libqterminal/win32/QTerminalColors.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/qterminal/libqterminal/win32/QTerminalColors.h	Mon Feb 26 23:30:33 2024 -0500
@@ -31,7 +31,7 @@
 class QConsoleColors : public QMap<int, QColor>
 {
 public:
-  QConsoleColors (void);
+  QConsoleColors ();
 };
 
 //////////////////////////////////////////////////////////////////////////////
--- a/libgui/qterminal/libqterminal/win32/QWinTerminalImpl.cpp	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/qterminal/libqterminal/win32/QWinTerminalImpl.cpp	Mon Feb 26 23:30:33 2024 -0500
@@ -77,7 +77,7 @@
 {
 public:
   QConsoleView (QWinTerminalImpl *parent = 0) : QWidget (parent), q (parent) { }
-  ~QConsoleView (void) { }
+  ~QConsoleView () { }
 
 protected:
   void paintEvent (QPaintEvent *event) { q->viewPaintEvent (this, event); }
@@ -95,7 +95,7 @@
   QConsoleThread (QWinTerminalImpl *console) : QThread (console), q (console) { }
 
 protected:
-  void run (void)
+  void run ()
     { q->start (); }
 
 private:
@@ -180,21 +180,21 @@
     };
 
   QConsolePrivate (QWinTerminalImpl *parent, const QString& cmd = QString ());
-  ~QConsolePrivate (void);
+  ~QConsolePrivate ();
 
   void updateConsoleSize (bool sync = false, bool allow_smaller_width = false);
-  void syncConsoleParameters (void);
+  void syncConsoleParameters ();
   void grabConsoleBuffer (CHAR_INFO* buf = 0);
-  void updateHorizontalScrollBar (void);
-  void updateVerticalScrollBar (void);
+  void updateHorizontalScrollBar ();
+  void updateVerticalScrollBar ();
   void setHorizontalScrollValue (int value);
   void setVerticalScrollValue (int value);
   void updateConsoleView (bool grab = true);
-  void monitorConsole (void);
-  void startCommand (void);
+  void monitorConsole ();
+  void startCommand ();
   void sendConsoleText (const QString& s);
-  QRect cursorRect (void);
-  QRect boundingRect (void);
+  QRect cursorRect ();
+  QRect boundingRect ();
   void selectAll ();
   void selectWord (const QPoint& cellPos);
   void selectLine (const QPoint& cellPos);
@@ -206,14 +206,14 @@
                         const char *devName);
 
   QPoint posToCell (const QPoint& pt);
-  QString getSelection (void);
-  void updateSelection (void);
-  void clearSelection (void);
+  QString getSelection ();
+  void updateSelection ();
+  void clearSelection ();
 
-  QColor backgroundColor (void) const;
-  QColor foregroundColor (void) const;
-  QColor selectionColor (void) const;
-  QColor cursorColor (void) const;
+  QColor backgroundColor () const;
+  QColor foregroundColor () const;
+  QColor selectionColor () const;
+  QColor cursorColor () const;
 
   void setBackgroundColor (const QColor& color);
   void setForegroundColor (const QColor& color);
@@ -435,8 +435,8 @@
   QObject::connect (m_verticalScrollBar, SIGNAL (valueChanged (int)),
                     q, SLOT (verticalScrollValueChanged (int)));
 
-  QObject::connect (m_consoleWatcher, SIGNAL (timeout (void)),
-                    q, SLOT (monitorConsole (void)));
+  QObject::connect (m_consoleWatcher, SIGNAL (timeout ()),
+                    q, SLOT (monitorConsole ()));
 
   m_consoleWatcher->start ();
 
@@ -445,15 +445,15 @@
   else
     {
       m_consoleThread = new QConsoleThread (q);
-      QObject::connect (m_consoleThread, SIGNAL (finished (void)),
-                        q, SIGNAL (terminated (void)));
+      QObject::connect (m_consoleThread, SIGNAL (finished ()),
+                        q, SIGNAL (terminated ()));
       m_consoleThread->start ();
     }
 }
 
 //////////////////////////////////////////////////////////////////////////////
 
-QConsolePrivate::~QConsolePrivate (void)
+QConsolePrivate::~QConsolePrivate ()
 {
   if (m_consoleThread && m_consoleThread->isRunning () && m_process)
     {
@@ -505,7 +505,7 @@
                                / m_charSize.height ()));
 }
 
-QString QConsolePrivate::getSelection (void)
+QString QConsolePrivate::getSelection ()
 {
   QString selection;
 
@@ -566,7 +566,7 @@
   return selection;
 }
 
-void QConsolePrivate::updateSelection (void)
+void QConsolePrivate::updateSelection ()
 {
   QPoint begin = m_beginSelection;
   QPoint end = m_endSelection;
@@ -579,29 +579,29 @@
   m_consoleView->update ();
 }
 
-void QConsolePrivate::clearSelection (void)
+void QConsolePrivate::clearSelection ()
 {
   m_beginSelection = m_endSelection = QPoint ();
 
   m_consoleView->update ();
 }
 
-QColor QConsolePrivate::backgroundColor (void) const
+QColor QConsolePrivate::backgroundColor () const
 {
   return m_colors[0];
 }
 
-QColor QConsolePrivate::foregroundColor (void) const
+QColor QConsolePrivate::foregroundColor () const
 {
   return m_colors[7];
 }
 
-QColor QConsolePrivate::selectionColor (void) const
+QColor QConsolePrivate::selectionColor () const
 {
   return m_selectionColor;
 }
 
-QColor QConsolePrivate::cursorColor (void) const
+QColor QConsolePrivate::cursorColor () const
 {
   return m_cursorColor.isValid () ? m_cursorColor : foregroundColor ();
 }
@@ -1088,7 +1088,7 @@
 
 //////////////////////////////////////////////////////////////////////////////
 
-void QConsolePrivate::syncConsoleParameters (void)
+void QConsolePrivate::syncConsoleParameters ()
 {
   CONSOLE_SCREEN_BUFFER_INFO sbi;
   HANDLE hStdOut = m_stdOut;
@@ -1154,7 +1154,7 @@
 
 //////////////////////////////////////////////////////////////////////////////
 
-void QConsolePrivate::updateHorizontalScrollBar (void)
+void QConsolePrivate::updateHorizontalScrollBar ()
 {
   m_horizontalScrollBar->setMinimum (0);
   if (m_bufferSize.width () > m_consoleRect.width ())
@@ -1172,7 +1172,7 @@
        m_horizontalScrollBar->pageStep ());
 }
 
-void QConsolePrivate::updateVerticalScrollBar (void)
+void QConsolePrivate::updateVerticalScrollBar ()
 {
   m_verticalScrollBar->setMinimum (0);
   if (m_bufferSize.height () > m_consoleRect.height ())
@@ -1266,7 +1266,7 @@
 
 //////////////////////////////////////////////////////////////////////////////
 
-void QConsolePrivate::monitorConsole (void)
+void QConsolePrivate::monitorConsole ()
 {
   CONSOLE_SCREEN_BUFFER_INFO sbi;
   HANDLE hStdOut = GetStdHandle (STD_OUTPUT_HANDLE);
@@ -1362,7 +1362,7 @@
 
 //////////////////////////////////////////////////////////////////////////////
 
-void QConsolePrivate::startCommand (void)
+void QConsolePrivate::startCommand ()
 {
   QString cmd = m_command;
 
@@ -1469,7 +1469,7 @@
 }
 
 QRect
-QConsolePrivate::cursorRect (void)
+QConsolePrivate::cursorRect ()
 {
   // The actual character width might be fractional (with non-integer scaling -
   // high DPI).  But m_charSize.width () is integer.
@@ -1492,7 +1492,7 @@
 }
 
 QRect
-QConsolePrivate::boundingRect (void)
+QConsolePrivate::boundingRect ()
 {
   // This is slightly larger than cursorRect to make sure the entirety of a
   // character is redrawn.
@@ -1524,7 +1524,7 @@
 
 //////////////////////////////////////////////////////////////////////////////
 
-QWinTerminalImpl::~QWinTerminalImpl (void)
+QWinTerminalImpl::~QWinTerminalImpl ()
 {
   delete d;
 }
@@ -1632,7 +1632,7 @@
   d->drawText (p, cx1, cy1, cx2, cy2, ch);
 }
 
-void QWinTerminalImpl::blinkCursorEvent (void)
+void QWinTerminalImpl::blinkCursorEvent ()
 {
   if (d->m_hasBlinkingCursor)
     d->m_cursorBlinking = ! d->m_cursorBlinking;
@@ -1665,7 +1665,7 @@
 
 // Reset width of console buffer and terminal window to be the same.
 
-void QWinTerminalImpl::init_terminal_size (void)
+void QWinTerminalImpl::init_terminal_size ()
 {
   d->updateConsoleSize (true, true);
 }
@@ -1697,12 +1697,12 @@
 
 //////////////////////////////////////////////////////////////////////////////
 
-void QWinTerminalImpl::monitorConsole (void)
+void QWinTerminalImpl::monitorConsole ()
 {
   d->monitorConsole ();
 }
 
-void QWinTerminalImpl::updateSelection (void)
+void QWinTerminalImpl::updateSelection ()
 {
   d->updateSelection ();
 }
@@ -1761,7 +1761,7 @@
 
 //////////////////////////////////////////////////////////////////////////////
 
-void QWinTerminalImpl::start (void)
+void QWinTerminalImpl::start ()
 {
   d->startCommand ();
 }
@@ -1862,7 +1862,7 @@
 
 //////////////////////////////////////////////////////////////////////////////
 
-void QWinTerminalImpl::pasteClipboard (void)
+void QWinTerminalImpl::pasteClipboard ()
 {
   if(!hasFocus()) return;
 
@@ -1882,7 +1882,7 @@
 
 //////////////////////////////////////////////////////////////////////////////
 
-void QWinTerminalImpl::selectAll (void)
+void QWinTerminalImpl::selectAll ()
 {
   if(!hasFocus()) return;
 
--- a/libgui/qterminal/libqterminal/win32/QWinTerminalImpl.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/qterminal/libqterminal/win32/QWinTerminalImpl.h	Mon Feb 26 23:30:33 2024 -0500
@@ -50,7 +50,7 @@
 
 public:
   QWinTerminalImpl (QWidget *parent);
-  ~QWinTerminalImpl (void);
+  ~QWinTerminalImpl ();
 
   void setTerminalFont (const QFont& font);
   void setSize (int columns, int lines);
@@ -68,14 +68,14 @@
   void has_extra_interrupt (bool);
 
 public slots:
-  void copyClipboard (void);
-  void pasteClipboard (void);
-  void selectAll (void);
-  void blinkCursorEvent (void);
-  void init_terminal_size (void);
+  void copyClipboard ();
+  void pasteClipboard ();
+  void selectAll ();
+  void blinkCursorEvent ();
+  void init_terminal_size ();
 
 signals:
-  void terminated (void);
+  void terminated ();
   void titleChanged (const QString&);
 
 protected:
@@ -87,7 +87,7 @@
   void focusInEvent (QFocusEvent *);
   void focusOutEvent (QFocusEvent *);
   void keyPressEvent (QKeyEvent *);
-  virtual void start (void);
+  virtual void start ();
   void mouseMoveEvent (QMouseEvent *event);
   void mousePressEvent (QMouseEvent *event);
   void mouseReleaseEvent (QMouseEvent *event);
@@ -102,9 +102,9 @@
 private slots:
   void horizontalScrollValueChanged (int value);
   void verticalScrollValueChanged (int value);
-  void monitorConsole (void);
-  void updateSelection (void);
-  void tripleClickTimeout (void);
+  void monitorConsole ();
+  void updateSelection ();
+  void tripleClickTimeout ();
 
 private:
   QConsolePrivate *d;
--- a/libgui/src/color-picker.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/color-picker.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -36,7 +36,7 @@
 
 // Constructor with initial color as parameter
 color_picker::color_picker (QColor old_color, QWidget *p)
-: QPushButton (p)
+  : QPushButton (p)
 {
   m_color = old_color;
   setFlat (true);
@@ -46,7 +46,8 @@
 }
 
 // Slot for button clicked: select a new color using QColorDialog
-void color_picker::select_color ()
+void
+color_picker::select_color ()
 {
   QColor new_color = QColorDialog::getColor (m_color);
 
@@ -58,14 +59,16 @@
 }
 
 // Set the color of the button
-void color_picker::set_color (QColor new_color)
+void
+color_picker::set_color (QColor new_color)
 {
   m_color = new_color;
   update_button ();
 }
 
 // Draw the button with the actual color (using a stylesheet)
-void color_picker::update_button ()
+void
+color_picker::update_button ()
 {
   // Is this the right place to look for a "foreground" color that would
   // provide a reasonable border for the color swatches?
--- a/libgui/src/command-widget.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/command-widget.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -100,7 +100,8 @@
 
 }
 
-void command_widget::init_command_prompt ()
+void
+command_widget::init_command_prompt ()
 {
   // The interpreter_event callback function below emits a signal.
   // Because we don't control when that happens, use a guarded pointer
@@ -109,7 +110,7 @@
   QPointer<command_widget> this_cw (this);
 
   emit interpreter_event
-    ([=] (interpreter& interp)
+    ([this, this_cw] (interpreter& interp)
      {
        // INTERPRETER THREAD
 
@@ -129,22 +130,26 @@
      });
 }
 
-void command_widget::update_prompt (const QString& prompt)
+void
+command_widget::update_prompt (const QString& prompt)
 {
   m_prompt = prompt;
 }
 
-QString command_widget::prompt ()
+QString
+command_widget::prompt ()
 {
   return m_prompt;
 }
 
-void command_widget::insert_interpreter_output (const QString& msg)
+void
+command_widget::insert_interpreter_output (const QString& msg)
 {
   m_console->append (msg);
 }
 
-void command_widget::process_input_line (const QString& input_line)
+void
+command_widget::process_input_line (const QString& input_line)
 {
   // The interpreter_event callback function below emits a signal.
   // Because we don't control when that happens, use a guarded pointer
@@ -153,7 +158,7 @@
   QPointer<command_widget> this_cw (this);
 
   emit interpreter_event
-    ([=] (interpreter& interp)
+    ([this, this_cw, input_line] (interpreter& interp)
      {
        // INTERPRETER THREAD
 
@@ -180,7 +185,8 @@
 
 }
 
-void command_widget::notice_settings ()
+void
+command_widget::notice_settings ()
 {
   gui_settings settings;
 
@@ -201,7 +207,7 @@
   QColor bgc = settings.color_value (cs_colors[1], mode);
 
   m_console->setStyleSheet (QString ("color: %1; background-color:%2;")
-                                   .arg (fgc.name ()).arg (bgc.name ()));
+                            .arg (fgc.name ()).arg (bgc.name ()));
 }
 
 // The console itself using QScintilla.
@@ -231,7 +237,8 @@
 }
 
 // Prepare a new command line with the current prompt
-void console::new_command_line (const QString& command)
+void
+console::new_command_line (const QString& command)
 {
   if (! text (lines () -1).isEmpty ())
     append ("\n");
@@ -239,14 +246,15 @@
   append_string (m_command_widget->prompt ());
 
   int line, index;
-  getCursorPosition (&line,&index);
+  getCursorPosition (&line, &index);
   m_command_position = positionFromLineIndex (line, index);
 
   append_string (command);
 }
 
 // Accept the current command line (or block)
-void console::accept_command_line ()
+void
+console::accept_command_line ()
 {
   QString input_line = text (lines () - 1);
 
@@ -264,7 +272,8 @@
 }
 
 // Execute a command
-void console::execute_command (const QString& command)
+void
+console::execute_command (const QString& command)
 {
   if (command.trimmed ().isEmpty ())
     return;
@@ -274,7 +283,8 @@
 }
 
 // Append a string and update the curdor püosition
-void console::append_string (const QString& string)
+void
+console::append_string (const QString& string)
 {
   setReadOnly (false);
   append (string);
@@ -286,7 +296,8 @@
 }
 
 // Cursor position changed: Are we in the command line or not?
-void console::cursor_position_changed (int line, int col)
+void
+console::cursor_position_changed (int line, int col)
 {
   m_cursor_position = positionFromLineIndex (line, col);
   if (m_cursor_position < m_command_position)
@@ -308,7 +319,8 @@
 
 // User attempted to type on read only mode: move cursor at end and allow
 // editing
-void console::move_cursor_to_end ()
+void
+console::move_cursor_to_end ()
 {
   if ((! m_last_key_string.isEmpty ()) && (m_last_key_string.at (0).isPrint ()))
     {
@@ -319,13 +331,15 @@
 
 // Text has changed: is cursor still in "writable" area?
 // This signal seems to be emitted before cursor position changed.
-void console::text_changed ()
+void
+console::text_changed ()
 {
   m_text_changed = true;
 }
 
 // Re-implement key event
-void console::keyPressEvent (QKeyEvent *e)
+void
+console::keyPressEvent (QKeyEvent *e)
 {
   if (e->key () == Qt::Key_Return)
     // On "return", accept the current command line
--- a/libgui/src/community-news.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/community-news.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -53,8 +53,9 @@
   construct (base_url, page, serial);
 }
 
-void community_news::construct (const QString& base_url, const QString& page,
-                                int serial)
+void
+community_news::construct (const QString& base_url, const QString& page,
+                           int serial)
 {
   m_browser = new QTextBrowser (this);
 
@@ -114,12 +115,14 @@
   worker_thread->start ();
 }
 
-void community_news::set_news (const QString& news)
+void
+community_news::set_news (const QString& news)
 {
   m_browser->setHtml (news);
 }
 
-void community_news::display ()
+void
+community_news::display ()
 {
   if (! isVisible ())
     show ();
--- a/libgui/src/dialog.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/dialog.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -65,19 +65,21 @@
            this, &QUIWidgetCreator::handle_create_filedialog);
 }
 
-QString QUIWidgetCreator::rm_amp (const QString& text)
+QString
+QUIWidgetCreator::rm_amp (const QString& text)
 {
   QString text_wo_amp = text;
   text_wo_amp.replace (QRegularExpression {"&(\\w)"}, "\\1");
   return text_wo_amp;
 }
 
-QString QUIWidgetCreator::message_dialog (const QString& message,
-                                          const QString& title,
-                                          const QString& icon,
-                                          const QStringList& buttons,
-                                          const QString& defbutton,
-                                          const QStringList& role)
+QString
+QUIWidgetCreator::message_dialog (const QString& message,
+                                  const QString& title,
+                                  const QString& icon,
+                                  const QStringList& buttons,
+                                  const QString& defbutton,
+                                  const QStringList& role)
 {
   QMutexLocker autolock (&m_mutex);
 
@@ -130,11 +132,12 @@
 // Create a message dialog with specified string, buttons and
 // decorative text.
 
-QStringList QUIWidgetCreator::input_dialog (const QStringList& prompt,
-                                            const QString& title,
-                                            const QFloatList& nr,
-                                            const QFloatList& nc,
-                                            const QStringList& defaults)
+QStringList
+QUIWidgetCreator::input_dialog (const QStringList& prompt,
+                                const QString& title,
+                                const QFloatList& nr,
+                                const QFloatList& nc,
+                                const QStringList& defaults)
 {
   if (prompt.isEmpty ())
     return QStringList ();
@@ -150,11 +153,12 @@
   return m_string_list;
 };
 
-QStringList QUIWidgetCreator::file_dialog (const QStringList& filters,
-                                           const QString& title,
-                                           const QString& filename,
-                                           const QString& dirname,
-                                           const QString& multimode)
+QStringList
+QUIWidgetCreator::file_dialog (const QStringList& filters,
+                               const QString& title,
+                               const QString& filename,
+                               const QString& dirname,
+                               const QString& multimode)
 {
   QMutexLocker autolock (&m_mutex);
 
@@ -173,12 +177,13 @@
   return retval;
 }
 
-void QUIWidgetCreator::handle_create_dialog (const QString& message,
-                                             const QString& title,
-                                             const QString& icon,
-                                             const QStringList& button,
-                                             const QString& defbutton,
-                                             const QStringList& role)
+void
+QUIWidgetCreator::handle_create_dialog (const QString& message,
+                                        const QString& title,
+                                        const QString& icon,
+                                        const QStringList& button,
+                                        const QString& defbutton,
+                                        const QStringList& role)
 {
   MessageDialog *message_dialog
     = new MessageDialog (message, title, icon, button, defbutton, role);
@@ -190,7 +195,8 @@
   message_dialog->show ();
 }
 
-void QUIWidgetCreator::dialog_button_clicked (QAbstractButton *button)
+void
+QUIWidgetCreator::dialog_button_clicked (QAbstractButton *button)
 {
   // button is NULL when dialog is closed.
   if (button)
@@ -222,14 +228,15 @@
 // Create a list dialog with specified list, initially selected, mode,
 // view size and decorative text.
 
-void QUIWidgetCreator::handle_create_listview (const QStringList& list,
-                                               const QString& mode,
-                                               int wd, int ht,
-                                               const QIntList& initial,
-                                               const QString& name,
-                                               const QStringList& prompt,
-                                               const QString& ok_string,
-                                               const QString& cancel_string)
+void
+QUIWidgetCreator::handle_create_listview (const QStringList& list,
+    const QString& mode,
+    int wd, int ht,
+    const QIntList& initial,
+    const QString& name,
+    const QStringList& prompt,
+    const QString& ok_string,
+    const QString& cancel_string)
 {
   ListDialog *list_dialog
     = new ListDialog (list, mode, wd, ht, initial,
@@ -242,8 +249,9 @@
   list_dialog->show ();
 }
 
-void QUIWidgetCreator::list_select_finished (const QIntList& selected,
-                                             int button_pressed)
+void
+QUIWidgetCreator::list_select_finished (const QIntList& selected,
+                                        int button_pressed)
 {
   // Store the value so that builtin functions can retrieve.
 
@@ -257,11 +265,12 @@
 // Create an input dialog with specified prompts and defaults, title
 // and row/column size specifications.
 
-void QUIWidgetCreator::handle_create_inputlayout (const QStringList& prompt,
-                                                  const QString& title,
-                                                  const QFloatList& nr,
-                                                  const QFloatList& nc,
-                                                  const QStringList& defaults)
+void
+QUIWidgetCreator::handle_create_inputlayout (const QStringList& prompt,
+    const QString& title,
+    const QFloatList& nr,
+    const QFloatList& nc,
+    const QStringList& defaults)
 {
   InputDialog *input_dialog
     = new InputDialog (prompt, title, nr, nc, defaults);
@@ -273,8 +282,9 @@
   input_dialog->show ();
 }
 
-void QUIWidgetCreator::input_finished (const QStringList& input,
-                                       int button_pressed)
+void
+QUIWidgetCreator::input_finished (const QStringList& input,
+                                  int button_pressed)
 {
   // Store the value so that builtin functions can retrieve.
 
@@ -285,11 +295,12 @@
   wake_all ();
 }
 
-void QUIWidgetCreator::handle_create_filedialog (const QStringList& filters,
-                                                 const QString& title,
-                                                 const QString& filename,
-                                                 const QString& dirname,
-                                                 const QString& multimode)
+void
+QUIWidgetCreator::handle_create_filedialog (const QStringList& filters,
+    const QString& title,
+    const QString& filename,
+    const QString& dirname,
+    const QString& multimode)
 {
   FileDialog *file_dialog
     = new FileDialog (filters, title, filename, dirname, multimode);
@@ -301,9 +312,10 @@
   file_dialog->show ();
 }
 
-void QUIWidgetCreator::filedialog_finished (const QStringList& files,
-                                            const QString& path,
-                                            int filterindex)
+void
+QUIWidgetCreator::filedialog_finished (const QStringList& files,
+                                       const QString& path,
+                                       int filterindex)
 {
   // Store the value so that builtin functions can retrieve.
 
@@ -475,7 +487,8 @@
            this, &ListDialog::item_double_clicked);
 }
 
-void ListDialog::buttonOk_clicked ()
+void
+ListDialog::buttonOk_clicked ()
 {
   // Store information about what button was pressed so that builtin
   // functions can retrieve.
@@ -491,7 +504,8 @@
   done (QDialog::Accepted);
 }
 
-void ListDialog::buttonCancel_clicked ()
+void
+ListDialog::buttonCancel_clicked ()
 {
   // Store information about what button was pressed so that builtin
   // functions can retrieve.
@@ -503,12 +517,14 @@
   done (QDialog::Rejected);
 }
 
-void ListDialog::reject ()
+void
+ListDialog::reject ()
 {
   buttonCancel_clicked ();
 }
 
-void ListDialog::item_double_clicked (const QModelIndex&)
+void
+ListDialog::item_double_clicked (const QModelIndex&)
 {
   buttonOk_clicked ();
 }
@@ -580,7 +596,8 @@
            this, &InputDialog::buttonCancel_clicked);
 }
 
-void InputDialog::buttonOk_clicked ()
+void
+InputDialog::buttonOk_clicked ()
 {
   // Store information about what button was pressed so that builtin
   // functions can retrieve.
@@ -592,7 +609,8 @@
   done (QDialog::Accepted);
 }
 
-void InputDialog::buttonCancel_clicked ()
+void
+InputDialog::buttonCancel_clicked ()
 {
   // Store information about what button was pressed so that builtin
   // functions can retrieve.
@@ -602,7 +620,8 @@
   done (QDialog::Rejected);
 }
 
-void InputDialog::reject ()
+void
+InputDialog::reject ()
 {
   buttonCancel_clicked ();
 }
@@ -658,13 +677,15 @@
   connect (this, &FileDialog::rejected, this, &FileDialog::rejectSelection);
 }
 
-void FileDialog::rejectSelection ()
+void
+FileDialog::rejectSelection ()
 {
   QStringList empty;
   emit finish_input (empty, "", 0);
 }
 
-void FileDialog::acceptSelection ()
+void
+FileDialog::acceptSelection ()
 {
   QStringList string_result;
   QString path;
--- a/libgui/src/documentation-bookmarks.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/documentation-bookmarks.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -82,9 +82,9 @@
 
   // Define the icons for the tree view
   m_icon_folder.addPixmap (style ()->standardPixmap(QStyle::SP_DirClosedIcon),
-                         QIcon::Normal, QIcon::Off);
+                           QIcon::Normal, QIcon::Off);
   m_icon_folder.addPixmap (style ()->standardPixmap(QStyle::SP_DirOpenIcon),
-                         QIcon::Normal, QIcon::On);
+                           QIcon::Normal, QIcon::On);
   m_icon_bookmark.addPixmap (style ()->standardPixmap(QStyle::SP_FileIcon));
 
   // Setup and read the bookmarkfile
@@ -154,7 +154,8 @@
 }
 
 // Slot for adding the current page as a bookmark
-void documentation_bookmarks::add_bookmark ()
+void
+documentation_bookmarks::add_bookmark ()
 {
   QUrl url = m_browser->historyUrl (0);
 
@@ -179,17 +180,18 @@
 }
 
 // Function for actually adding a bookmark to the tree
-void documentation_bookmarks::add_bookmark (const QString& title,
-                                            const QString& url,
-                                            QTreeWidgetItem* item)
+void
+documentation_bookmarks::add_bookmark (const QString& title,
+                                       const QString& url,
+                                       QTreeWidgetItem *item)
 {
   // Create new bookmark
   QTreeWidgetItem *new_item = new QTreeWidgetItem (QStringList (title));
   new_item->setData (0, tag_role, QVariant (bookmark_tag));
   new_item->setData (0, url_role, QVariant (url));
   new_item->setFlags ((new_item->flags () & (~Qt::ItemIsDropEnabled))
-                                          | Qt::ItemIsEditable
-                                          | Qt::ItemIsDragEnabled);
+                      | Qt::ItemIsEditable
+                      | Qt::ItemIsDragEnabled);
   new_item->setIcon (0, m_icon_bookmark);
 
   // Insert as top level or child item
@@ -202,7 +204,8 @@
 }
 
 // Slot for adding a folder from the context menu
-void documentation_bookmarks::add_folder (bool)
+void
+documentation_bookmarks::add_folder (bool)
 {
   QTreeWidgetItem *parent_item = nullptr;
 
@@ -225,14 +228,15 @@
 }
 
 // Function for actually adding a folder to the tree
-QTreeWidgetItem* documentation_bookmarks::add_folder (const QString& folder,
-                                          QTreeWidgetItem *item, bool expanded)
+QTreeWidgetItem *
+documentation_bookmarks::add_folder (const QString& folder,
+                                     QTreeWidgetItem *item, bool expanded)
 {
   QTreeWidgetItem *new_folder = new QTreeWidgetItem (QStringList (folder));
   new_folder->setData (0, tag_role, QVariant (folder_tag));
   new_folder->setFlags (new_folder->flags() | Qt::ItemIsEditable
-                                            | Qt::ItemIsDragEnabled
-                                            | Qt::ItemIsDropEnabled);
+                        | Qt::ItemIsDragEnabled
+                        | Qt::ItemIsDropEnabled);
   new_folder->setChildIndicatorPolicy (QTreeWidgetItem::DontShowIndicatorWhenChildless);
   new_folder->setIcon (0, m_icon_folder);
   new_folder->setExpanded (expanded);
@@ -246,7 +250,8 @@
   return new_folder;
 }
 
-void documentation_bookmarks::filter_bookmarks (const QString& pattern)
+void
+documentation_bookmarks::filter_bookmarks (const QString& pattern)
 {
   QTreeWidgetItemIterator it (m_tree);
 
@@ -271,7 +276,8 @@
     }
 }
 
-void documentation_bookmarks::filter_activate (bool state)
+void
+documentation_bookmarks::filter_activate (bool state)
 {
   m_filter->setEnabled (state);
 
@@ -282,7 +288,8 @@
   filter_bookmarks (pattern);
 }
 
-void documentation_bookmarks::update_filter_history ()
+void
+documentation_bookmarks::update_filter_history ()
 {
   QString text = m_filter->currentText ();   // get current text
   int index = m_filter->findText (text);     // and its actual index
@@ -294,7 +301,8 @@
   m_filter->setCurrentIndex (0);
 }
 
-void documentation_bookmarks::handle_double_click (QTreeWidgetItem *item, int)
+void
+documentation_bookmarks::handle_double_click (QTreeWidgetItem *item, int)
 {
   int tag = item->data (0, tag_role).toInt ();
 
@@ -313,7 +321,8 @@
     }
 }
 
-void documentation_bookmarks::ctx_menu (const QPoint& xpos)
+void
+documentation_bookmarks::ctx_menu (const QPoint& xpos)
 {
   QMenu menu (this);
 
@@ -345,7 +354,8 @@
   menu.exec (m_tree->mapToGlobal (xpos));
 }
 
-void documentation_bookmarks::open (bool)
+void
+documentation_bookmarks::open (bool)
 {
   QList<QTreeWidgetItem *> items = m_tree->selectedItems ();
 
@@ -353,7 +363,8 @@
     handle_double_click (items.at (0));
 }
 
-void documentation_bookmarks::edit (bool)
+void
+documentation_bookmarks::edit (bool)
 {
   QList<QTreeWidgetItem *> items = m_tree->selectedItems ();
 
@@ -361,7 +372,8 @@
     m_tree->editItem (items.at (0));
 }
 
-void documentation_bookmarks::remove (bool)
+void
+documentation_bookmarks::remove (bool)
 {
   QList<QTreeWidgetItem *> items = m_tree->selectedItems ();
 
@@ -370,13 +382,15 @@
       m_tree->takeTopLevelItem (m_tree->indexOfTopLevelItem (it));
 }
 
-void documentation_bookmarks::show_filter (bool)
+void
+documentation_bookmarks::show_filter (bool)
 {
   m_filter_shown = ! m_filter_shown;
   m_filter_widget->setVisible (m_filter_shown);
 }
 
-void documentation_bookmarks::save_settings ()
+void
+documentation_bookmarks::save_settings ()
 {
   // Write the bookmarks to the xbel-file
   write_bookmarks ();
@@ -395,7 +409,8 @@
   settings.sync ();
 }
 
-void documentation_bookmarks::write_bookmarks ()
+void
+documentation_bookmarks::write_bookmarks ()
 {
   if (! m_xbel_file.open (QFile::WriteOnly | QFile::Text))
     {
@@ -424,8 +439,9 @@
   m_xbel_file.close ();
 }
 
-void documentation_bookmarks::write_tree_item (QXmlStreamWriter* xml_writer,
-                                               const QTreeWidgetItem *item)
+void
+documentation_bookmarks::write_tree_item (QXmlStreamWriter *xml_writer,
+    const QTreeWidgetItem *item)
 {
   switch (item->data (0, tag_role).toInt ())
     {
@@ -448,7 +464,8 @@
     }
 }
 
-QString documentation_bookmarks::read_bookmarks ()
+QString
+documentation_bookmarks::read_bookmarks ()
 {
   QString error_message;
 
@@ -497,8 +514,9 @@
   return error_message;
 }
 
-void documentation_bookmarks::read_next_item (QXmlStreamReader *xml_reader,
-                                              item_tag tag, QTreeWidgetItem *item)
+void
+documentation_bookmarks::read_next_item (QXmlStreamReader *xml_reader,
+    item_tag tag, QTreeWidgetItem *item)
 {
   QString title (tr ("Unknown title"));
   if (tag == folder_tag)
--- a/libgui/src/documentation-dock-widget.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/documentation-dock-widget.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -46,33 +46,39 @@
     make_window ();
 }
 
-void documentation_dock_widget::notice_settings ()
+void
+documentation_dock_widget::notice_settings ()
 {
   m_docs->notice_settings ();
 }
 
-void documentation_dock_widget::save_settings ()
+void
+documentation_dock_widget::save_settings ()
 {
   m_docs->save_settings ();
   octave_dock_widget::save_settings ();
 }
 
-void documentation_dock_widget::copyClipboard ()
+void
+documentation_dock_widget::copyClipboard ()
 {
   m_docs->copyClipboard ();
 }
 
-void documentation_dock_widget::pasteClipboard ()
+void
+documentation_dock_widget::pasteClipboard ()
 {
   m_docs->pasteClipboard ();
 }
 
-void documentation_dock_widget::selectAll ()
+void
+documentation_dock_widget::selectAll ()
 {
   m_docs->selectAll ();
 }
 
-void documentation_dock_widget::showDoc (const QString& name)
+void
+documentation_dock_widget::showDoc (const QString& name)
 {
   // show the doc pane without focus for carrying on typing in the console
   if (! isVisible ())
@@ -83,12 +89,14 @@
   m_docs->load_ref (name);
 }
 
-void documentation_dock_widget::registerDoc (const QString& name)
+void
+documentation_dock_widget::registerDoc (const QString& name)
 {
   m_docs->registerDoc (name);
 }
 
-void documentation_dock_widget::unregisterDoc (const QString& name)
+void
+documentation_dock_widget::unregisterDoc (const QString& name)
 {
   m_docs->unregisterDoc (name);
 }
--- a/libgui/src/documentation.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/documentation.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -184,7 +184,7 @@
   QLabel *find_label = new QLabel (tr ("Find:"), find_footer);
   m_find_line_edit = new QLineEdit (find_footer);
   connect (m_find_line_edit, &QLineEdit::returnPressed,
-           this, [=] () { find (); });
+           this, [this] () { find (); });
   connect (m_find_line_edit, &QLineEdit::textEdited,
            this, &documentation::find_forward_from_anchor);
   QToolButton *forward_button = new QToolButton (find_footer);
@@ -195,7 +195,7 @@
 
   forward_button->setIcon (settings.icon ("go-down"));
   connect (forward_button, &QToolButton::pressed,
-           this, [=] () { find (); });
+           this, [this] () { find (); });
   QToolButton *backward_button = new QToolButton (find_footer);
   backward_button->setText (tr ("Search backward"));
   backward_button->setToolTip (tr ("Search backward"));
@@ -220,7 +220,7 @@
 
   m_findnext_shortcut->setContext (Qt::WidgetWithChildrenShortcut);
   connect (m_findnext_shortcut, &QShortcut::activated,
-           this, [=] () { find (); });
+           this, [this] () { find (); });
   m_findprev_shortcut->setContext (Qt::WidgetWithChildrenShortcut);
   connect (m_findprev_shortcut, &QShortcut::activated,
            this, &documentation::find_backward);
@@ -246,8 +246,7 @@
 
       connect (m_help_engine->contentWidget (),
                &QHelpContentWidget::linkActivated,
-               m_doc_browser, [=] (const QUrl& url) {
-                 m_doc_browser->handle_index_clicked (url); });
+               m_doc_browser, [this] (const QUrl& url) { m_doc_browser->handle_index_clicked (url); });
 
       // Index
       QHelpIndexWidget *index = m_help_engine->indexWidget ();
@@ -283,8 +282,7 @@
 #if defined (HAVE_NEW_QHELPINDEXWIDGET_API)
       connect (m_help_engine->indexWidget (),
                &QHelpIndexWidget::documentActivated,
-               this, [=] (const QHelpLink &link) {
-                 m_doc_browser->handle_index_clicked (link.url); });
+               this, [this] (const QHelpLink &link) { m_doc_browser->handle_index_clicked (link.url); });
 #else
       connect (m_help_engine->indexWidget (),
                &QHelpIndexWidget::linkActivated,
@@ -302,7 +300,7 @@
       navi->addTab (m_bookmarks, tr ("Bookmarks"));
 
       connect (m_action_bookmark, &QAction::triggered,
-               m_bookmarks, [=] () { m_bookmarks->add_bookmark (); });
+               m_bookmarks, [this] () { m_bookmarks->add_bookmark (); });
 
       // Search
       QHelpSearchEngine *search_engine = m_help_engine->searchEngine ();
@@ -357,9 +355,10 @@
     }
 }
 
-QAction * documentation::add_action (const QIcon& icon, const QString& text,
-                                     const char *member, QWidget *receiver,
-                                     QToolBar *tool_bar)
+QAction *
+documentation::add_action (const QIcon& icon, const QString& text,
+                           const char *member, QWidget *receiver,
+                           QToolBar *tool_bar)
 {
   QAction *a;
   QWidget *r = this;
@@ -380,7 +379,8 @@
   return a;
 }
 
-void documentation::construct_tool_bar ()
+void
+documentation::construct_tool_bar ()
 {
   // Home, Previous, Next
   gui_settings settings;
@@ -470,7 +470,8 @@
                   tr ("Bookmark current page"), nullptr, nullptr, m_tool_bar);
 }
 
-void documentation::global_search ()
+void
+documentation::global_search ()
 {
   if (! m_help_engine)
     return;
@@ -508,12 +509,14 @@
   m_help_engine->searchEngine ()->search (queries);
 }
 
-void documentation::global_search_started ()
+void
+documentation::global_search_started ()
 {
   qApp->setOverrideCursor(QCursor(Qt::WaitCursor));
 }
 
-void documentation::global_search_finished (int)
+void
+documentation::global_search_finished (int)
 {
   if (! m_help_engine)
     return;
@@ -586,7 +589,8 @@
   qApp->restoreOverrideCursor();
 }
 
-void documentation::handle_search_result_clicked (const QUrl& url)
+void
+documentation::handle_search_result_clicked (const QUrl& url)
 {
   // Open url with matching text
   m_doc_browser->handle_index_clicked (url);
@@ -612,7 +616,8 @@
     }
 }
 
-void documentation::select_all_occurrences (const QString& text)
+void
+documentation::select_all_occurrences (const QString& text)
 {
   // Get highlight background and text color
   QPalette pal = QApplication::palette ();
@@ -640,7 +645,8 @@
   m_doc_browser->moveCursor (QTextCursor::Start);
 }
 
-void documentation::notice_settings ()
+void
+documentation::notice_settings ()
 {
   gui_settings settings;
 
@@ -673,7 +679,8 @@
   m_doc_browser->notice_settings ();
 }
 
-void documentation::save_settings ()
+void
+documentation::save_settings ()
 {
   gui_settings settings;
 
@@ -681,7 +688,8 @@
   m_bookmarks->save_settings ();
 }
 
-void documentation::copyClipboard ()
+void
+documentation::copyClipboard ()
 {
   if (m_doc_browser->hasFocus ())
     {
@@ -689,11 +697,14 @@
     }
 }
 
-void documentation::pasteClipboard () { }
+void
+documentation::pasteClipboard () { }
 
-void documentation::selectAll () { }
+void
+documentation::selectAll () { }
 
-void documentation::load_index ()
+void
+documentation::load_index ()
 {
   m_indexed = true;
 
@@ -707,7 +718,8 @@
   m_help_engine->contentWidget ()->expandToDepth (0);
 }
 
-void documentation::load_ref (const QString& ref_name)
+void
+documentation::load_ref (const QString& ref_name)
 {
   if (! m_help_engine || ref_name.isEmpty ())
     return;
@@ -773,7 +785,8 @@
     }
 }
 
-void documentation::activate_find ()
+void
+documentation::activate_find ()
 {
   if (m_find_line_edit->parentWidget ()->isVisible ())
     {
@@ -788,7 +801,8 @@
     }
 }
 
-void documentation::filter_update (const QString& expression)
+void
+documentation::filter_update (const QString& expression)
 {
   if (! m_help_engine)
     return;
@@ -800,7 +814,8 @@
   m_help_engine->indexWidget ()->filterIndices(expression, wildcard);
 }
 
-void documentation::filter_update_history ()
+void
+documentation::filter_update_history ()
 {
   QString text = m_filter->currentText ();   // get current text
   int index = m_filter->findText (text);     // and its actual index
@@ -812,12 +827,14 @@
   m_filter->setCurrentIndex (0);
 }
 
-void documentation::find_backward ()
+void
+documentation::find_backward ()
 {
   find (true);
 }
 
-void documentation::find (bool backward)
+void
+documentation::find (bool backward)
 {
   if (! m_help_engine)
     return;
@@ -841,7 +858,8 @@
   record_anchor_position ();
 }
 
-void documentation::find_forward_from_anchor (const QString& text)
+void
+documentation::find_forward_from_anchor (const QString& text)
 {
   if (! m_help_engine)
     return;
@@ -860,7 +878,8 @@
     }
 }
 
-void documentation::record_anchor_position ()
+void
+documentation::record_anchor_position ()
 {
   if (! m_help_engine)
     return;
@@ -868,7 +887,8 @@
   m_search_anchor_position = m_doc_browser->textCursor ().position ();
 }
 
-void documentation::handle_cursor_position_change ()
+void
+documentation::handle_cursor_position_change ()
 {
   if (! m_help_engine)
     return;
@@ -877,7 +897,8 @@
     record_anchor_position ();
 }
 
-void documentation::registerDoc (const QString& qch)
+void
+documentation::registerDoc (const QString& qch)
 {
   if (m_help_engine)
     {
@@ -906,7 +927,8 @@
     }
 }
 
-void documentation::unregisterDoc (const QString& qch)
+void
+documentation::unregisterDoc (const QString& qch)
 {
   if (! m_help_engine)
     return;
@@ -921,7 +943,8 @@
     }
 }
 
-void documentation::update_history_menus ()
+void
+documentation::update_history_menus ()
 {
   if (m_prev_pages_count != m_doc_browser->backwardHistoryCount ())
     {
@@ -938,7 +961,8 @@
     }
 }
 
-void documentation::update_history (int new_count, QAction **actions)
+void
+documentation::update_history (int new_count, QAction **actions)
 {
   // Which menu has to be updated?
   int prev_next = -1;
@@ -976,14 +1000,16 @@
     }
 }
 
-void documentation::open_hist_url (QAction *a)
+void
+documentation::open_hist_url (QAction *a)
 {
   m_doc_browser->setSource (a->data ().toUrl ());
 }
 
 // Utility functions
 
-QString documentation::title_and_anchor (const QString& title, const QUrl& url)
+QString
+documentation::title_and_anchor (const QString& title, const QUrl& url)
 {
   QString retval = title;
   QString u = url.toString ();
@@ -1032,12 +1058,13 @@
 {
   setOpenLinks (false);
   connect (this, &documentation_browser::anchorClicked,
-           this, [=] (const QUrl& url) { handle_index_clicked (url); });
+           this, [this] (const QUrl& url) { handle_index_clicked (url); });
 
   // Make sure we have access to one of the monospace fonts listed in
   // octave.css for rendering formated code blocks
   QStringList fonts = {"Fantasque Sans Mono", "FreeMono", "Courier New",
-                       "Cousine", "Courier"};
+                       "Cousine", "Courier"
+                      };
 
   bool load_default_font = true;
 
@@ -1058,7 +1085,8 @@
                                 + sys::file_ops::dir_sep_str ());
 
       QStringList default_fonts = {"FreeMono", "FreeMonoBold",
-                                   "FreeMonoBoldOblique", "FreeMonoOblique"};
+                                   "FreeMonoBoldOblique", "FreeMonoOblique"
+                                  };
 
       for (int i = 0; i < default_fonts.size (); ++i)
         {
@@ -1069,8 +1097,8 @@
     }
 }
 
-void documentation_browser::handle_index_clicked (const QUrl& url,
-                                                  const QString&)
+void
+documentation_browser::handle_index_clicked (const QUrl& url, const QString&)
 {
   if (url.scheme () == "qthelp")
     setSource (QUrl (url));
@@ -1078,7 +1106,8 @@
     QDesktopServices::openUrl (url);
 }
 
-void documentation_browser::notice_settings ()
+void
+documentation_browser::notice_settings ()
 {
   gui_settings settings;
 
@@ -1090,7 +1119,8 @@
     }
 }
 
-QVariant documentation_browser::loadResource (int type, const QUrl& url)
+QVariant
+documentation_browser::loadResource (int type, const QUrl& url)
 {
   if (m_help_engine && url.scheme () == "qthelp")
     return QVariant (m_help_engine->fileData(url));
@@ -1098,7 +1128,8 @@
     return QTextBrowser::loadResource(type, url);
 }
 
-void documentation_browser::save_settings ()
+void
+documentation_browser::save_settings ()
 {
   gui_settings settings;
 
@@ -1107,7 +1138,8 @@
   settings.sync ();
 }
 
-void documentation_browser::zoom_in ()
+void
+documentation_browser::zoom_in ()
 {
   if (m_zoom_level < max_zoom_level)
     {
@@ -1116,7 +1148,8 @@
     }
 }
 
-void documentation_browser::zoom_out ()
+void
+documentation_browser::zoom_out ()
 {
   if (m_zoom_level > min_zoom_level)
     {
@@ -1125,13 +1158,15 @@
     }
 }
 
-void documentation_browser::zoom_original ()
+void
+documentation_browser::zoom_original ()
 {
   zoomIn (- m_zoom_level);
   m_zoom_level = 0;
 }
 
-void documentation_browser::wheelEvent (QWheelEvent *we)
+void
+documentation_browser::wheelEvent (QWheelEvent *we)
 {
   if (we->modifiers () == Qt::ControlModifier)
     {
--- a/libgui/src/dw-main-window.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/dw-main-window.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -79,7 +79,8 @@
 }
 
 // Re-implementing the popup menu of the main window
-QMenu *dw_main_window::createPopupMenu ()
+QMenu *
+dw_main_window::createPopupMenu ()
 {
   QList<QAction *> new_actions = QList<QAction *> ();
   new_actions.append (m_close_action);
@@ -101,9 +102,10 @@
 }
 
 // Adding an action to the main window
-QAction * dw_main_window::add_action (QMenu *menu, const QIcon& icon,
-                                      const QString& text, const char *member,
-                                      QWidget *receiver)
+QAction *
+dw_main_window::add_action (QMenu *menu, const QIcon& icon,
+                            const QString& text, const char *member,
+                            QWidget *receiver)
 {
   QAction *a;
   QWidget *r = this;
@@ -127,7 +129,8 @@
 }
 
 // Update the settings
-void dw_main_window::notice_settings ()
+void
+dw_main_window::notice_settings ()
 {
   gui_settings settings;
 
@@ -142,7 +145,8 @@
 // Slots for handling actions
 
 // Close current widget
-void dw_main_window::request_close ()
+void
+dw_main_window::request_close ()
 {
   for (int i = 0; i < m_dw_list.length (); i++)
     {
@@ -157,7 +161,8 @@
 }
 
 // Close other widgets
-void dw_main_window::request_close_other ()
+void
+dw_main_window::request_close_other ()
 {
   for (int i = m_dw_list.length () - 1; i >= 0; i--)
     {
@@ -167,26 +172,30 @@
 }
 
 // Close all widgets
-void dw_main_window::request_close_all ()
+void
+dw_main_window::request_close_all ()
 {
   for (int i = m_dw_list.length () - 1; i >= 0; i--)
     m_dw_list.at (i)->close ();
 }
 
 // Switch to left widget
-void dw_main_window::request_switch_left ()
+void
+dw_main_window::request_switch_left ()
 {
   request_switch (-1);
 }
 
 // Switch to right widget
-void dw_main_window::request_switch_right ()
+void
+dw_main_window::request_switch_right ()
 {
   request_switch (1);
 }
 
 // Switch to left/right widget
-void dw_main_window::request_switch (int direction)
+void
+dw_main_window::request_switch (int direction)
 {
   int active = -1, next;
 
@@ -215,7 +224,8 @@
 }
 
 // Reimplemented Event
-bool dw_main_window::event (QEvent *ev)
+bool
+dw_main_window::event (QEvent *ev)
 {
   if (ev->type () == QEvent::ChildAdded
       || ev->type () == QEvent::ChildRemoved)
--- a/libgui/src/external-editor-interface.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/external-editor-interface.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -80,26 +80,30 @@
 
 // Slots for the several signals for invoking the editor
 
-void external_editor_interface::request_new_file (const QString&)
+void
+external_editor_interface::request_new_file (const QString&)
 {
   call_custom_editor ();
 }
 
-void external_editor_interface::request_open_file (const QString& file_name,
-                                                   const QString&, int line,
-                                                   bool, bool, bool,
-                                                   const QString&)
+void
+external_editor_interface::request_open_file (const QString& file_name,
+                                              const QString&, int line,
+                                              bool, bool, bool,
+                                              const QString&)
 {
   call_custom_editor (file_name, line);
 }
 
-void external_editor_interface::handle_edit_file_request (const QString& file)
+void
+external_editor_interface::handle_edit_file_request (const QString& file)
 {
   call_custom_editor (file);
 }
 
 // Get and verify the settings of the external editor program
-QString external_editor_interface::external_editor ()
+QString
+external_editor_interface::external_editor ()
 {
   gui_settings settings;
 
--- a/libgui/src/files-dock-widget.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/files-dock-widget.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -104,7 +104,7 @@
 
     auto parent_dir = QDir(filePath (parent (idx)));
 
-    files_dock_widget *fdw = static_cast<files_dock_widget*>(parent());
+    files_dock_widget *fdw = static_cast<files_dock_widget *>(parent());
 
     fdw->file_remove_signal(parent_dir.filePath(old_name), parent_dir.filePath(new_name));
 
@@ -144,7 +144,7 @@
 {
 public:
   RenameItemDelegate (QObject *parent = nullptr)
-      : QStyledItemDelegate{ parent }
+    : QStyledItemDelegate{ parent }
   {
   }
 
@@ -171,9 +171,7 @@
     // actually restrict the selection, we have to post the modification at
     // the end of the event loop.
     // QTimer allows this easily with 0 as timeout.
-    QTimer::singleShot (0, [=] () {
-      line_edit->setSelection (0, select_len);
-    });
+    QTimer::singleShot (0, [line_edit, select_len] () { line_edit->setSelection (0, select_len); });
   }
 };
 
@@ -415,7 +413,8 @@
     make_window ();
 }
 
-void files_dock_widget::save_settings ()
+void
+files_dock_widget::save_settings ()
 {
   gui_settings settings;
 
@@ -441,24 +440,28 @@
     delete m_sig_mapper;
 }
 
-void files_dock_widget::item_double_clicked (const QModelIndex& index)
+void
+files_dock_widget::item_double_clicked (const QModelIndex& index)
 {
   // Retrieve the file info associated with the model index.
   QFileInfo fileInfo = m_file_system_model->fileInfo (index);
   set_current_directory (fileInfo.absoluteFilePath ());
 }
 
-void files_dock_widget::set_current_directory (const QString& dir)
+void
+files_dock_widget::set_current_directory (const QString& dir)
 {
   display_directory (dir);
 }
 
-void files_dock_widget::accept_directory_line_edit ()
+void
+files_dock_widget::accept_directory_line_edit ()
 {
   display_directory (m_current_directory->currentText ());
 }
 
-void files_dock_widget::change_directory_up ()
+void
+files_dock_widget::change_directory_up ()
 {
   QDir dir
     = QDir (m_file_system_model->filePath (m_file_tree_view->rootIndex ()));
@@ -467,7 +470,8 @@
   display_directory (dir.absolutePath ());
 }
 
-void files_dock_widget::do_sync_octave_directory ()
+void
+files_dock_widget::do_sync_octave_directory ()
 {
   QDir dir
     = QDir (m_file_system_model->filePath (m_file_tree_view->rootIndex ()));
@@ -475,20 +479,23 @@
   emit displayed_directory_changed (dir.absolutePath ());
 }
 
-void files_dock_widget::do_sync_browser_directory ()
+void
+files_dock_widget::do_sync_browser_directory ()
 {
   display_directory (m_octave_dir, false); // false: no sync of octave dir
 }
 
-void files_dock_widget::update_octave_directory (const QString& dir)
+void
+files_dock_widget::update_octave_directory (const QString& dir)
 {
   m_octave_dir = dir;
   if (m_sync_octave_dir)
     display_directory (m_octave_dir, false); // false: no sync of octave dir
 }
 
-void files_dock_widget::display_directory (const QString& dir,
-                                           bool set_octave_dir)
+void
+files_dock_widget::display_directory (const QString& dir,
+                                      bool set_octave_dir)
 {
   QFileInfo fileInfo (dir);
   if (fileInfo.exists ())
@@ -537,7 +544,8 @@
     }
 }
 
-void files_dock_widget::open_item_in_app (const QModelIndex& index)
+void
+files_dock_widget::open_item_in_app (const QModelIndex& index)
 {
   // Retrieve the file info associated with the model index.
   QFileInfo fileInfo = m_file_system_model->fileInfo (index);
@@ -547,7 +555,8 @@
   QDesktopServices::openUrl (QUrl::fromLocalFile (file));
 }
 
-void files_dock_widget::toggle_header (int col)
+void
+files_dock_widget::toggle_header (int col)
 {
   gui_settings settings;
 
@@ -572,7 +581,8 @@
     }
 }
 
-void files_dock_widget::headercontextmenu_requested (const QPoint& mpos)
+void
+files_dock_widget::headercontextmenu_requested (const QPoint& mpos)
 {
   QMenu menu (this);
 
@@ -604,7 +614,8 @@
   menu.exec (m_file_tree_view->mapToGlobal (mpos));
 }
 
-void files_dock_widget::contextmenu_requested (const QPoint& mpos)
+void
+files_dock_widget::contextmenu_requested (const QPoint& mpos)
 {
 
   QMenu menu (this);
@@ -664,7 +675,7 @@
           QMenu *add_path_menu = menu.addMenu (tr ("Add to Path"));
 
           add_path_menu->addAction (tr ("Selected Directories"),
-                                    this, [=] (bool checked) { contextmenu_add_to_path (checked); });
+                                    this, [this] (bool checked) { contextmenu_add_to_path (checked); });
           add_path_menu->addAction (tr ("Selected Directories and Subdirectories"),
                                     this, &files_dock_widget::contextmenu_add_to_path_subdirs);
 
@@ -701,7 +712,8 @@
     }
 }
 
-void files_dock_widget::contextmenu_open (bool)
+void
+files_dock_widget::contextmenu_open (bool)
 {
 
   QItemSelectionModel *m = m_file_tree_view->selectionModel ();
@@ -715,7 +727,8 @@
     }
 }
 
-void files_dock_widget::contextmenu_open_in_editor (bool)
+void
+files_dock_widget::contextmenu_open_in_editor (bool)
 {
 
   QItemSelectionModel *m = m_file_tree_view->selectionModel ();
@@ -729,7 +742,8 @@
     }
 }
 
-void files_dock_widget::contextmenu_open_in_app (bool)
+void
+files_dock_widget::contextmenu_open_in_app (bool)
 {
   QItemSelectionModel *m = m_file_tree_view->selectionModel ();
   QModelIndexList rows = m->selectedRows ();
@@ -738,7 +752,8 @@
     open_item_in_app (it);
 }
 
-void files_dock_widget::contextmenu_copy_selection (bool)
+void
+files_dock_widget::contextmenu_copy_selection (bool)
 {
   QItemSelectionModel *m = m_file_tree_view->selectionModel ();
   QModelIndexList rows = m->selectedRows ();
@@ -756,7 +771,8 @@
   clipboard->setText (selection.join ("\n"));
 }
 
-void files_dock_widget::contextmenu_load (bool)
+void
+files_dock_widget::contextmenu_load (bool)
 {
   QItemSelectionModel *m = m_file_tree_view->selectionModel ();
   QModelIndexList rows = m->selectedRows ();
@@ -771,7 +787,8 @@
     }
 }
 
-void files_dock_widget::contextmenu_run (bool)
+void
+files_dock_widget::contextmenu_run (bool)
 {
   QItemSelectionModel *m = m_file_tree_view->selectionModel ();
   QModelIndexList rows = m->selectedRows ();
@@ -785,7 +802,8 @@
     }
 }
 
-void files_dock_widget::contextmenu_rename (bool)
+void
+files_dock_widget::contextmenu_rename (bool)
 {
   QItemSelectionModel *m = m_file_tree_view->selectionModel ();
   QModelIndexList rows = m->selectedRows ();
@@ -796,7 +814,8 @@
     }
 }
 
-void files_dock_widget::contextmenu_delete (bool)
+void
+files_dock_widget::contextmenu_delete (bool)
 {
   QItemSelectionModel *m = m_file_tree_view->selectionModel ();
   QModelIndexList rows = m->selectedRows ();
@@ -826,10 +845,10 @@
       else
         {
           dlg_answer = QMessageBox::question (this,
-                         tr ("Delete file/directory"),
-                         tr ("Are you sure you want to delete\n")
-                         + info.filePath (),
-                         QMessageBox::Yes | QMessageBox::No);
+                                              tr ("Delete file/directory"),
+                                              tr ("Are you sure you want to delete\n")
+                                              + info.filePath (),
+                                              QMessageBox::Yes | QMessageBox::No);
         }
 
       if (dlg_answer == QMessageBox::Yes)
@@ -872,7 +891,8 @@
 
 // Get the currently selected files/dirs and return their file info
 // in a list.
-QList<QFileInfo> files_dock_widget::get_selected_items_info (bool dir)
+QList<QFileInfo>
+files_dock_widget::get_selected_items_info (bool dir)
 {
   QItemSelectionModel *m = m_file_tree_view->selectionModel ();
   QModelIndexList rows = m->selectedRows ();
@@ -891,7 +911,8 @@
   return infos;
 }
 
-void files_dock_widget::contextmenu_newfile (bool)
+void
+files_dock_widget::contextmenu_newfile (bool)
 {
   QItemSelectionModel *m = m_file_tree_view->selectionModel ();
   QModelIndexList rows = m->selectedRows ();
@@ -907,7 +928,8 @@
     }
 }
 
-void files_dock_widget::contextmenu_newdir (bool)
+void
+files_dock_widget::contextmenu_newdir (bool)
 {
   QItemSelectionModel *m = m_file_tree_view->selectionModel ();
   QModelIndexList rows = m->selectedRows ();
@@ -923,7 +945,8 @@
     }
 }
 
-void files_dock_widget::contextmenu_setcurrentdir (bool)
+void
+files_dock_widget::contextmenu_setcurrentdir (bool)
 {
   QList<QFileInfo> infos = get_selected_items_info (true);
 
@@ -931,7 +954,8 @@
     process_set_current_dir (infos.first ().absoluteFilePath ());
 }
 
-void files_dock_widget::contextmenu_add_to_path (bool, bool rm, bool subdirs)
+void
+files_dock_widget::contextmenu_add_to_path (bool, bool rm, bool subdirs)
 {
   QList<QFileInfo> infos = get_selected_items_info (true);
 
@@ -944,22 +968,26 @@
     emit modify_path_signal (dir_list, rm, subdirs);
 }
 
-void files_dock_widget::contextmenu_add_to_path_subdirs (bool)
+void
+files_dock_widget::contextmenu_add_to_path_subdirs (bool)
 {
   contextmenu_add_to_path (true, false, true);
 }
 
-void files_dock_widget::contextmenu_rm_from_path (bool)
+void
+files_dock_widget::contextmenu_rm_from_path (bool)
 {
   contextmenu_add_to_path (true, true, false);
 }
 
-void files_dock_widget::contextmenu_rm_from_path_subdirs (bool)
+void
+files_dock_widget::contextmenu_rm_from_path_subdirs (bool)
 {
   contextmenu_add_to_path (true, true, true);
 }
 
-void files_dock_widget::contextmenu_findfiles (bool)
+void
+files_dock_widget::contextmenu_findfiles (bool)
 {
   QItemSelectionModel *m = m_file_tree_view->selectionModel ();
   QModelIndexList rows = m->selectedRows ();
@@ -977,7 +1005,8 @@
     }
 }
 
-void files_dock_widget::notice_settings ()
+void
+files_dock_widget::notice_settings ()
 {
   gui_settings settings;
 
@@ -993,7 +1022,7 @@
   // filenames are always shown, other columns can be hidden by settings
   for (int i = 0; i < 3; i++)
     m_file_tree_view->setColumnHidden (i + 1,
-                                       ! settings.value (m_columns_shown_keys.at (i),false).toBool ());
+                                       ! settings.value (m_columns_shown_keys.at (i), false).toBool ());
 
   QDir::Filters current_filter = m_file_system_model->filter ();
   if (settings.value (m_columns_shown_keys.at (3), false).toBool ())
@@ -1002,7 +1031,7 @@
     m_file_system_model->setFilter (current_filter & (~QDir::Hidden));
 
   m_file_tree_view->setAlternatingRowColors
-    (settings.value (m_columns_shown_keys.at (4),true).toBool ());
+    (settings.value (m_columns_shown_keys.at (4), true).toBool ());
   m_file_tree_view->setModel (m_file_system_model);
 
   // enable the buttons to sync octave/browser dir
@@ -1022,7 +1051,8 @@
     do_sync_browser_directory ();
 }
 
-void files_dock_widget::popdownmenu_home (bool)
+void
+files_dock_widget::popdownmenu_home (bool)
 {
   QString dir = QString::fromStdString (sys::env::get_home_directory ());
 
@@ -1032,7 +1062,8 @@
   set_current_directory (dir);
 }
 
-void files_dock_widget::popdownmenu_search_dir (bool)
+void
+files_dock_widget::popdownmenu_search_dir (bool)
 {
   // FIXME: Remove, if for all common KDE versions (bug #54607) is resolved.
   int opts = QFileDialog::ShowDirsOnly;
@@ -1043,28 +1074,32 @@
     opts |= QFileDialog::DontUseNativeDialog;
 
   QString dir = QFileDialog::getExistingDirectory (this,
-                   tr ("Set directory of file browser"),
-                   m_file_system_model->rootPath (),
-                   QFileDialog::Option (opts));
+                  tr ("Set directory of file browser"),
+                  m_file_system_model->rootPath (),
+                  QFileDialog::Option (opts));
   set_current_directory (dir);
 }
 
-void files_dock_widget::popdownmenu_findfiles (bool)
+void
+files_dock_widget::popdownmenu_findfiles (bool)
 {
   process_find_files (m_file_system_model->rootPath ());
 }
 
-void files_dock_widget::popdownmenu_newdir (bool)
+void
+files_dock_widget::popdownmenu_newdir (bool)
 {
   process_new_dir (m_file_system_model->rootPath ());
 }
 
-void files_dock_widget::popdownmenu_newfile (bool)
+void
+files_dock_widget::popdownmenu_newfile (bool)
 {
   process_new_file (m_file_system_model->rootPath ());
 }
 
-void files_dock_widget::process_new_file (const QString& parent_dir)
+void
+files_dock_widget::process_new_file (const QString& parent_dir)
 {
   bool ok;
 
@@ -1082,7 +1117,8 @@
     }
 }
 
-void files_dock_widget::process_new_dir (const QString& parent_dir)
+void
+files_dock_widget::process_new_dir (const QString& parent_dir)
 {
   bool ok;
 
@@ -1098,17 +1134,20 @@
     }
 }
 
-void files_dock_widget::process_set_current_dir (const QString& dir)
+void
+files_dock_widget::process_set_current_dir (const QString& dir)
 {
   emit displayed_directory_changed (dir);
 }
 
-void files_dock_widget::process_find_files (const QString& dir)
+void
+files_dock_widget::process_find_files (const QString& dir)
 {
   emit find_files_signal (dir);
 }
 
-void files_dock_widget::copyClipboard ()
+void
+files_dock_widget::copyClipboard ()
 {
   if (m_file_tree_view->hasFocus ())
     contextmenu_copy_selection (true);
@@ -1124,7 +1163,8 @@
     }
 }
 
-void files_dock_widget::pasteClipboard ()
+void
+files_dock_widget::pasteClipboard ()
 {
   if (m_current_directory->hasFocus ())
     {
@@ -1136,7 +1176,8 @@
     }
 }
 
-void files_dock_widget::selectAll ()
+void
+files_dock_widget::selectAll ()
 {
   if (m_file_tree_view->hasFocus ())
     m_file_tree_view->selectAll ();
--- a/libgui/src/find-files-dialog.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/find-files-dialog.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -129,8 +129,8 @@
   m_file_list->sortByColumn (settings.int_value (ff_sort_files_by_column),
                              static_cast<Qt::SortOrder>
                              (settings.uint_value (ff_sort_files_by_order)));
-              // FIXME: use value<Qt::SortOrder> instead of static cast after
-              //        dropping support of Qt 5.4
+  // FIXME: use value<Qt::SortOrder> instead of static cast after
+  //        dropping support of Qt 5.4
 
   connect (m_file_list, &QTableView::doubleClicked,
            this, &find_files_dialog::item_double_clicked);
@@ -205,7 +205,8 @@
   delete m_dir_iterator;
 }
 
-void find_files_dialog::save_settings ()
+void
+find_files_dialog::save_settings ()
 {
   gui_settings settings;
 
@@ -231,13 +232,15 @@
   settings.sync ();
 }
 
-void find_files_dialog::set_search_dir (const QString& dir)
+void
+find_files_dialog::set_search_dir (const QString& dir)
 {
   stop_find ();
   m_start_dir_edit->setText (dir);
 }
 
-void find_files_dialog::start_find ()
+void
+find_files_dialog::start_find ()
 {
   stop_find ();
 
@@ -279,7 +282,8 @@
   m_timer->start (0);
 }
 
-void find_files_dialog::stop_find ()
+void
+find_files_dialog::stop_find ()
 {
   m_timer->stop ();
 
@@ -302,7 +306,8 @@
   m_status_bar->showMessage (res_str);
 }
 
-void find_files_dialog::browse_folders ()
+void
+find_files_dialog::browse_folders ()
 {
   int opts = 0;  // No options by default.
 
@@ -322,7 +327,8 @@
     m_start_dir_edit->setText (dir);
 }
 
-void find_files_dialog::item_double_clicked (const QModelIndex& idx)
+void
+find_files_dialog::item_double_clicked (const QModelIndex& idx)
 {
   find_files_model *m = static_cast<find_files_model *> (m_file_list->model ());
 
@@ -343,7 +349,8 @@
     }
 }
 
-void find_files_dialog::look_for_files ()
+void
+find_files_dialog::look_for_files ()
 {
   if (m_dir_iterator && m_dir_iterator->hasNext ())
     {
@@ -361,13 +368,15 @@
     }
 }
 
-void find_files_dialog::handle_done (int)
+void
+find_files_dialog::handle_done (int)
 {
   // make sure we stopped processing
   stop_find ();
 }
 
-bool find_files_dialog::is_match (const QFileInfo& info)
+bool
+find_files_dialog::is_match (const QFileInfo& info)
 {
   bool match = true;
   if (info.isDir ())
--- a/libgui/src/find-files-model.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/find-files-model.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -42,7 +42,8 @@
 
   find_file_less_than (int ord) { m_sortorder = ord; }
 
-  QVariant getValue (const QFileInfo& f) const
+  QVariant
+  getValue (const QFileInfo& f) const
   {
     QVariant val;
 
@@ -65,13 +66,15 @@
     return val;
   }
 
-  bool lessThan (const QVariant& left, const QVariant& right) const
+  bool
+  lessThan (const QVariant& left, const QVariant& right) const
   {
     return
       left.toString ().compare (right.toString (), Qt::CaseInsensitive) < 0;
   }
 
-  bool operator () (const QFileInfo& left, const QFileInfo& right) const
+  bool
+  operator () (const QFileInfo& left, const QFileInfo& right) const
   {
     QVariant leftval = getValue (left);
     QVariant rightval = getValue (right);
@@ -95,7 +98,8 @@
   m_sortorder = 0;
 }
 
-void find_files_model::clear ()
+void
+find_files_model::clear ()
 {
   beginResetModel ();
 
@@ -104,7 +108,8 @@
   endResetModel ();
 }
 
-void find_files_model::addFile (const QFileInfo& info)
+void
+find_files_model::addFile (const QFileInfo& info)
 {
   beginInsertRows (QModelIndex (), m_files.size (), m_files.size ());
 
@@ -125,17 +130,20 @@
   endInsertRows ();
 }
 
-int find_files_model::rowCount (const QModelIndex&) const
+int
+find_files_model::rowCount (const QModelIndex&) const
 {
   return m_files.size ();
 }
 
-int find_files_model::columnCount (const QModelIndex&) const
+int
+find_files_model::columnCount (const QModelIndex&) const
 {
   return m_columnNames.size ();
 }
 
-QVariant find_files_model::data (const QModelIndex& idx, int role) const
+QVariant
+find_files_model::data (const QModelIndex& idx, int role) const
 {
   QVariant retval;
 
@@ -173,15 +181,17 @@
   return retval;
 }
 
-QVariant find_files_model::headerData (int section,
-                                       Qt::Orientation orientation,
-                                       int role) const
+QVariant
+find_files_model::headerData (int section,
+                              Qt::Orientation orientation,
+                              int role) const
 {
   return ((orientation == Qt::Horizontal && role == Qt::DisplayRole)
           ? m_columnNames[section] : QVariant ());
 }
 
-void find_files_model::sort (int column, Qt::SortOrder order)
+void
+find_files_model::sort (int column, Qt::SortOrder order)
 {
   if (column >= 0)
     {
@@ -204,12 +214,14 @@
     }
 }
 
-QFileInfo find_files_model::fileInfo (const QModelIndex& p) const
+QFileInfo
+find_files_model::fileInfo (const QModelIndex& p) const
 {
   return p.isValid () ? m_files[p.row ()] : QFileInfo ();
 }
 
-QIcon find_files_model::fileIcon (const QModelIndex& p) const
+QIcon
+find_files_model::fileIcon (const QModelIndex& p) const
 {
   QFileIconProvider icon_provider;
 
--- a/libgui/src/gui-preferences-cs.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/gui-preferences-cs.h	Mon Feb 26 23:30:33 2024 -0500
@@ -56,7 +56,8 @@
 extern gui_pref cs_colors[];
 
 const QStringList
-cs_color_names = {
+cs_color_names =
+{
   QT_TRANSLATE_NOOP ("octave::settings_dialog", "Foreground"),
   QT_TRANSLATE_NOOP ("octave::settings_dialog", "Background"),
   QT_TRANSLATE_NOOP ("octave::settings_dialog", "Selection"),
--- a/libgui/src/gui-preferences-ed.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/gui-preferences-ed.h	Mon Feb 26 23:30:33 2024 -0500
@@ -133,7 +133,8 @@
 ed_last_comment_str ("editor/oct_last_comment_str");
 
 const QStringList
-ed_comment_strings = {
+ed_comment_strings =
+{
   "##",
   "#",
   "%",
@@ -159,7 +160,8 @@
 
 // Tabs
 const QStringList
-ed_tab_position_names = {
+ed_tab_position_names =
+{
   QT_TRANSLATE_NOOP ("octave::settings_dialog", "Top"),
   QT_TRANSLATE_NOOP ("octave::settings_dialog", "Bottom"),
   QT_TRANSLATE_NOOP ("octave::settings_dialog", "Left"),
--- a/libgui/src/gui-preferences-global.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/gui-preferences-global.h	Mon Feb 26 23:30:33 2024 -0500
@@ -93,7 +93,8 @@
 }  ;
 
 const QStringList
-global_icon_paths = {
+global_icon_paths =
+{
   "",
   ":/icons/octave/128x128/",
   ":/icons/tango/128x128/",
@@ -103,7 +104,8 @@
 extern gui_pref global_icon_theme_index;
 
 const QStringList
-global_all_icon_themes = {
+global_all_icon_themes =
+{
   "",
   "octave",
   "tango",
@@ -111,7 +113,8 @@
 };
 
 const QStringList
-global_all_icon_theme_names = {
+global_all_icon_theme_names =
+{
   "System",
   "Octave",
   "Tango"
@@ -126,7 +129,8 @@
   EXTRA_STYLE_FUSION_DARK = 0
 }  ;
 const QStringList
-global_extra_styles = {
+global_extra_styles =
+{
   "Fusion-Dark"
 };
 
@@ -173,7 +177,8 @@
 extern gui_pref global_proxy_pass;
 
 const QStringList
-global_proxy_all_types = {
+global_proxy_all_types =
+{
   "HttpProxy",
   "Socks5Proxy",
   QT_TRANSLATE_NOOP ("octave::settings_dialog", "Environment Variables")
--- a/libgui/src/gui-preferences-sc.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/gui-preferences-sc.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -217,7 +217,8 @@
 sc_pref sc_doc_go_next (QCoreApplication::translate ("shortcuts", "Go Forward one Page"), sc_doc + ":go_next", QKeySequence::Forward);
 sc_pref sc_doc_bookmark (QCoreApplication::translate ("shortcuts", "Bookmark this Page"), sc_doc + ":bookmark", OCTAVE_QT_KEYCOMBINATION (CTRL, Qt::Key_D));
 
-QString get_shortcut_section (const QString& key)
+QString
+get_shortcut_section (const QString& key)
 {
   QString section;
 
--- a/libgui/src/gui-preferences-ve.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/gui-preferences-ve.h	Mon Feb 26 23:30:33 2024 -0500
@@ -51,7 +51,8 @@
 
 extern gui_pref ve_colors[];
 
-const QStringList ve_color_names = {
+const QStringList ve_color_names =
+{
   QT_TRANSLATE_NOOP ("octave::settings_dialog", "Foreground"),
   QT_TRANSLATE_NOOP ("octave::settings_dialog", "Background"),
   QT_TRANSLATE_NOOP ("octave::settings_dialog", "Selected Foreground"),
@@ -59,7 +60,8 @@
   QT_TRANSLATE_NOOP ("octave::settings_dialog", "Alternating Background")
 };
 
-const QStringList ve_save_formats = {
+const QStringList ve_save_formats =
+{
   "ascii",
   "binary",
   "float-binary",
@@ -74,7 +76,8 @@
 
 // The following list is a relation between save format and fiel extension.
 // The format string are case insensitive.
-const QStringList ve_save_formats_ext = {
+const QStringList ve_save_formats_ext =
+{
   "-ascii",       "dat",
   "-hdf5",        "h5",
   "-text",        "txt",
--- a/libgui/src/gui-preferences-ws.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/gui-preferences-ws.h	Mon Feb 26 23:30:33 2024 -0500
@@ -46,14 +46,16 @@
 
 extern gui_pref ws_mru_list;
 
-const QStringList ws_columns_shown = {
+const QStringList ws_columns_shown =
+{
   QT_TRANSLATE_NOOP ("octave::workspace_view", "Class"),
   QT_TRANSLATE_NOOP ("octave::workspace_view", "Dimension"),
   QT_TRANSLATE_NOOP ("octave::workspace_view", "Value"),
   QT_TRANSLATE_NOOP ("octave::workspace_view", "Attribute")
 };
 
-const QStringList ws_columns_shown_keys = {
+const QStringList ws_columns_shown_keys =
+{
   "workspaceview/show_class",
   "workspaceview/show_dimension",
   "workspaceview/show_value",
@@ -71,7 +73,8 @@
 const QString ws_class_chars ("agp");
 
 const QStringList
-ws_color_names = {
+ws_color_names =
+{
   QT_TRANSLATE_NOOP ("octave::settings_dialog", "argument"),
   QT_TRANSLATE_NOOP ("octave::settings_dialog", "global"),
   QT_TRANSLATE_NOOP ("octave::settings_dialog", "persistent")
--- a/libgui/src/gui-preferences.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/gui-preferences.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -39,30 +39,34 @@
 
 all_gui_preferences *all_gui_preferences::s_instance = nullptr;
 
-void all_gui_preferences::insert (const QString& settings_key,
-                                  const gui_pref& pref)
+void
+all_gui_preferences::insert (const QString& settings_key,
+                             const gui_pref& pref)
 {
   ensure_instance ();
 
   s_instance->do_insert (settings_key, pref);
 }
 
-const gui_pref all_gui_preferences::value (const QString& settings_key)
+const gui_pref
+all_gui_preferences::value (const QString& settings_key)
 {
   ensure_instance ();
 
   return s_instance->do_value (settings_key);
 }
 
-QStringList all_gui_preferences::keys ()
+QStringList
+all_gui_preferences::keys ()
 {
   ensure_instance ();
 
   return s_instance->do_keys ();
 }
 
-void all_gui_preferences::do_insert (const QString& settings_key,
-                                     const gui_pref& pref)
+void
+all_gui_preferences::do_insert (const QString& settings_key,
+                                const gui_pref& pref)
 {
   m_hash.insert (settings_key, pref);
 }
@@ -73,12 +77,14 @@
   return m_hash.value (settings_key);
 }
 
-QStringList all_gui_preferences::do_keys () const
+QStringList
+all_gui_preferences::do_keys () const
 {
   return m_hash.keys ();
 }
 
-void all_gui_preferences::ensure_instance ()
+void
+all_gui_preferences::ensure_instance ()
 {
   if (! s_instance)
     s_instance = new all_gui_preferences ();
@@ -108,7 +114,8 @@
   all_shortcut_preferences::insert (settings_key, *this);
 }
 
-QKeySequence sc_pref::def_value () const
+QKeySequence
+sc_pref::def_value () const
 {
   QKeySequence key_seq = QKeySequence ();
 
@@ -120,37 +127,42 @@
   return key_seq;
 }
 
-QString sc_pref::def_text () const
+QString
+sc_pref::def_text () const
 {
   return def_value ().toString ();
 }
 
 all_shortcut_preferences *all_shortcut_preferences::s_instance = nullptr;
 
-void all_shortcut_preferences::insert (const QString& settings_key,
-                                       const sc_pref& scpref)
+void
+all_shortcut_preferences::insert (const QString& settings_key,
+                                  const sc_pref& scpref)
 {
   ensure_instance ();
 
   s_instance->do_insert (settings_key, scpref);
 }
 
-const sc_pref all_shortcut_preferences::value (const QString& settings_key)
+const sc_pref
+all_shortcut_preferences::value (const QString& settings_key)
 {
   ensure_instance ();
 
   return s_instance->do_value (settings_key);
 }
 
-QStringList all_shortcut_preferences::keys ()
+QStringList
+all_shortcut_preferences::keys ()
 {
   ensure_instance ();
 
   return s_instance->do_keys ();
 }
 
-void all_shortcut_preferences::do_insert (const QString& settings_key,
-                                          const sc_pref& scpref)
+void
+all_shortcut_preferences::do_insert (const QString& settings_key,
+                                     const sc_pref& scpref)
 {
   m_hash.insert (settings_key, scpref);
 }
@@ -161,12 +173,14 @@
   return m_hash.value (settings_key);
 }
 
-QStringList all_shortcut_preferences::do_keys () const
+QStringList
+all_shortcut_preferences::do_keys () const
 {
   return m_hash.keys ();
 }
 
-void all_shortcut_preferences::ensure_instance ()
+void
+all_shortcut_preferences::ensure_instance ()
 {
   if (! s_instance)
     s_instance = new all_shortcut_preferences ();
--- a/libgui/src/gui-settings.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/gui-settings.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -71,54 +71,64 @@
   return fileName ();
 }
 
-QString gui_settings::directory_name () const
+QString
+gui_settings::directory_name () const
 {
   QFileInfo sfile (fileName ());
 
   return sfile.absolutePath ();
 }
 
-bool gui_settings::bool_value (const gui_pref& pref) const
+bool
+gui_settings::bool_value (const gui_pref& pref) const
 {
   return value (pref).toBool ();
 }
 
-QByteArray gui_settings::byte_array_value (const gui_pref& pref) const
+QByteArray
+gui_settings::byte_array_value (const gui_pref& pref) const
 {
   return value (pref).toByteArray ();
 }
 
-QColor gui_settings::color_value (const gui_pref& pref) const
+QColor
+gui_settings::color_value (const gui_pref& pref) const
 {
   return value (pref).value<QColor> ();
 }
 
-QDateTime gui_settings::date_time_value (const gui_pref& pref) const
+QDateTime
+gui_settings::date_time_value (const gui_pref& pref) const
 {
   return value (pref).toDateTime ();
 }
 
-int gui_settings::int_value (const gui_pref& pref) const
+int
+gui_settings::int_value (const gui_pref& pref) const
 {
   return value (pref).toInt ();
 }
 
-QString gui_settings::string_value (const gui_pref& pref) const
+QString
+gui_settings::string_value (const gui_pref& pref) const
 {
   return value (pref).toString ();
 }
 
-QStringList gui_settings::string_list_value (const gui_pref& pref) const
+QStringList
+gui_settings::string_list_value (const gui_pref& pref) const
 {
   return value (pref).toStringList ();
 }
 
-uint gui_settings::uint_value (const gui_pref& pref) const
+uint
+gui_settings::uint_value (const gui_pref& pref) const
 {
   return value (pref).toUInt ();
 }
 
-QColor gui_settings::get_color_value (const QVariant& def, int mode) const
+QColor
+gui_settings::get_color_value (const QVariant& def, int mode) const
 {
   QColor default_color;
 
@@ -136,8 +146,8 @@
       // the application's palette
       default_color = QApplication::palette ().color
                       (static_cast<QPalette::ColorRole> (def.toInt ()));
-                // FIXME: use value<QPalette::ColorRole> instead of static cast after
-                //        dropping support of Qt 5.4
+      // FIXME: use value<QPalette::ColorRole> instead of static cast after
+      //        dropping support of Qt 5.4
     }
 
   if ((mode == 1) && (default_color != settings_color_no_change))
@@ -158,7 +168,8 @@
   return default_color;
 }
 
-QColor gui_settings::color_value (const gui_pref& pref, int mode) const
+QColor
+gui_settings::color_value (const gui_pref& pref, int mode) const
 {
   QColor default_color = get_color_value (pref.def (), mode);
 
@@ -166,8 +177,9 @@
                 QVariant (default_color)).value<QColor> ();
 }
 
-void gui_settings::set_color_value (const gui_pref& pref,
-                                    const QColor& color, int mode)
+void
+gui_settings::set_color_value (const gui_pref& pref,
+                               const QColor& color, int mode)
 {
   int m = mode;
   if (m > 1)
@@ -177,7 +189,8 @@
             QVariant (color));
 }
 
-QString gui_settings::sc_value (const sc_pref& scpref) const
+QString
+gui_settings::sc_value (const sc_pref& scpref) const
 {
   QKeySequence key_seq = sc_def_value (scpref);
 
@@ -187,13 +200,14 @@
                 key_seq.toString ()).toString ();
 }
 
-QKeySequence gui_settings::sc_def_value (const sc_pref& scpref) const
+QKeySequence
+gui_settings::sc_def_value (const sc_pref& scpref) const
 {
   return scpref.def_value ();
 }
 
-void gui_settings::set_shortcut (QAction *action, const sc_pref& scpref,
-                                 bool enable)
+void
+gui_settings::set_shortcut (QAction *action, const sc_pref& scpref, bool enable)
 {
   if (! enable)
     {
@@ -211,7 +225,8 @@
               << " not found in settings";
 }
 
-void gui_settings::shortcut (QShortcut *sc, const sc_pref& scpref)
+void
+gui_settings::shortcut (QShortcut *sc, const sc_pref& scpref)
 {
   QString shortcut = sc_value (scpref);
 
@@ -222,7 +237,8 @@
               << " not found in settings";
 }
 
-void gui_settings::config_icon_theme ()
+void
+gui_settings::config_icon_theme ()
 {
   int theme_index;
 
@@ -267,8 +283,9 @@
   setValue (global_icon_fallbacks.settings_key (), icon_fallbacks);
 }
 
-QIcon gui_settings::icon (const QString& icon_name, bool octave_only,
-                          const QString& icon_alt_name)
+QIcon
+gui_settings::icon (const QString& icon_name, bool octave_only,
+                    const QString& icon_alt_name)
 {
   if (octave_only)
     return QIcon (global_icon_paths.at (ICON_THEME_OCTAVE) + icon_name + ".png");
@@ -288,11 +305,12 @@
         return QIcon (icon_file);
     }
 
-    //QIcon::setThemeName (current_theme);
-    return QIcon ();
+  //QIcon::setThemeName (current_theme);
+  return QIcon ();
 }
 
-QString gui_settings::get_default_font_family ()
+QString
+gui_settings::get_default_font_family ()
 {
   // Get all available fixed width fonts from the Qt font database.
 
@@ -349,7 +367,8 @@
   return default_family;
 }
 
-QStringList gui_settings::get_default_font ()
+QStringList
+gui_settings::get_default_font ()
 {
   QString default_family = get_default_font_family ();
 
@@ -379,7 +398,8 @@
   return result;
 }
 
-QString gui_settings::get_gui_translation_dir ()
+QString
+gui_settings::get_gui_translation_dir ()
 {
   // get environment variable for the locale dir (e.g. from run-octave)
   std::string dldir = sys::env::getenv ("OCTAVE_LOCALE_DIR");
@@ -388,22 +408,25 @@
   return QString::fromStdString (dldir);
 }
 
-void gui_settings::load_translator (QTranslator *tr, const QLocale& locale, const QString& filename, const QString& prefix, const QString& directory) const
+void
+gui_settings::load_translator (QTranslator *tr, const QLocale& locale, const QString& filename, const QString& prefix, const QString& directory) const
 {
   if (! tr->load (locale, filename, prefix, directory))
     qWarning () << "failed to load translator for locale" << locale.name () << "from file" << filename << "with prefix" << prefix << "from directory" << directory;
 }
 
-void gui_settings::load_translator (QTranslator *tr, const QString& prefix, const QString& language, const QString& directory) const
+void
+gui_settings::load_translator (QTranslator *tr, const QString& prefix, const QString& language, const QString& directory) const
 {
   if (! tr->load (prefix + language, directory))
     if (! tr->load (prefix + language.toLower (), directory))
       qWarning () << "failed to load translator file" << (prefix + language) << "or" << (prefix + language.toLower ()) << "from directory" << directory;
 }
 
-void gui_settings::config_translators (QTranslator *qt_tr,
-                                       QTranslator *qsci_tr,
-                                       QTranslator *gui_tr)
+void
+gui_settings::config_translators (QTranslator *qt_tr,
+                                  QTranslator *qsci_tr,
+                                  QTranslator *gui_tr)
 {
   QString qt_trans_dir
 #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
@@ -441,7 +464,8 @@
 }
 
 #if defined (HAVE_QSCINTILLA)
-int gui_settings::get_valid_lexer_styles (QsciLexer *lexer, int *styles)
+int
+gui_settings::get_valid_lexer_styles (QsciLexer *lexer, int *styles)
 {
   int max_style = 0;
   int actual_style = 0;
@@ -462,7 +486,8 @@
  * @param attr QFont with the desired attributes
  * @param base QFont with desired family and size
  */
-static QFont copy_font_attributes (const QFont& attr, const QFont& base)
+static QFont
+copy_font_attributes (const QFont& attr, const QFont& base)
 {
   QFont dest (base);
 
@@ -474,7 +499,8 @@
 }
 
 #if defined (HAVE_QSCINTILLA)
-void gui_settings::read_lexer_settings (QsciLexer *lexer, int mode, int def)
+void
+gui_settings::read_lexer_settings (QsciLexer *lexer, int mode, int def)
 {
   // Test whether the settings for lexer is already contained in the
   // given gui settings file. If yes, load them, if not copy them from the
@@ -543,8 +569,9 @@
 }
 #endif
 
-bool gui_settings::update_settings_key (const QString& old_key,
-                                        const QString& new_key)
+bool
+gui_settings::update_settings_key (const QString& old_key,
+                                   const QString& new_key)
 {
   if (contains (old_key))
     {
@@ -557,7 +584,8 @@
   return false;
 }
 
-void gui_settings::update_network_settings ()
+void
+gui_settings::update_network_settings ()
 {
   QNetworkProxy proxy;
 
@@ -618,7 +646,7 @@
           while (! proxy_url.isValid () && count < env_vars.size ())
             {
               proxy_url = QUrl (QString::fromStdString
-                                  (sys::env::getenv (env_vars[count])));
+                                (sys::env::getenv (env_vars[count])));
               count++;
             }
 
@@ -658,7 +686,8 @@
 }
 
 // initialize a given combo box with available text encodings
-void gui_settings::combo_encoding (QComboBox *combo, const QString& current)
+void
+gui_settings::combo_encoding (QComboBox *combo, const QString& current)
 {
   std::vector<std::string> encoding_list {string::get_encoding_list ()};
 
@@ -721,7 +750,8 @@
   combo->setMaxVisibleItems (12);
 }
 
-void gui_settings::reload ()
+void
+gui_settings::reload ()
 {
   // Declare some empty options, which may be set at first startup for
   // writing them into the newly created settings file
@@ -762,7 +792,8 @@
   setValue (global_mono_font.settings_key (), get_default_font_family ());
 }
 
-void gui_settings::check ()
+void
+gui_settings::check ()
 {
   if (status () == QSettings::NoError)
     {
--- a/libgui/src/gui-utils.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/gui-utils.h	Mon Feb 26 23:30:33 2024 -0500
@@ -51,9 +51,9 @@
   @return New color as QColor
 */
 
-  extern OCTGUI_API QColor
-  interpolate_color (const QColor& col1, const QColor& col2,
-                     double fs, double fv);
+extern OCTGUI_API QColor
+interpolate_color (const QColor& col1, const QColor& col2,
+                   double fs, double fv);
 
 /*!
   Get the screen geometry of the actual screen.
--- a/libgui/src/history-dock-widget.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/history-dock-widget.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -58,13 +58,15 @@
     make_window ();
 }
 
-void history_dock_widget::set_history (const QStringList& hist)
+void
+history_dock_widget::set_history (const QStringList& hist)
 {
   m_history_model->setStringList (hist);
   m_history_list_view->scrollToBottom ();
 }
 
-void history_dock_widget::append_history (const QString& hist_entry)
+void
+history_dock_widget::append_history (const QString& hist_entry)
 {
   QStringList lst = m_history_model->stringList ();
   lst.append (hist_entry);
@@ -80,12 +82,14 @@
     m_history_list_view->scrollToBottom ();
 }
 
-void history_dock_widget::clear_history ()
+void
+history_dock_widget::clear_history ()
 {
   m_history_model->setStringList (QStringList ());
 }
 
-void history_dock_widget::save_settings ()
+void
+history_dock_widget::save_settings ()
 {
   gui_settings settings;
 
@@ -102,7 +106,8 @@
   octave_dock_widget::save_settings ();
 }
 
-void history_dock_widget::update_filter_history ()
+void
+history_dock_widget::update_filter_history ()
 {
   QString text = m_filter->currentText ();   // get current text
   int index = m_filter->findText (text);     // and its actual index
@@ -114,7 +119,8 @@
   m_filter->setCurrentIndex (0);
 }
 
-void history_dock_widget::set_filter_focus (bool focus)
+void
+history_dock_widget::set_filter_focus (bool focus)
 {
   if (focus)
     {
@@ -128,7 +134,8 @@
     }
 }
 
-void history_dock_widget::filter_activate (bool state)
+void
+history_dock_widget::filter_activate (bool state)
 {
   m_filter->setEnabled (state);
   m_sort_filter_proxy_model.setDynamicSortFilter (state);
@@ -141,7 +148,8 @@
   set_filter_focus (state);
 }
 
-void history_dock_widget::ctxMenu (const QPoint& xpos)
+void
+history_dock_widget::ctxMenu (const QPoint& xpos)
 {
   QMenu menu (this);
 
@@ -169,12 +177,14 @@
   menu.exec (m_history_list_view->mapToGlobal (xpos));
 }
 
-void history_dock_widget::handle_double_click (QModelIndex modelIndex)
+void
+history_dock_widget::handle_double_click (QModelIndex modelIndex)
 {
   emit command_double_clicked (modelIndex.data ().toString ());
 }
 
-void history_dock_widget::handle_contextmenu_copy (bool)
+void
+history_dock_widget::handle_contextmenu_copy (bool)
 {
   QString text;
   QItemSelectionModel *selectionModel = m_history_list_view->selectionModel ();
@@ -193,7 +203,8 @@
   QApplication::clipboard ()->setText (text);
 }
 
-void history_dock_widget::handle_contextmenu_evaluate (bool)
+void
+history_dock_widget::handle_contextmenu_evaluate (bool)
 {
   QItemSelectionModel *selectionModel = m_history_list_view->selectionModel ();
   QModelIndexList rows = selectionModel->selectedRows ();
@@ -202,7 +213,8 @@
       emit command_double_clicked (it.data ().toString ());
 }
 
-void history_dock_widget::handle_contextmenu_create_script (bool)
+void
+history_dock_widget::handle_contextmenu_create_script (bool)
 {
   QString text;
   QItemSelectionModel *selectionModel = m_history_list_view->selectionModel ();
@@ -224,7 +236,8 @@
     emit command_create_script (text);
 }
 
-void history_dock_widget::handle_contextmenu_filter ()
+void
+history_dock_widget::handle_contextmenu_filter ()
 {
   m_filter_shown = ! m_filter_shown;
   m_filter_widget->setVisible (m_filter_shown);
@@ -232,7 +245,8 @@
   set_filter_focus (m_filter_shown && m_filter_checkbox->isChecked ()) ;
 }
 
-void history_dock_widget::copyClipboard ()
+void
+history_dock_widget::copyClipboard ()
 {
   if (m_history_list_view->hasFocus ())
     handle_contextmenu_copy (true);
@@ -244,7 +258,8 @@
     }
 }
 
-void history_dock_widget::pasteClipboard ()
+void
+history_dock_widget::pasteClipboard ()
 {
   if (m_filter->lineEdit ()->hasFocus ())
     {
@@ -255,7 +270,8 @@
     }
 }
 
-void history_dock_widget::selectAll ()
+void
+history_dock_widget::selectAll ()
 {
   if (m_filter->lineEdit ()->hasFocus ())
     m_filter->lineEdit ()->selectAll ();
@@ -264,7 +280,8 @@
     m_history_list_view->selectAll ();
 }
 
-void history_dock_widget::handle_visibility (bool visible)
+void
+history_dock_widget::handle_visibility (bool visible)
 {
   octave_dock_widget::handle_visibility (visible);
 
@@ -275,7 +292,8 @@
     }
 }
 
-void history_dock_widget::construct ()
+void
+history_dock_widget::construct ()
 {
   m_history_model = new QStringListModel ();
   m_sort_filter_proxy_model.setSourceModel (m_history_model);
@@ -352,7 +370,8 @@
   m_history_list_view->setTextElideMode (Qt::ElideRight);
 }
 
-void history_dock_widget::notice_settings ()
+void
+history_dock_widget::notice_settings ()
 {
   gui_settings settings;
 
--- a/libgui/src/interpreter-qobject.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/interpreter-qobject.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -42,7 +42,8 @@
   : QObject (), m_octave_qobj (oct_qobj), m_interpreter (nullptr)
 { }
 
-void interpreter_qobject::execute ()
+void
+interpreter_qobject::execute ()
 {
   // The Octave application context owns the interpreter.
 
@@ -108,7 +109,8 @@
   emit shutdown_finished (exit_status);
 }
 
-void interpreter_qobject::interpreter_event (const fcn_callback& fcn)
+void
+interpreter_qobject::interpreter_event (const fcn_callback& fcn)
 {
   if (! m_interpreter)
     return;
@@ -118,7 +120,8 @@
   evmgr.post_event (fcn);
 }
 
-void interpreter_qobject::interpreter_event (const meth_callback& meth)
+void
+interpreter_qobject::interpreter_event (const meth_callback& meth)
 {
   if (! m_interpreter)
     return;
@@ -128,7 +131,8 @@
   evmgr.post_event (meth);
 }
 
-void interpreter_qobject::interrupt ()
+void
+interpreter_qobject::interrupt ()
 {
   if (! m_interpreter)
     return;
@@ -139,7 +143,8 @@
   m_interpreter->interrupt ();
 }
 
-void interpreter_qobject::pause ()
+void
+interpreter_qobject::pause ()
 {
   // FIXME: Should we make this action work with the old terminal
   // widget?
@@ -156,7 +161,8 @@
     }
 }
 
-void interpreter_qobject::stop ()
+void
+interpreter_qobject::stop ()
 {
   // FIXME: Should we make this action work with the old terminal
   // widget?
@@ -173,7 +179,8 @@
     }
 }
 
-void interpreter_qobject::resume ()
+void
+interpreter_qobject::resume ()
 {
   // FIXME: Should we make this action work with the old terminal
   // widget?
@@ -184,7 +191,7 @@
       // interpreter is paused.
 
       interpreter_event
-        ([=] (interpreter& interp)
+        ([] (interpreter& interp)
         {
           // INTERPRETER THREAD
 
@@ -193,7 +200,8 @@
     }
 }
 
-qt_interpreter_events *interpreter_qobject::qt_link ()
+qt_interpreter_events *
+interpreter_qobject::qt_link ()
 {
   return m_octave_qobj.qt_link ();
 }
--- a/libgui/src/led-indicator.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/led-indicator.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -35,13 +35,14 @@
 OCTAVE_BEGIN_NAMESPACE(octave)
 
 led_indicator::led_indicator (led_state initial_state, QWidget *p)
-: QLabel (p)
+  : QLabel (p)
 {
   setFixedSize(12, 12);
   set_state (initial_state);
 }
 
-void led_indicator::set_state (led_state state)
+void
+led_indicator::set_state (led_state state)
 {
   QColor col (Qt::gray);
 
@@ -63,7 +64,8 @@
   setStyleSheet (style_sheet (col));
 }
 
-QString led_indicator::style_sheet (const QColor& col)
+QString
+led_indicator::style_sheet (const QColor& col)
 {
   QColor col_light = interpolate_color (col, QColor (Qt::white), 0.25, 0.9);
 
--- a/libgui/src/led-indicator.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/led-indicator.h	Mon Feb 26 23:30:33 2024 -0500
@@ -37,11 +37,11 @@
 public:
 
   enum led_state
-    {
-      LED_STATE_NO = -1,
-      LED_STATE_INACTIVE,
-      LED_STATE_ACTIVE
-    };
+  {
+    LED_STATE_NO = -1,
+    LED_STATE_INACTIVE,
+    LED_STATE_ACTIVE
+  };
 
   led_indicator (led_state initial_state = LED_STATE_INACTIVE,
                  QWidget *parent = 0);
--- a/libgui/src/m-editor/file-editor-interface.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/m-editor/file-editor-interface.h	Mon Feb 26 23:30:33 2024 -0500
@@ -71,7 +71,7 @@
 
   virtual void empty_script (bool, bool) = 0;
 
-  virtual void restore_session () = 0;
+  virtual void restore_session (bool) = 0;
 
   virtual void enable_menu_shortcuts (bool enable) = 0;
 
--- a/libgui/src/m-editor/file-editor-tab.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/m-editor/file-editor-tab.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -133,7 +133,7 @@
   m_last_modified = QDateTime::currentDateTimeUtc();
 
   connect (m_edit_area, SIGNAL (cursorPositionChanged (int, int)),
-           this, SLOT (handle_cursor_moved (int,int)));
+           this, SLOT (handle_cursor_moved (int, int)));
 
   connect (m_edit_area, SIGNAL (SCN_CHARADDED (int)),
            this, SLOT (handle_char_added (int)));
@@ -246,7 +246,7 @@
            this, SLOT (handle_copy_available (bool)));
 
   connect (&m_file_system_watcher, &QFileSystemWatcher::fileChanged,
-           this, [=] (const QString& path) { file_has_changed (path); });
+           this, [this] (const QString& path) { file_has_changed (path); });
 
   connect (this, &file_editor_tab::maybe_remove_next,
            this, &file_editor_tab::handle_remove_next);
@@ -293,7 +293,8 @@
     }
 }
 
-void file_editor_tab::set_encoding (const QString& new_encoding)
+void
+file_editor_tab::set_encoding (const QString& new_encoding)
 {
   if (new_encoding.isEmpty ())
     return;
@@ -304,7 +305,8 @@
     set_modified (true);
 }
 
-void file_editor_tab::closeEvent (QCloseEvent *e)
+void
+file_editor_tab::closeEvent (QCloseEvent *e)
 {
   int save_dialog = check_file_modified (true);
   if ((save_dialog == QMessageBox::Cancel) ||
@@ -322,12 +324,14 @@
     }
 }
 
-void file_editor_tab::set_current_directory (const QString& dir)
+void
+file_editor_tab::set_current_directory (const QString& dir)
 {
   m_ced = dir;
 }
 
-void file_editor_tab::handle_context_menu_edit (const QString& word_at_cursor)
+void
+file_editor_tab::handle_context_menu_edit (const QString& word_at_cursor)
 {
   // Search for a function with that name in the current file
   // This is done first because local functions and subfunctions have priority
@@ -366,7 +370,7 @@
       // reg expr. found: it is an internal function
       m_edit_area->setCursorPosition (line, match.capturedStart ());
       m_edit_area->SendScintilla (2232, line);     // SCI_ENSUREVISIBLE
-      // SCI_VISIBLEFROMDOCLINE
+                                                   // SCI_VISIBLEFROMDOCLINE
       int vis_line = m_edit_area->SendScintilla (2220, line);
       m_edit_area->SendScintilla (2613, vis_line); // SCI_SETFIRSTVISIBLELINE
       return;
@@ -378,7 +382,8 @@
 // If "dbstop if ..." selected from context menu, create a conditional
 // breakpoint.  The default condition is (a) the existing condition if there
 // is already a breakpoint, (b) any selected text, or (c) empty
-void file_editor_tab::handle_context_menu_break_condition (int linenr)
+void
+file_editor_tab::handle_context_menu_break_condition (int linenr)
 {
   // Ensure editor line numbers match Octave core's line numbers.
   // Give users the option to save modifications if necessary.
@@ -422,8 +427,9 @@
 // to add the breakpoint in the editor tab or a signal to display a
 // new dialog.
 
-void file_editor_tab::handle_dbstop_if (const QString& prompt, int line,
-                                        const QString& cond)
+void
+file_editor_tab::handle_dbstop_if (const QString& prompt, int line,
+                                   const QString& cond)
 {
   bool ok;
   QString new_cond
@@ -442,7 +448,7 @@
       QPointer<file_editor_tab> this_fetab (this);
 
       emit interpreter_event
-        ([=] (interpreter& interp)
+        ([this, this_fetab, line, new_cond] (interpreter& interp)
          {
            // INTERPRETER THREAD
 
@@ -507,7 +513,8 @@
     }
 }
 
-void file_editor_tab::set_file_name (const QString& fileName)
+void
+file_editor_tab::set_file_name (const QString& fileName)
 {
   // update tracked file if we really have a file on disk
   QStringList trackedFiles = m_file_system_watcher.files ();
@@ -539,7 +546,8 @@
 
 // valid_file_name (file): checks whether "file" names a file.
 // By default, "file" is empty; then m_file_name is checked
-bool file_editor_tab::valid_file_name (const QString& file)
+bool
+file_editor_tab::valid_file_name (const QString& file)
 {
   if (file.isEmpty ())
     {
@@ -552,7 +560,8 @@
   return true;
 }
 
-void file_editor_tab::enable_file_watcher (bool do_enable)
+void
+file_editor_tab::enable_file_watcher (bool do_enable)
 {
   if (do_enable)
     m_file_system_watcher.addPath (m_file_name);
@@ -565,7 +574,8 @@
 // not match what Octave core is interpreting in the
 // file on disk.  This function gives the user the option
 // to save before creating the breakpoint.
-bool file_editor_tab::unchanged_or_saved ()
+bool
+file_editor_tab::unchanged_or_saved ()
 {
   bool retval = true;
   if (m_edit_area->isModified () || ! valid_file_name ())
@@ -586,8 +596,9 @@
 
 // Toggle a breakpoint at the editor_linenr or, if this was called by
 // a click with CTRL pressed, toggle a bookmark at that point.
-void file_editor_tab::handle_margin_clicked (int margin, int editor_linenr,
-                                             Qt::KeyboardModifiers state)
+void
+file_editor_tab::handle_margin_clicked (int margin, int editor_linenr,
+                                        Qt::KeyboardModifiers state)
 {
   if (margin == 1)
     {
@@ -614,7 +625,8 @@
     }
 }
 
-void file_editor_tab::update_lexer ()
+void
+file_editor_tab::update_lexer ()
 {
   // Create a new lexer
   QsciLexer *lexer = nullptr;
@@ -725,7 +737,8 @@
 //    a) the lexer changes,
 //    b) the settings have changed, or
 //    c) a package was loaded/unloaded
-void file_editor_tab::update_lexer_settings (bool update_apis_only)
+void
+file_editor_tab::update_lexer_settings (bool update_apis_only)
 {
   QsciLexer *lexer = m_edit_area->lexer ();
 
@@ -840,7 +853,7 @@
               QPointer<file_editor_tab> this_fetab (this);
 
               emit interpreter_event
-                ([=] (interpreter& interp)
+                ([this, this_fetab, octave_builtins, octave_functions] (interpreter& interp)
                  {
                    // INTERPRETER THREAD
 
@@ -938,9 +951,9 @@
   QColor current_line_bg
     = settings.color_value (ed_highlight_current_line_color, mode);
   if (current_line_bg == settings_color_no_change)
-     bgm = interpolate_color (bg, fg, 0.5, 0.1);  // It is the "auto" color
-   else
-     bgm = current_line_bg;  // Specific color given
+    bgm = interpolate_color (bg, fg, 0.5, 0.1);  // It is the "auto" color
+  else
+    bgm = current_line_bg;  // Specific color given
 
   m_edit_area->setCaretLineBackgroundColor (bgm);
 
@@ -972,7 +985,8 @@
 }
 
 // function for adding entries to the octave lexer's APIs
-void file_editor_tab::handle_add_octave_apis (const QStringList& api_entries)
+void
+file_editor_tab::handle_add_octave_apis (const QStringList& api_entries)
 {
   for (int idx = 0; idx < api_entries.size (); idx++)
     m_lexer_apis->add (api_entries.at (idx));
@@ -980,7 +994,8 @@
   emit api_entries_added ();
 }
 
-void file_editor_tab::handle_api_entries_added ()
+void
+file_editor_tab::handle_api_entries_added ()
 {
   // disconnect slot for saving prepared info if already connected
   disconnect (m_lexer_apis, &QsciAPIs::apiPreparationFinished,
@@ -997,13 +1012,15 @@
   m_lexer_apis->prepare ();  // prepare apis info
 }
 
-void file_editor_tab::save_apis_info ()
+void
+file_editor_tab::save_apis_info ()
 {
   m_lexer_apis->savePrepared (m_prep_apis_file);
 }
 
 // slot for fetab_set_focus: sets the focus to the current edit area
-void file_editor_tab::set_focus (const QWidget *ID)
+void
+file_editor_tab::set_focus (const QWidget *ID)
 {
   if (ID != this)
     return;
@@ -1011,7 +1028,8 @@
   emit edit_area_changed (m_edit_area); // update the edit area in find dlg
 }
 
-void file_editor_tab::context_help (const QWidget *ID, bool doc)
+void
+file_editor_tab::context_help (const QWidget *ID, bool doc)
 {
   if (ID != this)
     return;
@@ -1019,7 +1037,8 @@
   m_edit_area->context_help_doc (doc);
 }
 
-void file_editor_tab::context_edit (const QWidget *ID)
+void
+file_editor_tab::context_edit (const QWidget *ID)
 {
   if (ID != this)
     return;
@@ -1027,7 +1046,8 @@
   m_edit_area->context_edit ();
 }
 
-void file_editor_tab::save_file (const QWidget *ID)
+void
+file_editor_tab::save_file (const QWidget *ID)
 {
   if (ID != this)
     return;
@@ -1035,8 +1055,9 @@
   save_file (m_file_name);
 }
 
-void file_editor_tab::save_file (const QWidget *ID, const QString& fileName,
-                                 bool remove_on_success)
+void
+file_editor_tab::save_file (const QWidget *ID, const QString& fileName,
+                            bool remove_on_success)
 {
   if (ID != this)
     return;
@@ -1044,7 +1065,8 @@
   save_file (fileName, remove_on_success);
 }
 
-void file_editor_tab::save_file_as (const QWidget *ID)
+void
+file_editor_tab::save_file_as (const QWidget *ID)
 {
   if (ID != this)
     return;
@@ -1052,7 +1074,8 @@
   save_file_as ();
 }
 
-void file_editor_tab::print_file (const QWidget *ID)
+void
+file_editor_tab::print_file (const QWidget *ID)
 {
   if (ID != this)
     return;
@@ -1067,7 +1090,8 @@
   delete printer;
 }
 
-void file_editor_tab::run_file (const QWidget *ID, bool step_into)
+void
+file_editor_tab::run_file (const QWidget *ID, bool step_into)
 {
   if (ID != this)
     return;
@@ -1103,7 +1127,8 @@
   emit run_file_signal (info);
 }
 
-void file_editor_tab::context_run (const QWidget *ID)
+void
+file_editor_tab::context_run (const QWidget *ID)
 {
   if (ID != this)
     return;
@@ -1111,7 +1136,8 @@
   m_edit_area->context_run ();
 }
 
-void file_editor_tab::toggle_bookmark (const QWidget *ID)
+void
+file_editor_tab::toggle_bookmark (const QWidget *ID)
 {
   if (ID != this)
     return;
@@ -1127,7 +1153,8 @@
 
 // Move the text cursor to the closest bookmark
 // after the current line.
-void file_editor_tab::next_bookmark (const QWidget *ID)
+void
+file_editor_tab::next_bookmark (const QWidget *ID)
 {
   if (ID != this)
     return;
@@ -1148,7 +1175,8 @@
 
 // Move the text cursor to the closest bookmark
 // before the current line.
-void file_editor_tab::previous_bookmark (const QWidget *ID)
+void
+file_editor_tab::previous_bookmark (const QWidget *ID)
 {
   if (ID != this)
     return;
@@ -1168,7 +1196,8 @@
   m_edit_area->setCursorPosition (prevline, 0);
 }
 
-QString file_editor_tab::get_all_bookmarks ()
+QString
+file_editor_tab::get_all_bookmarks ()
 {
   QString bmlist;
   int line = 0;
@@ -1188,7 +1217,8 @@
   return bmlist;
 }
 
-void file_editor_tab::remove_bookmark (const QWidget *ID)
+void
+file_editor_tab::remove_bookmark (const QWidget *ID)
 {
   if (ID != this)
     return;
@@ -1206,10 +1236,11 @@
   add_breakpoint_event (line, condition);
 }
 
-void file_editor_tab::handle_request_remove_breakpoint (int line)
+void
+file_editor_tab::handle_request_remove_breakpoint (int line)
 {
   emit interpreter_event
-    ([=] (interpreter& interp)
+    ([this, line] (interpreter& interp)
      {
        // INTERPRETER THREAD
 
@@ -1220,7 +1251,8 @@
      });
 }
 
-void file_editor_tab::toggle_breakpoint (const QWidget *ID)
+void
+file_editor_tab::toggle_breakpoint (const QWidget *ID)
 {
   if (ID != this)
     return;
@@ -1239,7 +1271,8 @@
 
 // Move the text cursor to the closest breakpoint (conditional or unconditional)
 // after the current line.
-void file_editor_tab::next_breakpoint (const QWidget *ID)
+void
+file_editor_tab::next_breakpoint (const QWidget *ID)
 {
   if (ID != this)
     return;
@@ -1261,7 +1294,8 @@
 
 // Move the text cursor to the closest breakpoint (conditional or unconditional)
 // before the current line.
-void file_editor_tab::previous_breakpoint (const QWidget *ID)
+void
+file_editor_tab::previous_breakpoint (const QWidget *ID)
 {
   if (ID != this)
     return;
@@ -1281,13 +1315,14 @@
   m_edit_area->setCursorPosition (prevline, 0);
 }
 
-void file_editor_tab::remove_all_breakpoints (const QWidget *ID)
+void
+file_editor_tab::remove_all_breakpoints (const QWidget *ID)
 {
   if (ID != this)
     return;
 
   emit interpreter_event
-    ([=] (interpreter& interp)
+    ([this] (interpreter& interp)
      {
        // INTERPRETER THREAD
 
@@ -1299,8 +1334,9 @@
      });
 }
 
-void file_editor_tab::scintilla_command (const QWidget *ID,
-                                         unsigned int sci_msg)
+void
+file_editor_tab::scintilla_command (const QWidget *ID,
+                                    unsigned int sci_msg)
 {
   if (ID != this)
     return;
@@ -1308,8 +1344,9 @@
   m_edit_area->SendScintilla (sci_msg);
 }
 
-void file_editor_tab::comment_selected_text (const QWidget *ID,
-                                             bool input_str)
+void
+file_editor_tab::comment_selected_text (const QWidget *ID,
+                                        bool input_str)
 {
   if (ID != this)
     return;
@@ -1317,7 +1354,8 @@
   do_comment_selected_text (true, input_str);
 }
 
-void file_editor_tab::uncomment_selected_text (const QWidget *ID)
+void
+file_editor_tab::uncomment_selected_text (const QWidget *ID)
 {
   if (ID != this)
     return;
@@ -1325,7 +1363,8 @@
   do_comment_selected_text (false);
 }
 
-void file_editor_tab::indent_selected_text (const QWidget *ID)
+void
+file_editor_tab::indent_selected_text (const QWidget *ID)
 {
   if (ID != this)
     return;
@@ -1333,7 +1372,8 @@
   do_indent_selected_text (true);
 }
 
-void file_editor_tab::unindent_selected_text (const QWidget *ID)
+void
+file_editor_tab::unindent_selected_text (const QWidget *ID)
 {
   if (ID != this)
     return;
@@ -1341,7 +1381,8 @@
   do_indent_selected_text (false);
 }
 
-void file_editor_tab::smart_indent_line_or_selected_text (const QWidget *ID)
+void
+file_editor_tab::smart_indent_line_or_selected_text (const QWidget *ID)
 {
   if (ID != this)
     return;
@@ -1349,8 +1390,9 @@
   do_smart_indent_line_or_selected_text ();
 }
 
-void file_editor_tab::convert_eol (const QWidget *ID,
-                                   QsciScintilla::EolMode eol_mode)
+void
+file_editor_tab::convert_eol (const QWidget *ID,
+                              QsciScintilla::EolMode eol_mode)
 {
   if (ID != this)
     return;
@@ -1360,7 +1402,8 @@
   update_eol_indicator ();
 }
 
-void file_editor_tab::zoom_in (const QWidget *ID)
+void
+file_editor_tab::zoom_in (const QWidget *ID)
 {
   if (ID != this)
     return;
@@ -1369,7 +1412,8 @@
   auto_margin_width ();
 }
 
-void file_editor_tab::zoom_out (const QWidget *ID)
+void
+file_editor_tab::zoom_out (const QWidget *ID)
 {
   if (ID != this)
     return;
@@ -1378,7 +1422,8 @@
   auto_margin_width ();
 }
 
-void file_editor_tab::zoom_normal (const QWidget *ID)
+void
+file_editor_tab::zoom_normal (const QWidget *ID)
 {
   if (ID != this)
     return;
@@ -1387,7 +1432,8 @@
   auto_margin_width ();
 }
 
-void file_editor_tab::add_breakpoint_event (int line, const QString& cond)
+void
+file_editor_tab::add_breakpoint_event (int line, const QString& cond)
 {
   // The interpreter_event callback function below emits a signal.
   // Because we don't control when that happens, use a guarded pointer
@@ -1396,7 +1442,7 @@
   QPointer<file_editor_tab> this_fetab (this);
 
   emit interpreter_event
-    ([=] (interpreter& interp)
+    ([this, this_fetab, line, cond] (interpreter& interp)
      {
        // INTERPRETER THREAD
 
@@ -1421,7 +1467,8 @@
      });
 }
 
-void file_editor_tab::handle_remove_next (int remove_line)
+void
+file_editor_tab::handle_remove_next (int remove_line)
 {
   // Store some info breakpoint
   if (m_breakpoint_info.remove_next)
@@ -1431,7 +1478,8 @@
     }
 }
 
-void file_editor_tab::goto_line (const QWidget *ID, int line)
+void
+file_editor_tab::goto_line (const QWidget *ID, int line)
 {
   if (ID != this)
     return;
@@ -1461,7 +1509,8 @@
   center_current_line (false);  // only center line if at top or bottom
 }
 
-void file_editor_tab::move_match_brace (const QWidget *ID, bool select)
+void
+file_editor_tab::move_match_brace (const QWidget *ID, bool select)
 {
   if (ID != this)
     return;
@@ -1472,7 +1521,8 @@
     m_edit_area->moveToMatchingBrace ();
 }
 
-void file_editor_tab::show_auto_completion (const QWidget *ID)
+void
+file_editor_tab::show_auto_completion (const QWidget *ID)
 {
   if (ID != this)
     return;
@@ -1499,7 +1549,8 @@
     }
 }
 
-void file_editor_tab::do_indent_selected_text (bool indent)
+void
+file_editor_tab::do_indent_selected_text (bool indent)
 {
   // FIXME:
   m_edit_area->beginUndoAction ();
@@ -1536,7 +1587,8 @@
   m_edit_area->endUndoAction ();
 }
 
-void file_editor_tab::do_smart_indent_line_or_selected_text ()
+void
+file_editor_tab::do_smart_indent_line_or_selected_text ()
 {
   m_edit_area->beginUndoAction ();
 
@@ -1563,7 +1615,8 @@
   m_edit_area->endUndoAction ();
 }
 
-void file_editor_tab::do_comment_selected_text (bool comment, bool input_str)
+void
+file_editor_tab::do_comment_selected_text (bool comment, bool input_str)
 {
   QRegularExpression rxc;
   QString ws = "^(?:[ \\t]*)";
@@ -1712,7 +1765,8 @@
   m_edit_area->endUndoAction ();
 }
 
-void file_editor_tab::update_window_title (bool modified)
+void
+file_editor_tab::update_window_title (bool modified)
 {
   QString title ("");
   QString tooltip ("");
@@ -1729,7 +1783,8 @@
   emit file_name_changed (title, tooltip, modified);
 }
 
-void file_editor_tab::handle_copy_available (bool enableCopy)
+void
+file_editor_tab::handle_copy_available (bool enableCopy)
 {
   m_copy_available = enableCopy;
   emit editor_state_changed (m_copy_available, m_is_octave_file,
@@ -1737,7 +1792,8 @@
 }
 
 // show_dialog: shows a modal or non modal dialog depending on input arg
-void file_editor_tab::show_dialog (QDialog *dlg, bool modal)
+void
+file_editor_tab::show_dialog (QDialog *dlg, bool modal)
 {
   dlg->setAttribute (Qt::WA_DeleteOnClose);
   if (modal)
@@ -1749,7 +1805,8 @@
     }
 }
 
-int file_editor_tab::check_file_modified (bool remove)
+int
+file_editor_tab::check_file_modified (bool remove)
 {
   int decision = QMessageBox::Yes;
   if (m_edit_area->isModified ())
@@ -1802,12 +1859,14 @@
   return decision;
 }
 
-void file_editor_tab::set_modified (bool modified)
+void
+file_editor_tab::set_modified (bool modified)
 {
   m_edit_area->setModified (modified);
 }
 
-void file_editor_tab::recover_from_exit ()
+void
+file_editor_tab::recover_from_exit ()
 {
   // reset the possibly still existing read only state
   m_edit_area->setReadOnly (false);
@@ -1819,7 +1878,8 @@
   check_restore_breakpoints ();
 }
 
-void file_editor_tab::check_restore_breakpoints ()
+void
+file_editor_tab::check_restore_breakpoints ()
 {
   if (! m_bp_lines.isEmpty ())
     {
@@ -1839,7 +1899,8 @@
     }
 }
 
-QString file_editor_tab::load_file (const QString& fileName)
+QString
+file_editor_tab::load_file (const QString& fileName)
 {
   // get the absolute path
   QFileInfo file_info = QFileInfo (fileName);
@@ -1956,7 +2017,7 @@
           msg_box->show ();
         }
 
-      unwind_action free_u16_str ([=] () { ::free (u16_str); });
+      unwind_action free_u16_str ([u16_str] () { ::free (u16_str); });
 
       QString text
         = QString::fromUtf16 (reinterpret_cast<char16_t *> (u16_str), length);
@@ -1977,7 +2038,8 @@
   return QString ();
 }
 
-void file_editor_tab::handle_decode_warning_answer (QAbstractButton *btn)
+void
+file_editor_tab::handle_decode_warning_answer (QAbstractButton *btn)
 {
   QString txt = btn->text ();
 
@@ -2034,12 +2096,14 @@
   m_edit_area->setReadOnly (false);
 }
 
-void file_editor_tab::handle_current_enc_changed (const QString& enc)
+void
+file_editor_tab::handle_current_enc_changed (const QString& enc)
 {
   m_new_encoding = enc;
 }
 
-QsciScintilla::EolMode file_editor_tab::detect_eol_mode ()
+QsciScintilla::EolMode
+file_editor_tab::detect_eol_mode ()
 {
   QByteArray text = m_edit_area->text ().toLatin1 ();
 
@@ -2077,7 +2141,8 @@
   return eol_mode;
 }
 
-void file_editor_tab::update_eol_indicator ()
+void
+file_editor_tab::update_eol_indicator ()
 {
   switch (m_edit_area->eolMode ())
     {
@@ -2093,7 +2158,8 @@
     }
 }
 
-void file_editor_tab::update_breakpoints ()
+void
+file_editor_tab::update_breakpoints ()
 {
   if (m_file_name.isEmpty ())
     return;
@@ -2107,7 +2173,7 @@
   QPointer<file_editor_tab> this_fetab (this);
 
   emit interpreter_event
-    ([=] (interpreter& interp)
+    ([this, this_fetab] (interpreter& interp)
      {
        // INTERPRETER THREAD
 
@@ -2127,7 +2193,8 @@
      });
 }
 
-void file_editor_tab::update_breakpoints_handler (const octave_value_list& argout)
+void
+file_editor_tab::update_breakpoints_handler (const octave_value_list& argout)
 {
   octave_map dbg = argout(0).map_value ();
   octave_idx_type n_dbg = dbg.numel ();
@@ -2144,7 +2211,8 @@
     }
 }
 
-void file_editor_tab::new_file (const QString& commands)
+void
+file_editor_tab::new_file (const QString& commands)
 {
   update_window_title (false); // window title (no modification)
 
@@ -2162,10 +2230,11 @@
   m_edit_area->setModified (!commands.isEmpty ());
 }
 
-void file_editor_tab::confirm_dbquit_and_save (const QString& file_to_save,
-                                               const QString& base_name,
-                                               bool remove_on_success,
-                                               bool restore_breakpoints)
+void
+file_editor_tab::confirm_dbquit_and_save (const QString& file_to_save,
+    const QString& base_name,
+    bool remove_on_success,
+    bool restore_breakpoints)
 {
   int ans = QMessageBox::question (nullptr, tr ("Debug or Save"),
                                    tr ("This file is currently being executed.\n"
@@ -2182,7 +2251,7 @@
       QPointer<file_editor_tab> this_fetab (this);
 
       emit interpreter_event
-        ([=] (interpreter& interp)
+        ([this, this_fetab, base_name, file_to_save, remove_on_success, restore_breakpoints] (interpreter& interp)
          {
            // INTERPRETER THREAD
 
@@ -2211,9 +2280,10 @@
     }
 }
 
-void file_editor_tab::save_file (const QString& saveFileName,
-                                 bool remove_on_success,
-                                 bool restore_breakpoints)
+void
+file_editor_tab::save_file (const QString& saveFileName,
+                            bool remove_on_success,
+                            bool restore_breakpoints)
 {
   // If it is a new file with no name, signal that saveFileAs
   // should be performed.
@@ -2250,7 +2320,7 @@
       QPointer<file_editor_tab> this_fetab (this);
 
       emit interpreter_event
-        ([=] (interpreter& interp)
+        ([this, this_fetab, base_name, file_to_save, remove_on_success, restore_breakpoints] (interpreter& interp)
          {
            // INTERPRETER THREAD
 
@@ -2341,9 +2411,10 @@
                               restore_breakpoints);
 }
 
-void file_editor_tab::do_save_file (const QString& file_to_save,
-                                    bool remove_on_success,
-                                    bool restore_breakpoints)
+void
+file_editor_tab::do_save_file (const QString& file_to_save,
+                               bool remove_on_success,
+                               bool restore_breakpoints)
 {
   QSaveFile file (file_to_save);
 
@@ -2498,7 +2569,8 @@
     }
 }
 
-void file_editor_tab::save_file_as (bool remove_on_success)
+void
+file_editor_tab::save_file_as (bool remove_on_success)
 {
   // Simply put up the file chooser dialog box with a slot connection
   // then return control to the system waiting for a file selection.
@@ -2590,7 +2662,8 @@
   show_dialog (fileDialog, ! valid_file_name ());
 }
 
-void file_editor_tab::handle_save_as_filter_selected (const QString& filter)
+void
+file_editor_tab::handle_save_as_filter_selected (const QString& filter)
 {
   // On some systems, the filterSelected signal is emitted without user
   // action and with  an empty filter string when the file dialog is shown.
@@ -2610,7 +2683,8 @@
     file_dialog->setDefaultSuffix ("");  // not found, clear default
 }
 
-bool file_editor_tab::check_valid_identifier (QString file_name)
+bool
+file_editor_tab::check_valid_identifier (QString file_name)
 {
   QFileInfo file = QFileInfo (file_name);
   QString base_name = file.baseName ();
@@ -2633,7 +2707,8 @@
   return false;
 }
 
-bool file_editor_tab::check_valid_codec ()
+bool
+file_editor_tab::check_valid_codec ()
 {
   QString editor_text = m_edit_area->text ();
 
@@ -2692,7 +2767,8 @@
   return can_encode;
 }
 
-void file_editor_tab::handle_save_file_as_answer (const QString& save_file_name)
+void
+file_editor_tab::handle_save_file_as_answer (const QString& save_file_name)
 {
   QString saveFileName = save_file_name;
   QFileInfo file (saveFileName);
@@ -2713,10 +2789,10 @@
   if (file_dialog->testOption (QFileDialog::DontConfirmOverwrite) && file.exists ())
     {
       int ans = QMessageBox::question (file_dialog,
-                            tr ("Octave Editor"),
-                            tr ("%1\n already exists\n"
-                                "Do you want to overwrite it?").arg (saveFileName),
-                            QMessageBox::Yes | QMessageBox::No);
+                                       tr ("Octave Editor"),
+                                       tr ("%1\n already exists\n"
+                                           "Do you want to overwrite it?").arg (saveFileName),
+                                       QMessageBox::Yes | QMessageBox::No);
       if (ans != QMessageBox::Yes)
         {
           // Try again, if edit area is read only, remove on success
@@ -2739,7 +2815,8 @@
     }
 }
 
-void file_editor_tab::handle_save_file_as_answer_close (const QString& saveFileName)
+void
+file_editor_tab::handle_save_file_as_answer_close (const QString& saveFileName)
 {
   // saveFileName == m_file_name can not happen, because we only can get here
   // when we close a tab and m_file_name is not a valid filename yet
@@ -2751,13 +2828,15 @@
     emit editor_check_conflict_save (saveFileName, true);
 }
 
-void file_editor_tab::handle_save_file_as_answer_cancel ()
+void
+file_editor_tab::handle_save_file_as_answer_cancel ()
 {
   // User canceled, allow editing again.
   m_edit_area->setReadOnly (false);
 }
 
-void file_editor_tab::file_has_changed (const QString&, bool do_close)
+void
+file_editor_tab::file_has_changed (const QString&, bool do_close)
 {
   bool file_exists = QFile::exists (m_file_name);
 
@@ -2852,7 +2931,8 @@
     }
 }
 
-void file_editor_tab::notice_settings (bool init)
+void
+file_editor_tab::notice_settings (bool init)
 {
   gui_settings settings;
 
@@ -2953,8 +3033,8 @@
 
   m_edit_area->SendScintilla (QsciScintillaBase::SCI_SETHSCROLLBAR,
                               settings.bool_value (ed_show_hscroll_bar));
-  m_edit_area->SendScintilla (QsciScintillaBase::SCI_SETSCROLLWIDTH,-1);
-  m_edit_area->SendScintilla (QsciScintillaBase::SCI_SETSCROLLWIDTHTRACKING,true);
+  m_edit_area->SendScintilla (QsciScintillaBase::SCI_SETSCROLLWIDTH, -1);
+  m_edit_area->SendScintilla (QsciScintillaBase::SCI_SETSCROLLWIDTHTRACKING, true);
 
   update_window_title (m_edit_area->isModified ());
 
@@ -3021,7 +3101,8 @@
 
 }
 
-void file_editor_tab::auto_margin_width ()
+void
+file_editor_tab::auto_margin_width ()
 {
   m_edit_area->setMarginWidth (2, "1" + QString::number (m_edit_area->lines ()));
 }
@@ -3031,12 +3112,14 @@
 // the tab really was closed (for canceling exiting octave).
 // When emitting a signal, only the return value from the last slot
 // goes back to the sender
-bool file_editor_tab::conditional_close ()
+bool
+file_editor_tab::conditional_close ()
 {
   return close ();
 }
 
-void file_editor_tab::change_editor_state (const QWidget *ID)
+void
+file_editor_tab::change_editor_state (const QWidget *ID)
 {
   if (ID != this)
     return;
@@ -3045,7 +3128,8 @@
                              m_edit_area->isModified ());
 }
 
-void file_editor_tab::handle_file_reload_answer (int decision)
+void
+file_editor_tab::handle_file_reload_answer (int decision)
 {
   if (decision == QMessageBox::Yes)
     {
@@ -3059,7 +3143,8 @@
     }
 }
 
-void file_editor_tab::handle_file_resave_answer (int decision)
+void
+file_editor_tab::handle_file_resave_answer (int decision)
 {
   // check decision of user in dialog
   if (decision == QMessageBox::Save)
@@ -3078,7 +3163,8 @@
     }
 }
 
-void file_editor_tab::insert_debugger_pointer (const QWidget *ID, int line)
+void
+file_editor_tab::insert_debugger_pointer (const QWidget *ID, int line)
 {
   if (ID != this || ID == nullptr)
     return;
@@ -3152,7 +3238,8 @@
     }
 }
 
-void file_editor_tab::delete_debugger_pointer (const QWidget *ID, int line)
+void
+file_editor_tab::delete_debugger_pointer (const QWidget *ID, int line)
 {
   if (ID != this || ID == nullptr)
     return;
@@ -3161,9 +3248,10 @@
     emit remove_position_via_debugger_linenr (line);
 }
 
-void file_editor_tab::do_breakpoint_marker (bool insert,
-                                            const QWidget *ID, int line,
-                                            const QString& cond)
+void
+file_editor_tab::do_breakpoint_marker (bool insert,
+                                       const QWidget *ID, int line,
+                                       const QString& cond)
 {
   if (ID != this || ID == nullptr)
     return;
@@ -3217,7 +3305,8 @@
     }
 }
 
-void file_editor_tab::center_current_line (bool always)
+void
+file_editor_tab::center_current_line (bool always)
 {
   long int visible_lines
     = m_edit_area->SendScintilla (QsciScintillaBase::SCI_LINESONSCREEN);
@@ -3244,13 +3333,15 @@
     }
 }
 
-void file_editor_tab::handle_lines_changed ()
+void
+file_editor_tab::handle_lines_changed ()
 {
   // the related signal is emitted before cursor-move-signal!
   m_lines_changed = true;
 }
 
-void file_editor_tab::handle_cursor_moved (int line, int col)
+void
+file_editor_tab::handle_cursor_moved (int line, int col)
 {
   // Cursor has moved, first check wether an autocompletion list
   // is active or if it was closed. Scintilla provides signals for
@@ -3281,7 +3372,8 @@
                                o_line, m_ind_char_width);
 }
 
-void file_editor_tab::update_rowcol_indicator (int line, int col)
+void
+file_editor_tab::update_rowcol_indicator (int line, int col)
 {
   m_line = line;
   m_col  = col;
@@ -3293,7 +3385,8 @@
 // It is used for handling line breaking if this is desired.
 // The related signal is emitted after the signal for a moved cursor
 // such that m_col and m_line can not be used for current position.
-void file_editor_tab::handle_char_added (int)
+void
+file_editor_tab::handle_char_added (int)
 {
   if (m_line_break)
     {
@@ -3357,7 +3450,8 @@
 }
 
 // Slot handling a double click into the text area
-void file_editor_tab::handle_double_click (int, int, int modifier)
+void
+file_editor_tab::handle_double_click (int, int, int modifier)
 {
   if (! modifier)
     {
@@ -3431,7 +3525,8 @@
     }
 }
 
-QString file_editor_tab::get_function_name ()
+QString
+file_editor_tab::get_function_name ()
 {
   QRegularExpression rxfun1 {"^[\t ]*function[^=]+=([^\\(]+)\\([^\\)]*\\)[\t ]*$"};
   QRegularExpression rxfun2 {"^[\t ]*function[\t ]+([^\\(]+)\\([^\\)]*\\)[\t ]*$"};
--- a/libgui/src/m-editor/file-editor.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/m-editor/file-editor.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -81,7 +81,8 @@
   setMovable (true);
 }
 
-tab_bar *file_editor_tab_widget::get_tab_bar () const
+tab_bar *
+file_editor_tab_widget::get_tab_bar () const
 {
   return qobject_cast<tab_bar *> (tabBar ());
 }
@@ -113,7 +114,7 @@
 
   m_find_dialog = nullptr;
 
-  m_closed = false;
+  m_closed = true;
   m_no_focus = false;
   m_editor_ready = false;
 
@@ -128,7 +129,8 @@
   setFocusPolicy (Qt::StrongFocus);
 }
 
-void file_editor::focusInEvent (QFocusEvent *e)
+void
+file_editor::focusInEvent (QFocusEvent *e)
 {
   // The focus is transferred to the active tab and its edit
   // area in this focus in event handler. This is to avoid
@@ -142,7 +144,8 @@
 
 // insert global actions, that should also be displayed in the editor window,
 // into the editor's menu and/or toolbar
-void file_editor::insert_global_actions (QList<QAction *> shared_actions)
+void
+file_editor::insert_global_actions (QList<QAction *> shared_actions)
 {
   // actions/menus that have to be added to the toolbar or the menu
   QAction *open_action = shared_actions.at (OPEN_ACTION);
@@ -177,7 +180,8 @@
   m_edit_menu->insertAction (m_find_action, m_find_files_action);
 }
 
-void file_editor::handle_enter_debug_mode ()
+void
+file_editor::handle_enter_debug_mode ()
 {
   gui_settings settings;
 
@@ -192,7 +196,8 @@
   emit enter_debug_mode_signal ();
 }
 
-void file_editor::handle_exit_debug_mode ()
+void
+file_editor::handle_exit_debug_mode ()
 {
   gui_settings settings;
   settings.set_shortcut (m_run_action, sc_edit_run_run_file);
@@ -201,7 +206,8 @@
   emit exit_debug_mode_signal ();
 }
 
-void file_editor::check_actions ()
+void
+file_editor::check_actions ()
 {
   // Do not include shared actions not only related to the editor
   bool have_tabs = m_tab_widget->count () > 0;
@@ -252,7 +258,8 @@
 // 1. At startup, when the editor has to be (really) visible
 //    (Here we can not use the visibility changed signal)
 // 2. When the editor becomes visible when octave is running
-void file_editor::empty_script (bool startup, bool visible)
+void
+file_editor::empty_script (bool startup, bool visible)
 {
 
   if (startup)
@@ -316,8 +323,13 @@
   request_new_file ("");
 }
 
-void file_editor::restore_session ()
+void
+file_editor::restore_session (bool visible)
 {
+
+  if (! visible)
+    return;
+
   gui_settings settings;
 
   //restore previous session
@@ -355,7 +367,8 @@
         continue;
 
       session_data item = { 0, -1, sessionFileNames.at (n),
-                            QString (), QString (), QString ()};
+                            QString (), QString (), QString ()
+                          };
       if (do_lines)
         item.line = session_lines.at (n).toInt ();
       if (do_index)
@@ -377,7 +390,8 @@
                        s_data.at (n).bookmarks);
 }
 
-void file_editor::activate ()
+void
+file_editor::activate ()
 {
   if (m_no_focus)
     return;  // No focus for the editor if external open/close request
@@ -388,7 +402,8 @@
   reset_focus ();
 }
 
-void file_editor::set_focus (QWidget *fet)
+void
+file_editor::set_focus (QWidget *fet)
 {
   setFocus ();
 
@@ -399,7 +414,8 @@
 
 // function enabling/disabling the menu accelerators depending on the
 // focus of the editor
-void file_editor::enable_menu_shortcuts (bool enable)
+void
+file_editor::enable_menu_shortcuts (bool enable)
 {
   // Hide or show the find dialog together with the focus of the
   // editor widget depending on the overall visibility of the find dialog.
@@ -438,7 +454,8 @@
 // Save open files for restoring in next session
 // (even if last session will not be restored next time)
 // together with encoding and the tab index
-void file_editor::save_session ()
+void
+file_editor::save_session ()
 {
   gui_settings settings;
 
@@ -481,7 +498,8 @@
   settings.sync ();
 }
 
-bool file_editor::check_closing ()
+bool
+file_editor::check_closing ()
 {
   // When the application or the editor is closing and the user wants to
   // close all files, in the latter case all editor tabs are checked whether
@@ -531,7 +549,8 @@
   return true;
 }
 
-void file_editor::handle_tab_ready_to_close ()
+void
+file_editor::handle_tab_ready_to_close ()
 {
   if (m_closing_canceled)
     return;
@@ -566,7 +585,8 @@
   setVisible (vis);
 }
 
-void file_editor::request_new_file (const QString& commands)
+void
+file_editor::request_new_file (const QString& commands)
 {
   // Custom editor? If yes, we can only call the editor without passing
   // some initial contents and even without being sure a new file is opened
@@ -583,14 +603,16 @@
   activate ();                              // focus editor and new tab
 }
 
-void file_editor::request_close_file (bool)
+void
+file_editor::request_close_file (bool)
 {
   file_editor_tab *editor_tab
     = static_cast<file_editor_tab *> (m_tab_widget->currentWidget ());
   editor_tab->conditional_close ();
 }
 
-void file_editor::request_close_all_files (bool)
+void
+file_editor::request_close_all_files (bool)
 {
   file_editor_tab *editor_tab;
 
@@ -602,7 +624,8 @@
     }
 }
 
-void file_editor::request_close_other_files (bool)
+void
+file_editor::request_close_other_files (bool)
 {
   file_editor_tab *editor_tab;
   QWidget *tabID = m_tab_widget->currentWidget ();
@@ -619,7 +642,8 @@
     }
 }
 
-void file_editor::copy_full_file_path (bool)
+void
+file_editor::copy_full_file_path (bool)
 {
   file_editor_tab *editor_tab
     = static_cast<file_editor_tab *> (m_tab_widget->currentWidget ());
@@ -629,7 +653,8 @@
 }
 
 // open a file from the mru list
-void file_editor::request_mru_open_file (QAction *action)
+void
+file_editor::request_mru_open_file (QAction *action)
 {
   if (action)
     {
@@ -638,49 +663,58 @@
     }
 }
 
-void file_editor::request_print_file (bool)
+void
+file_editor::request_print_file (bool)
 {
   emit fetab_print_file (m_tab_widget->currentWidget ());
 }
 
-void file_editor::request_redo (bool)
+void
+file_editor::request_redo (bool)
 {
   emit fetab_scintilla_command (m_tab_widget->currentWidget (),
                                 QsciScintillaBase::SCI_REDO);
 }
 
-void file_editor::request_cut (bool)
+void
+file_editor::request_cut (bool)
 {
   emit fetab_scintilla_command (m_tab_widget->currentWidget (),
                                 QsciScintillaBase::SCI_CUT);
 }
 
-void file_editor::request_context_help (bool)
+void
+file_editor::request_context_help (bool)
 {
   emit fetab_context_help (m_tab_widget->currentWidget (), false);
 }
 
-void file_editor::request_context_doc (bool)
+void
+file_editor::request_context_doc (bool)
 {
   emit fetab_context_help (m_tab_widget->currentWidget (), true);
 }
 
-void file_editor::request_context_edit (bool)
+void
+file_editor::request_context_edit (bool)
 {
   emit fetab_context_edit (m_tab_widget->currentWidget ());
 }
 
-void file_editor::request_save_file (bool)
+void
+file_editor::request_save_file (bool)
 {
   emit fetab_save_file (m_tab_widget->currentWidget ());
 }
 
-void file_editor::request_save_file_as (bool)
+void
+file_editor::request_save_file_as (bool)
 {
   emit fetab_save_file_as (m_tab_widget->currentWidget ());
 }
 
-void file_editor::request_run_file (bool)
+void
+file_editor::request_run_file (bool)
 {
   // The interpreter_event callback function below emits a signal.
   // Because we don't control when that happens, use a guarded pointer
@@ -689,7 +723,7 @@
   QPointer<file_editor> this_fe (this);
 
   emit interpreter_event
-    ([=] (interpreter& interp)
+    ([this, this_fe] (interpreter& interp)
      {
        // INTERPRETER THREAD
 
@@ -715,166 +749,196 @@
      });
 }
 
-void file_editor::request_step_into_file ()
+void
+file_editor::request_step_into_file ()
 {
   emit fetab_run_file (m_tab_widget->currentWidget (), true);
 }
 
-void file_editor::request_context_run (bool)
+void
+file_editor::request_context_run (bool)
 {
   emit fetab_context_run (m_tab_widget->currentWidget ());
 }
 
-void file_editor::request_toggle_bookmark (bool)
+void
+file_editor::request_toggle_bookmark (bool)
 {
   emit fetab_toggle_bookmark (m_tab_widget->currentWidget ());
 }
 
-void file_editor::request_next_bookmark (bool)
+void
+file_editor::request_next_bookmark (bool)
 {
   emit fetab_next_bookmark (m_tab_widget->currentWidget ());
 }
 
-void file_editor::request_previous_bookmark (bool)
+void
+file_editor::request_previous_bookmark (bool)
 {
   emit fetab_previous_bookmark (m_tab_widget->currentWidget ());
 }
 
-void file_editor::request_remove_bookmark (bool)
+void
+file_editor::request_remove_bookmark (bool)
 {
   emit fetab_remove_bookmark (m_tab_widget->currentWidget ());
 }
 
-void file_editor::request_move_match_brace (bool)
+void
+file_editor::request_move_match_brace (bool)
 {
   emit fetab_move_match_brace (m_tab_widget->currentWidget (), false);
 }
 
-void file_editor::request_sel_match_brace (bool)
+void
+file_editor::request_sel_match_brace (bool)
 {
   emit fetab_move_match_brace (m_tab_widget->currentWidget (), true);
 }
 
 // FIXME: What should this do with conditional breakpoints?
-void file_editor::request_toggle_breakpoint (bool)
+void
+file_editor::request_toggle_breakpoint (bool)
 {
   emit fetab_toggle_breakpoint (m_tab_widget->currentWidget ());
 }
 
-void file_editor::request_next_breakpoint (bool)
+void
+file_editor::request_next_breakpoint (bool)
 {
   emit fetab_next_breakpoint (m_tab_widget->currentWidget ());
 }
 
-void file_editor::request_previous_breakpoint (bool)
+void
+file_editor::request_previous_breakpoint (bool)
 {
   emit fetab_previous_breakpoint (m_tab_widget->currentWidget ());
 }
 
-void file_editor::request_remove_breakpoint (bool)
+void
+file_editor::request_remove_breakpoint (bool)
 {
   emit fetab_remove_all_breakpoints (m_tab_widget->currentWidget ());
 }
 
 // slots for Edit->Commands actions
-void file_editor::request_delete_start_word (bool)
+void
+file_editor::request_delete_start_word (bool)
 {
   emit fetab_scintilla_command (m_tab_widget->currentWidget (),
                                 QsciScintillaBase::SCI_DELWORDLEFT);
 }
 
-void file_editor::request_delete_end_word (bool)
+void
+file_editor::request_delete_end_word (bool)
 {
   emit fetab_scintilla_command (m_tab_widget->currentWidget (),
                                 QsciScintillaBase::SCI_DELWORDRIGHT);
 }
 
-void file_editor::request_delete_start_line (bool)
+void
+file_editor::request_delete_start_line (bool)
 {
   emit fetab_scintilla_command (m_tab_widget->currentWidget (),
                                 QsciScintillaBase::SCI_DELLINELEFT);
 }
 
-void file_editor::request_delete_end_line (bool)
+void
+file_editor::request_delete_end_line (bool)
 {
   emit fetab_scintilla_command (m_tab_widget->currentWidget (),
                                 QsciScintillaBase::SCI_DELLINERIGHT);
 }
 
-void file_editor::request_delete_line (bool)
+void
+file_editor::request_delete_line (bool)
 {
   emit fetab_scintilla_command (m_tab_widget->currentWidget (),
                                 QsciScintillaBase::SCI_LINEDELETE);
 }
 
-void file_editor::request_copy_line (bool)
+void
+file_editor::request_copy_line (bool)
 {
   emit fetab_scintilla_command (m_tab_widget->currentWidget (),
                                 QsciScintillaBase::SCI_LINECOPY);
 }
 
-void file_editor::request_cut_line (bool)
+void
+file_editor::request_cut_line (bool)
 {
   emit fetab_scintilla_command (m_tab_widget->currentWidget (),
                                 QsciScintillaBase::SCI_LINECUT);
 }
 
-void file_editor::request_duplicate_selection (bool)
+void
+file_editor::request_duplicate_selection (bool)
 {
   emit fetab_scintilla_command (m_tab_widget->currentWidget (),
                                 QsciScintillaBase::SCI_SELECTIONDUPLICATE);
 }
 
-void file_editor::request_transpose_line (bool)
+void
+file_editor::request_transpose_line (bool)
 {
   emit fetab_scintilla_command (m_tab_widget->currentWidget (),
                                 QsciScintillaBase::SCI_LINETRANSPOSE);
 }
 
-void file_editor::request_comment_selected_text (bool)
+void
+file_editor::request_comment_selected_text (bool)
 {
   emit fetab_comment_selected_text (m_tab_widget->currentWidget (), false);
 }
 
-void file_editor::request_uncomment_selected_text (bool)
+void
+file_editor::request_uncomment_selected_text (bool)
 {
   emit fetab_uncomment_selected_text (m_tab_widget->currentWidget ());
 }
 
-void file_editor::request_comment_var_selected_text (bool)
+void
+file_editor::request_comment_var_selected_text (bool)
 {
   emit fetab_comment_selected_text (m_tab_widget->currentWidget (), true);
 }
 
 // slots for Edit->Format actions
-void file_editor::request_upper_case (bool)
+void
+file_editor::request_upper_case (bool)
 {
   emit fetab_scintilla_command (m_tab_widget->currentWidget (),
                                 QsciScintillaBase::SCI_UPPERCASE);
 }
 
-void file_editor::request_lower_case (bool)
+void
+file_editor::request_lower_case (bool)
 {
   emit fetab_scintilla_command (m_tab_widget->currentWidget (),
                                 QsciScintillaBase::SCI_LOWERCASE);
 }
 
-void file_editor::request_indent_selected_text (bool)
+void
+file_editor::request_indent_selected_text (bool)
 {
   emit fetab_indent_selected_text (m_tab_widget->currentWidget ());
 }
 
-void file_editor::request_unindent_selected_text (bool)
+void
+file_editor::request_unindent_selected_text (bool)
 {
   emit fetab_unindent_selected_text (m_tab_widget->currentWidget ());
 }
 
-void file_editor::request_smart_indent_line_or_selected_text ()
+void
+file_editor::request_smart_indent_line_or_selected_text ()
 {
   emit fetab_smart_indent_line_or_selected_text (m_tab_widget->currentWidget ());
 }
 
-void file_editor::request_conv_eol_windows (bool)
+void
+file_editor::request_conv_eol_windows (bool)
 {
   emit fetab_convert_eol (m_tab_widget->currentWidget (),
                           QsciScintilla::EolWindows);
@@ -886,14 +950,16 @@
                           QsciScintilla::EolUnix);
 }
 
-void file_editor::request_conv_eol_mac (bool)
+void
+file_editor::request_conv_eol_mac (bool)
 {
   emit fetab_convert_eol (m_tab_widget->currentWidget (),
                           QsciScintilla::EolMac);
 }
 
 // Slot for initially creating and showing the find dialog
-void file_editor::request_find (bool)
+void
+file_editor::request_find (bool)
 {
   // Create the dialog
   find_create ();
@@ -909,7 +975,8 @@
 
 // This method creates the find dialog.
 
-void file_editor::find_create ()
+void
+file_editor::find_create ()
 {
   if (m_find_dialog)
     m_find_dialog->close ();
@@ -959,31 +1026,36 @@
   m_find_dialog->set_visible (true);
 }
 
-void file_editor::request_find_next (bool)
+void
+file_editor::request_find_next (bool)
 {
   if (m_find_dialog)
     m_find_dialog->find_next ();
 }
 
-void file_editor::request_find_previous (bool)
+void
+file_editor::request_find_previous (bool)
 {
   if (m_find_dialog)
     m_find_dialog->find_prev ();
 }
 
-void file_editor::request_goto_line (bool)
+void
+file_editor::request_goto_line (bool)
 {
   emit fetab_goto_line (m_tab_widget->currentWidget ());
 }
 
-void file_editor::request_completion (bool)
+void
+file_editor::request_completion (bool)
 {
   emit fetab_completion (m_tab_widget->currentWidget ());
 }
 
-void file_editor::handle_file_name_changed (const QString& fname,
-                                            const QString& tip,
-                                            bool modified)
+void
+file_editor::handle_file_name_changed (const QString& fname,
+                                       const QString& tip,
+                                       bool modified)
 {
   QObject *fileEditorTab = sender ();
   if (fileEditorTab)
@@ -1009,7 +1081,8 @@
     }
 }
 
-void file_editor::handle_tab_close_request (int index)
+void
+file_editor::handle_tab_close_request (int index)
 {
   file_editor_tab *editor_tab
     = static_cast<file_editor_tab *> (m_tab_widget->widget (index));
@@ -1042,15 +1115,17 @@
 }
 
 // context menu of edit area
-void file_editor::active_tab_changed (int index)
+void
+file_editor::active_tab_changed (int index)
 {
   emit fetab_change_request (m_tab_widget->widget (index));
   activate ();
 }
 
-void file_editor::handle_editor_state_changed (bool copy_available,
-                                               bool is_octave_file,
-                                               bool is_modified)
+void
+file_editor::handle_editor_state_changed (bool copy_available,
+    bool is_octave_file,
+    bool is_modified)
 {
   // In case there is some scenario where traffic could be coming from
   // all the file editor tabs, just process info from the current active tab.
@@ -1075,8 +1150,9 @@
   m_undo_action_enabled = m_undo_action->isEnabled ();
 }
 
-void file_editor::handle_mru_add_file (const QString& file_name,
-                                       const QString& encoding)
+void
+file_editor::handle_mru_add_file (const QString& file_name,
+                                  const QString& encoding)
 {
   int index;
   while ((index = m_mru_files.indexOf (file_name)) >= 0)
@@ -1091,8 +1167,9 @@
   mru_menu_update ();
 }
 
-void file_editor::check_conflict_save (const QString& saveFileName,
-                                       bool remove_on_success)
+void
+file_editor::check_conflict_save (const QString& saveFileName,
+                                  bool remove_on_success)
 {
   // Check whether this file is already open in the editor.
   file_editor_tab *tab = find_tab_widget (saveFileName);
@@ -1151,14 +1228,16 @@
   emit fetab_save_file (saveFileWidget, saveFileName, remove_on_success);
 }
 
-void file_editor::handle_insert_debugger_pointer_request (const QString& file,
-                                                          int line)
+void
+file_editor::handle_insert_debugger_pointer_request (const QString& file,
+    int line)
 {
   request_open_file (file, QString (), line, true); // default encoding
 }
 
-void file_editor::handle_delete_debugger_pointer_request (const QString& file,
-                                                          int line)
+void
+file_editor::handle_delete_debugger_pointer_request (const QString& file,
+    int line)
 {
   if (! file.isEmpty ())
     {
@@ -1177,23 +1256,26 @@
     }
 }
 
-void file_editor::handle_update_breakpoint_marker_request (bool insert,
-                                                           const QString& file,
-                                                           int line,
-                                                           const QString& cond)
+void
+file_editor::handle_update_breakpoint_marker_request (bool insert,
+    const QString& file,
+    int line,
+    const QString& cond)
 {
   request_open_file (file, QString (), line, false, true, insert, cond);
 }
 
-void file_editor::handle_edit_file_request (const QString& file)
+void
+file_editor::handle_edit_file_request (const QString& file)
 {
   request_open_file (file);
 }
 
 // Slot used for signals indicating that a file was changed/renamed or
 // is going to be deleted/renamed
-void file_editor::handle_file_remove (const QString& old_name,
-                                      const QString& new_name)
+void
+file_editor::handle_file_remove (const QString& old_name,
+                                 const QString& new_name)
 {
   // Clear old list of file data and declare a structure for file data
   m_tmp_closed_files.clear ();
@@ -1255,7 +1337,8 @@
 }
 
 // Slot for signal indicating that a file was renamed
-void file_editor::handle_file_renamed (bool load_new)
+void
+file_editor::handle_file_renamed (bool load_new)
 {
   m_no_focus = true;  // Remember for not focussing editor
 
@@ -1286,7 +1369,8 @@
   m_tmp_closed_files.clear ();
 }
 
-void file_editor::notice_settings ()
+void
+file_editor::notice_settings ()
 {
   gui_settings settings;
 
@@ -1393,7 +1477,8 @@
   emit fetab_settings_changed ();
 }
 
-void file_editor::set_shortcuts ()
+void
+file_editor::set_shortcuts ()
 {
   // Shortcuts also available in the main window, as well as the related
   // shortcuts, are defined in main_window and added to the editor
@@ -1487,7 +1572,8 @@
 // This slot is a reimplementation of the virtual slot in octave_dock_widget.
 // We need this for creating an empty script when the editor has no open
 // files and is made visible.
-void file_editor::handle_visibility (bool visible)
+void
+file_editor::handle_visibility (bool visible)
 {
   octave_dock_widget::handle_visibility (visible);
 
@@ -1498,7 +1584,7 @@
     {
       m_closed = false;
 
-      restore_session ();
+      restore_session (visible);
     }
 
   empty_script (false, visible);
@@ -1506,7 +1592,8 @@
 
 // This slot is a reimplementation of the virtual slot in octave_dock_widget.
 // We need this for updating the parent of the find dialog
-void file_editor::toplevel_change (bool)
+void
+file_editor::toplevel_change (bool)
 {
   if (m_find_dialog)
     {
@@ -1519,34 +1606,39 @@
     }
 }
 
-void file_editor::update_octave_directory (const QString& dir)
+void
+file_editor::update_octave_directory (const QString& dir)
 {
   m_ced = dir;
   emit fetab_set_directory (m_ced);  // for save dialog
 }
 
-void file_editor::copyClipboard ()
+void
+file_editor::copyClipboard ()
 {
   if (editor_tab_has_focus ())
     emit fetab_scintilla_command (m_tab_widget->currentWidget (),
                                   QsciScintillaBase::SCI_COPY);
 }
 
-void file_editor::pasteClipboard ()
+void
+file_editor::pasteClipboard ()
 {
   if (editor_tab_has_focus ())
     emit fetab_scintilla_command (m_tab_widget->currentWidget (),
                                   QsciScintillaBase::SCI_PASTE);
 }
 
-void file_editor::selectAll ()
+void
+file_editor::selectAll ()
 {
   if (editor_tab_has_focus ())
     emit fetab_scintilla_command (m_tab_widget->currentWidget (),
                                   QsciScintillaBase::SCI_SELECTALL);
 }
 
-void file_editor::do_undo ()
+void
+file_editor::do_undo ()
 {
   if (editor_tab_has_focus ())
     emit fetab_scintilla_command (m_tab_widget->currentWidget (),
@@ -1555,12 +1647,13 @@
 
 // Open a file, if not already open, and mark the current execution location
 // and/or a breakpoint with condition cond.
-void file_editor::request_open_file (const QString& openFileName,
-                                     const QString& encoding,
-                                     int line, bool debug_pointer,
-                                     bool breakpoint_marker, bool insert,
-                                     const QString& cond, int index,
-                                     const QString& bookmarks)
+void
+file_editor::request_open_file (const QString& openFileName,
+                                const QString& encoding,
+                                int line, bool debug_pointer,
+                                bool breakpoint_marker, bool insert,
+                                const QString& cond, int index,
+                                const QString& bookmarks)
 {
   gui_settings settings;
 
@@ -1761,72 +1854,86 @@
     }
 }
 
-void file_editor::request_preferences (bool)
+void
+file_editor::request_preferences (bool)
 {
   emit request_settings_dialog ("editor");
 }
 
-void file_editor::request_styles_preferences (bool)
+void
+file_editor::request_styles_preferences (bool)
 {
   emit request_settings_dialog ("editor_styles");
 }
 
-void file_editor::show_line_numbers (bool)
+void
+file_editor::show_line_numbers (bool)
 {
   toggle_preference (ed_show_line_numbers);
 }
 
-void file_editor::show_white_space (bool)
+void
+file_editor::show_white_space (bool)
 {
   toggle_preference (ed_show_white_space);
 }
 
-void file_editor::show_eol_chars (bool)
+void
+file_editor::show_eol_chars (bool)
 {
   toggle_preference (ed_show_eol_chars);
 }
 
-void file_editor::show_indent_guides (bool)
+void
+file_editor::show_indent_guides (bool)
 {
   toggle_preference (ed_show_indent_guides);
 }
 
-void file_editor::show_long_line (bool)
+void
+file_editor::show_long_line (bool)
 {
   toggle_preference (ed_long_line_marker);
 }
 
-void file_editor::show_toolbar (bool)
+void
+file_editor::show_toolbar (bool)
 {
   toggle_preference (ed_show_toolbar);
 }
 
-void file_editor::show_statusbar (bool)
+void
+file_editor::show_statusbar (bool)
 {
   toggle_preference (ed_show_edit_status_bar);
 }
 
-void file_editor::show_hscrollbar (bool)
+void
+file_editor::show_hscrollbar (bool)
 {
   toggle_preference (ed_show_hscroll_bar);
 }
 
-void file_editor::zoom_in (bool)
+void
+file_editor::zoom_in (bool)
 {
   emit fetab_zoom_in (m_tab_widget->currentWidget ());
 }
 
-void file_editor::zoom_out (bool)
+void
+file_editor::zoom_out (bool)
 {
   emit fetab_zoom_out (m_tab_widget->currentWidget ());
 }
 
-void file_editor::zoom_normal (bool)
+void
+file_editor::zoom_normal (bool)
 {
   emit fetab_zoom_normal (m_tab_widget->currentWidget ());
 }
 
-void file_editor::create_context_menu (QMenu *menu)
+void
+file_editor::create_context_menu (QMenu *menu)
 {
   // remove all standard actions from scintilla
   QList<QAction *> all_actions = menu->actions ();
@@ -1853,7 +1960,8 @@
   menu->addAction (m_run_selection_action);
 }
 
-void file_editor::edit_status_update (bool undo, bool redo)
+void
+file_editor::edit_status_update (bool undo, bool redo)
 {
   if (m_undo_action)
     m_undo_action->setEnabled (undo);
@@ -1861,7 +1969,8 @@
 }
 
 // handler for the close event
-void file_editor::closeEvent (QCloseEvent *e)
+void
+file_editor::closeEvent (QCloseEvent *e)
 {
   gui_settings settings;
 
@@ -1887,7 +1996,8 @@
   octave_dock_widget::closeEvent (e);
 }
 
-void file_editor::dragEnterEvent (QDragEnterEvent *e)
+void
+file_editor::dragEnterEvent (QDragEnterEvent *e)
 {
   if (e->mimeData ()->hasUrls ())
     {
@@ -1895,7 +2005,8 @@
     }
 }
 
-void file_editor::dropEvent (QDropEvent *e)
+void
+file_editor::dropEvent (QDropEvent *e)
 {
   if (e->mimeData ()->hasUrls ())
     {
@@ -1904,7 +2015,8 @@
     }
 }
 
-bool file_editor::is_editor_console_tabbed ()
+bool
+file_editor::is_editor_console_tabbed ()
 {
   // FIXME: is there a way to do this job that doesn't require casting
   // the parent to a main_window object?
@@ -1927,7 +2039,8 @@
   return false;
 }
 
-void file_editor::construct ()
+void
+file_editor::construct ()
 {
   QWidget *editor_widget = new QWidget (this);
 
@@ -2417,7 +2530,8 @@
 }
 
 // Slot when autocompletion list was cancelled
-void file_editor::handle_autoc_cancelled ()
+void
+file_editor::handle_autoc_cancelled ()
 {
   // List was cancelled but somehow still active and blocking the
   // edit area from accepting shortcuts. Only after another keypress
@@ -2441,7 +2555,8 @@
     qsci->undo ();
 }
 
-file_editor_tab *file_editor::reset_focus ()
+file_editor_tab *
+file_editor::reset_focus ()
 {
   // Reset the focus of the tab and the related edit area
   file_editor_tab *f
@@ -2499,7 +2614,7 @@
            this, &file_editor::handle_mru_add_file);
 
   connect (f, &file_editor_tab::request_open_file,
-           this, [=] (const QString& fname, const QString& encoding) { request_open_file (fname, encoding); });
+           this, [this] (const QString& fname, const QString& encoding) { request_open_file (fname, encoding); });
 
   connect (f, &file_editor_tab::edit_area_changed,
            this, &file_editor::edit_area_changed);
@@ -2509,7 +2624,7 @@
 
   // Signals from the file_editor or main-win non-trivial operations
   connect (this, &file_editor::fetab_settings_changed,
-           f, [=] () { f->notice_settings (); });
+           f, [f] () { f->notice_settings (); });
 
   connect (this, &file_editor::fetab_change_request,
            f, &file_editor_tab::change_editor_state);
@@ -2650,8 +2765,9 @@
   return f;
 }
 
-void file_editor::add_file_editor_tab (file_editor_tab *f, const QString& fn,
-                                       int index)
+void
+file_editor::add_file_editor_tab (file_editor_tab *f, const QString& fn,
+                                  int index)
 {
   if (index == -1)
     m_tab_widget->addTab (f, fn);
@@ -2663,7 +2779,8 @@
   check_actions ();
 }
 
-void file_editor::mru_menu_update ()
+void
+file_editor::mru_menu_update ()
 {
   int num_files = qMin (m_mru_files.size (), int (MaxMRUFiles));
 
@@ -2702,14 +2819,15 @@
   settings.sync ();
 }
 
-bool file_editor::call_custom_editor (const QString& file_name, int line)
+bool
+file_editor::call_custom_editor (const QString& file_name, int line)
 {
   // Check if the user wants to use a custom file editor.
 
   gui_settings settings;
 
   if (settings.value (global_use_custom_editor.settings_key (),
-                       global_use_custom_editor.def ()).toBool ())
+                      global_use_custom_editor.def ()).toBool ())
     {
       // use the external editor interface for handling the call
       emit request_open_file_external (file_name, line);
@@ -2724,7 +2842,8 @@
   return false;
 }
 
-void file_editor::toggle_preference (const gui_pref& preference)
+void
+file_editor::toggle_preference (const gui_pref& preference)
 {
   gui_settings settings;
 
@@ -2734,8 +2853,9 @@
 }
 
 // Function for closing the files in a removed directory
-void file_editor::handle_dir_remove (const QString& old_name,
-                                     const QString& new_name)
+void
+file_editor::handle_dir_remove (const QString& old_name,
+                                const QString& new_name)
 {
   QDir old_dir (old_name);
   removed_file_data f_data;
@@ -2802,7 +2922,8 @@
     }
 }
 
-bool file_editor::editor_tab_has_focus ()
+bool
+file_editor::editor_tab_has_focus ()
 {
   QWidget *foc_w = focusWidget ();
   if (foc_w && foc_w->inherits ("octave::octave_qscintilla"))
@@ -2811,7 +2932,8 @@
 }
 
 // Check whether this file is already open in the editor.
-file_editor_tab *file_editor::find_tab_widget (const QString& file)
+file_editor_tab *
+file_editor::find_tab_widget (const QString& file)
 {
   std::string std_file = file.toStdString ();
 
@@ -2835,16 +2957,18 @@
   return nullptr;
 }
 
-QAction * file_editor::add_action (QMenu *menu, const QString& text,
-                                   const char *member,
-                                   QWidget *receiver)
+QAction *
+file_editor::add_action (QMenu *menu, const QString& text,
+                         const char *member,
+                         QWidget *receiver)
 {
   return add_action (menu, QIcon (), text, member, receiver);
 }
 
-QAction * file_editor::add_action (QMenu *menu, const QIcon& icon,
-                                   const QString& text, const char *member,
-                                   QWidget *receiver)
+QAction *
+file_editor::add_action (QMenu *menu, const QIcon& icon,
+                         const QString& text, const char *member,
+                         QWidget *receiver)
 {
   QAction *a;
   QWidget *r = this;
@@ -2866,7 +2990,8 @@
   return a;
 }
 
-QMenu* file_editor::add_menu (QMenuBar *p, QString name)
+QMenu *
+file_editor::add_menu (QMenuBar *p, QString name)
 {
   QMenu *menu = p->addMenu (name);
 
--- a/libgui/src/m-editor/file-editor.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/m-editor/file-editor.h	Mon Feb 26 23:30:33 2024 -0500
@@ -124,7 +124,7 @@
 
   void check_actions ();
   void empty_script (bool startup, bool visible);
-  void restore_session ();
+  void restore_session (bool visible = true);
 
 signals:
 
--- a/libgui/src/m-editor/find-dialog.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/m-editor/find-dialog.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -108,9 +108,9 @@
   m_replace_line_edit->completer ()->setCaseSensitivity (Qt::CaseSensitive);
   m_replace_label->setBuddy (m_replace_line_edit);
 
-   int width = QFontMetrics (m_search_line_edit->font ()).averageCharWidth();
-   m_search_line_edit->setFixedWidth (20*width);
-   m_replace_line_edit->setFixedWidth (20*width);
+  int width = QFontMetrics (m_search_line_edit->font ()).averageCharWidth();
+  m_search_line_edit->setFixedWidth (20*width);
+  m_replace_line_edit->setFixedWidth (20*width);
 
   m_case_check_box = new QCheckBox (tr ("Match &case"));
   m_from_start_check_box = new QCheckBox (tr ("Search from &start"));
@@ -203,7 +203,8 @@
 }
 
 // The edit_area has changed: update relevant data of the file dialog
-void find_dialog::update_edit_area (octave_qscintilla *edit_area)
+void
+find_dialog::update_edit_area (octave_qscintilla *edit_area)
 {
   m_edit_area = edit_area;
   m_search_selection_check_box->setEnabled (edit_area->hasSelectedText ());
@@ -213,7 +214,8 @@
            Qt::UniqueConnection);
 }
 
-void find_dialog::save_settings ()
+void
+find_dialog::save_settings ()
 {
   gui_settings settings;
 
@@ -260,7 +262,8 @@
   settings.sync ();
 }
 
-void find_dialog::restore_settings (QPoint ed_bottom_right)
+void
+find_dialog::restore_settings (QPoint ed_bottom_right)
 {
   gui_settings settings;
 
@@ -305,7 +308,8 @@
 }
 
 // set text of "search from start" depending on backward search
-void find_dialog::handle_backward_search_changed (int backward)
+void
+find_dialog::handle_backward_search_changed (int backward)
 {
   if (backward)
     m_from_start_check_box->setText (tr ("Search from end"));
@@ -314,7 +318,8 @@
 }
 
 // search text has changed: reset the search
-void find_dialog::handle_search_text_changed ()
+void
+find_dialog::handle_search_text_changed ()
 {
   // Return if nothing has changed
   if (m_search_line_edit->currentText () == m_search_line_edit->itemText (0))
@@ -327,7 +332,8 @@
 }
 
 // replaced text has changed: reset the search
-void find_dialog::handle_replace_text_changed ()
+void
+find_dialog::handle_replace_text_changed ()
 {
   // Return if nothing has changed
   if (m_replace_line_edit->currentText () == m_replace_line_edit->itemText (0))
@@ -337,7 +343,8 @@
 }
 
 // Update the mru list
-void find_dialog::mru_update (QComboBox *mru)
+void
+find_dialog::mru_update (QComboBox *mru)
 {
   // Remove possible empty entries from the mru list
   int index;
@@ -363,13 +370,15 @@
   mru->setCurrentIndex (0);
 }
 
-void find_dialog::handle_sel_search_changed (int selected)
+void
+find_dialog::handle_sel_search_changed (int selected)
 {
   m_from_start_check_box->setEnabled (! selected);
   m_find_result_available = false;
 }
 
-void find_dialog::handle_selection_changed (bool has_selected)
+void
+find_dialog::handle_selection_changed (bool has_selected)
 {
   if (m_rep_active)
     return;
@@ -379,7 +388,8 @@
 }
 
 // initialize search text with selected text if this is in one single line
-void find_dialog::init_search_text ()
+void
+find_dialog::init_search_text ()
 {
   if (m_edit_area && m_edit_area->hasSelectedText ())
     {
@@ -398,17 +408,20 @@
   m_find_next_button->setDefault (true);
 }
 
-void find_dialog::find_next ()
+void
+find_dialog::find_next ()
 {
   find (! m_backward_check_box->isChecked ());
 }
 
-void find_dialog::find_prev ()
+void
+find_dialog::find_prev ()
 {
   find (m_backward_check_box->isChecked ());
 }
 
-void find_dialog::find (bool forward)
+void
+find_dialog::find (bool forward)
 {
   if (! m_edit_area)
     return;
@@ -561,7 +574,8 @@
 
 }
 
-void find_dialog::do_replace ()
+void
+find_dialog::do_replace ()
 {
   if (m_edit_area)
     {
@@ -580,7 +594,8 @@
     }
 }
 
-void find_dialog::replace ()
+void
+find_dialog::replace ()
 {
   if (m_edit_area)
     {
@@ -594,7 +609,8 @@
     }
 }
 
-void find_dialog::replace_all ()
+void
+find_dialog::replace_all ()
 {
   int line, col;
 
@@ -629,19 +645,22 @@
     }
 }
 
-void find_dialog::no_matches_message ()
+void
+find_dialog::no_matches_message ()
 {
   QMessageBox msg_box (QMessageBox::Information, tr ("Find Result"),
                        tr ("No more matches found"), QMessageBox::Ok, this);
   msg_box.exec ();
 }
 
-void find_dialog::reject ()
+void
+find_dialog::reject ()
 {
   close ();
 }
 
-void find_dialog::closeEvent (QCloseEvent *e)
+void
+find_dialog::closeEvent (QCloseEvent *e)
 {
   save_settings ();
   e->accept ();
@@ -649,7 +668,8 @@
 
 // Show and hide with (re-)storing position, otherwise there is always
 // a small shift each time the dialog is shown again
-void find_dialog::set_visible (bool visible)
+void
+find_dialog::set_visible (bool visible)
 {
   if (visible)
     {
--- a/libgui/src/m-editor/marker.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/m-editor/marker.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -36,7 +36,7 @@
 marker::marker (QsciScintilla *area, int original_linenr,
                 editor_markers type, int editor_linenr,
                 const QString& condition)
-: QObject ()
+  : QObject ()
 {
   construct (area, original_linenr, type, editor_linenr, condition);
 }
@@ -48,9 +48,10 @@
   construct (area, original_linenr, type, original_linenr - 1, condition);
 }
 
-void marker::construct (QsciScintilla *area, int original_linenr,
-                        editor_markers type, int editor_linenr,
-                        const QString& condition)
+void
+marker::construct (QsciScintilla *area, int original_linenr,
+                   editor_markers type, int editor_linenr,
+                   const QString& condition)
 {
   m_edit_area = area;
   m_original_linenr = original_linenr;
@@ -59,7 +60,8 @@
   m_condition = condition;
 }
 
-void marker::handle_remove_via_original_linenr (int linenr)
+void
+marker::handle_remove_via_original_linenr (int linenr)
 {
   if (m_original_linenr == linenr)
     {
@@ -68,7 +70,8 @@
     }
 }
 
-void marker::handle_request_remove_via_editor_linenr (int linenr)
+void
+marker::handle_request_remove_via_editor_linenr (int linenr)
 {
   // Get line number from the edit area and if it matches
   // the requested line number, remove.
@@ -81,14 +84,16 @@
     }
 }
 
-void marker::handle_remove ()
+void
+marker::handle_remove ()
 {
   m_edit_area->markerDeleteHandle (m_mhandle);
   delete this;
 }
 
-void marker::handle_find_translation (int linenr, int& translation_linenr,
-                                      marker *&bp)
+void
+marker::handle_find_translation (int linenr, int& translation_linenr,
+                                 marker *&bp)
 {
   if (m_original_linenr == linenr)
     {
@@ -97,8 +102,9 @@
     }
 }
 
-void marker::handle_find_just_before (int linenr, int& original_linenr,
-                                      int& editor_linenr)
+void
+marker::handle_find_just_before (int linenr, int& original_linenr,
+                                 int& editor_linenr)
 {
   if (m_original_linenr < linenr && m_original_linenr >= original_linenr)
     {
@@ -107,8 +113,9 @@
     }
 }
 
-void marker::handle_find_just_after (int linenr, int& original_linenr,
-                                     int& editor_linenr)
+void
+marker::handle_find_just_after (int linenr, int& original_linenr,
+                                int& editor_linenr)
 {
   if (m_original_linenr > linenr && m_original_linenr <= original_linenr)
     {
@@ -117,14 +124,15 @@
     }
 }
 
-void marker::handle_report_editor_linenr (QIntList& lines,
-                                          QStringList& conditions)
+void
+marker::handle_report_editor_linenr (QIntList& lines, QStringList& conditions)
 {
   lines << m_edit_area->markerLine (m_mhandle);
   conditions << m_condition;
 }
 
-void marker::handle_marker_line_deleted (int mhandle)
+void
+marker::handle_marker_line_deleted (int mhandle)
 {
   // FUTURE SUPPORT: There really should be a signal in QsciScintilla
   // called markerLineDeleted (int mhandle) because there is no way
@@ -144,7 +152,8 @@
     }
 }
 
-void marker::handle_marker_line_undeleted (int mhandle)
+void
+marker::handle_marker_line_undeleted (int mhandle)
 {
   // FUTURE SUPPORT: There really should be a signal in QsciScintilla
   // called markerLineUndeleted (int mhandle) because there is no way
--- a/libgui/src/m-editor/marker.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/m-editor/marker.h	Mon Feb 26 23:30:33 2024 -0500
@@ -51,15 +51,15 @@
   // If multiple markers are on the same line, the first one listed
   // is drawn at the back, so big ones should be first.
   enum editor_markers
-    {
-      breakpoint,
-      cond_break,
-      unsure_breakpoint,
-      bookmark,
-      debugger_position,
-      unsure_debugger_position,
-      selection
-    };
+  {
+    breakpoint,
+    cond_break,
+    unsure_breakpoint,
+    bookmark,
+    debugger_position,
+    unsure_debugger_position,
+    selection
+  };
 
   marker (QsciScintilla *edit_area, int original_linenr,
           editor_markers marker_type, const QString& condition = "");
--- a/libgui/src/m-editor/octave-qscintilla.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/m-editor/octave-qscintilla.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -232,13 +232,15 @@
   emit status_update (isUndoAvailable (), isRedoAvailable ());
 }
 
-void octave_qscintilla::setCursorPosition (int line, int col)
+void
+octave_qscintilla::setCursorPosition (int line, int col)
 {
   QsciScintilla::setCursorPosition (line, col);
   emit update_rowcol_indicator_signal (line, col);
 }
 
-void octave_qscintilla::set_selection_marker_color (const QColor& c)
+void
+octave_qscintilla::set_selection_marker_color (const QColor& c)
 {
   QColor ic = c;
   ic.setAlphaF (0.45);
@@ -250,7 +252,8 @@
 }
 
 // context menu requested
-void octave_qscintilla::contextMenuEvent (QContextMenuEvent *e)
+void
+octave_qscintilla::contextMenuEvent (QContextMenuEvent *e)
 {
 #if defined (HAVE_QSCI_VERSION_2_6_0)
   QPoint global_pos, local_pos;                         // the menu's position
@@ -333,14 +336,15 @@
 }
 
 // common function with flag for documentation
-void octave_qscintilla::contextmenu_help_doc (bool documentation)
+void
+octave_qscintilla::contextmenu_help_doc (bool documentation)
 {
   if (documentation)
     {
       std::string name = m_word_at_cursor.toStdString ();
 
       emit interpreter_event
-        ([=] (interpreter& interp)
+        ([name] (interpreter& interp)
          {
            // INTERPRETER THREAD
 
@@ -352,14 +356,16 @@
 }
 
 // call edit the function related to the current word
-void octave_qscintilla::context_edit ()
+void
+octave_qscintilla::context_edit ()
 {
   if (get_actual_word ())
     contextmenu_edit (true);
 }
 
 // call edit the function related to the current word
-void octave_qscintilla::context_run ()
+void
+octave_qscintilla::context_run ()
 {
   if (hasSelectedText ())
     {
@@ -371,8 +377,9 @@
     }
 }
 
-void octave_qscintilla::get_global_textcursor_pos (QPoint *global_pos,
-                                                   QPoint *local_pos)
+void
+octave_qscintilla::get_global_textcursor_pos (QPoint *global_pos,
+    QPoint *local_pos)
 {
   long position = SendScintilla (SCI_GETCURRENTPOS);
   long point_x  = SendScintilla (SCI_POINTXFROMPOSITION, 0, position);
@@ -382,7 +389,8 @@
 }
 
 // determine the actual word and whether we are in an octave or matlab script
-bool octave_qscintilla::get_actual_word ()
+bool
+octave_qscintilla::get_actual_word ()
 {
   QPoint global_pos, local_pos;
   get_global_textcursor_pos (&global_pos, &local_pos);
@@ -393,7 +401,8 @@
 }
 
 // helper function for clearing all indicators of a specific style
-void octave_qscintilla::clear_selection_markers ()
+void
+octave_qscintilla::clear_selection_markers ()
 {
   int end_pos = text ().length ();
   int end_line, end_col;
@@ -403,7 +412,8 @@
   markerDeleteAll (marker::selection);
 }
 
-QString octave_qscintilla::eol_string ()
+QString
+octave_qscintilla::eol_string ()
 {
   switch (eolMode ())
     {
@@ -421,7 +431,8 @@
 
 // Function returning the true cursor position where the tab length
 // is taken into account.
-void octave_qscintilla::get_current_position (int *pos, int *line, int *col)
+void
+octave_qscintilla::get_current_position (int *pos, int *line, int *col)
 {
   *pos = SendScintilla (QsciScintillaBase::SCI_GETCURRENTPOS);
   *line = SendScintilla (QsciScintillaBase::SCI_LINEFROMPOSITION, *pos);
@@ -429,7 +440,8 @@
 }
 
 // Function returning the comment string of the current lexer
-QStringList octave_qscintilla::comment_string (bool comment)
+QStringList
+octave_qscintilla::comment_string (bool comment)
 {
   int lexer = SendScintilla (SCI_GETLEXER);
 
@@ -494,7 +506,8 @@
 }
 
 // provide the style at a specific position
-int octave_qscintilla::get_style (int pos)
+int
+octave_qscintilla::get_style (int pos)
 {
   int position;
   if (pos < 0)
@@ -507,7 +520,8 @@
 }
 
 // Is a specific cursor position in a line or block comment?
-int octave_qscintilla::is_style_comment (int pos)
+int
+octave_qscintilla::is_style_comment (int pos)
 {
   int lexer = SendScintilla (QsciScintillaBase::SCI_GETLEXER);
   int style = get_style (pos);
@@ -549,8 +563,9 @@
 }
 
 // Do smart indentation after if, for, ...
-void octave_qscintilla::smart_indent (bool do_smart_indent, int do_auto_close,
-                                      int line, int ind_char_width)
+void
+octave_qscintilla::smart_indent (bool do_smart_indent, int do_auto_close,
+                                 int line, int ind_char_width)
 {
   QString prevline = text (line);
 
@@ -665,8 +680,9 @@
 }
 
 // Do smart indentation of current selection or line.
-void octave_qscintilla::smart_indent_line_or_selected_text (int lineFrom,
-                                                            int lineTo)
+void
+octave_qscintilla::smart_indent_line_or_selected_text (int lineFrom,
+    int lineTo)
 {
   QRegularExpression blank_line_regexp {"^[\t ]*$"};
 
@@ -787,7 +803,8 @@
     }
 }
 
-void octave_qscintilla::set_word_selection (const QString& word)
+void
+octave_qscintilla::set_word_selection (const QString& word)
 {
   m_selection = word;
 
@@ -809,7 +826,8 @@
     }
 }
 
-void octave_qscintilla::show_selection_markers (int l1, int c1, int l2, int c2)
+void
+octave_qscintilla::show_selection_markers (int l1, int c1, int l2, int c2)
 {
   fillIndicatorRange (l1, c1, l2, c2, m_indicator_id);
 
@@ -817,28 +835,33 @@
     markerAdd (l1, marker::selection);
 }
 
-void octave_qscintilla::contextmenu_help (bool)
+void
+octave_qscintilla::contextmenu_help (bool)
 {
   contextmenu_help_doc (false);
 }
 
-void octave_qscintilla::contextmenu_doc (bool)
+void
+octave_qscintilla::contextmenu_doc (bool)
 {
   contextmenu_help_doc (true);
 }
 
-void octave_qscintilla::context_help_doc (bool documentation)
+void
+octave_qscintilla::context_help_doc (bool documentation)
 {
   if (get_actual_word ())
     contextmenu_help_doc (documentation);
 }
 
-void octave_qscintilla::contextmenu_edit (bool)
+void
+octave_qscintilla::contextmenu_edit (bool)
 {
   emit context_menu_edit_signal (m_word_at_cursor);
 }
 
-void octave_qscintilla::contextmenu_run_temp_error ()
+void
+octave_qscintilla::contextmenu_run_temp_error ()
 {
   QMessageBox::critical (this, tr ("Octave Editor"),
                          tr ("Creating temporary files failed.\n"
@@ -847,7 +870,8 @@
                              "\"Run Selection\" requires temporary files.").arg (QDir::tempPath ()));
 }
 
-void octave_qscintilla::contextmenu_run (bool)
+void
+octave_qscintilla::contextmenu_run (bool)
 {
   // Take selected code and extend it by commands for echoing each
   // evaluated line and for adding the line to the history (use script)
@@ -914,7 +938,7 @@
 
   // Add commands to the history
   emit interpreter_event
-    ([=] (interpreter& interp)
+    ([tmp_hist] (interpreter& interp)
       {
         // INTERPRETER THREAD
 
@@ -941,7 +965,7 @@
 
   // Let the interpreter execute the tmp file
   emit interpreter_event
-    ([=] (interpreter& interp)
+    ([this, this_oq, tmp_file, tmp_hist, show_dbg_file] (interpreter& interp)
      {
        // INTERPRETER THREAD
 
@@ -1079,7 +1103,7 @@
     tmp_hist->remove ();
 
   emit interpreter_event
-    ([=] (interpreter& interp)
+    ([dbg, auto_repeat] (interpreter& interp)
      {
        // INTERPRETER THREAD
        if (dbg)
@@ -1090,7 +1114,8 @@
 // wrappers for dbstop related context menu items
 
 // FIXME: Why can't the data be sent as the argument to the function???
-void octave_qscintilla::contextmenu_break_condition (bool)
+void
+octave_qscintilla::contextmenu_break_condition (bool)
 {
 #if defined (HAVE_QSCI_VERSION_2_6_0)
   QAction *action = qobject_cast<QAction *>(sender ());
@@ -1104,7 +1129,8 @@
 #endif
 }
 
-void octave_qscintilla::contextmenu_break_once (const QPoint& local_pos)
+void
+octave_qscintilla::contextmenu_break_once (const QPoint& local_pos)
 {
 #if defined (HAVE_QSCI_VERSION_2_6_0)
   emit context_menu_break_once (lineAt (local_pos));
@@ -1113,12 +1139,14 @@
 #endif
 }
 
-void octave_qscintilla::text_changed ()
+void
+octave_qscintilla::text_changed ()
 {
   emit status_update (isUndoAvailable (), isRedoAvailable ());
 }
 
-void octave_qscintilla::cursor_position_changed (int line, int col)
+void
+octave_qscintilla::cursor_position_changed (int line, int col)
 {
   // Clear the selection if we move away from it.  We have to check the
   // position, because we allow entering text at the point of the
@@ -1131,14 +1159,16 @@
 }
 
 // when edit area gets focus update information on undo/redo actions
-void octave_qscintilla::focusInEvent (QFocusEvent *focusEvent)
+void
+octave_qscintilla::focusInEvent (QFocusEvent *focusEvent)
 {
   emit status_update (isUndoAvailable (), isRedoAvailable ());
 
   QsciScintilla::focusInEvent (focusEvent);
 }
 
-void octave_qscintilla::show_replace_action_tooltip ()
+void
+octave_qscintilla::show_replace_action_tooltip ()
 {
   int pos;
   get_current_position (&pos, &m_selection_line, &m_selection_col);
@@ -1167,8 +1197,9 @@
   QToolTip::showText (global_pos, msg);
 }
 
-void octave_qscintilla::replace_all (const QString& o_str, const QString& n_str,
-                                     bool re, bool cs, bool wo)
+void
+octave_qscintilla::replace_all (const QString& o_str, const QString& n_str,
+                                bool re, bool cs, bool wo)
 {
   // get the resulting cursor position
   int pos, line, col, nline, ncol;
@@ -1208,7 +1239,8 @@
   setCursorPosition (line, col);
 }
 
-bool octave_qscintilla::event (QEvent *e)
+bool
+octave_qscintilla::event (QEvent *e)
 {
   if (m_debug_mode && e->type() == QEvent::ToolTip)
     {
@@ -1226,7 +1258,8 @@
   return QsciScintilla::event(e);
 }
 
-void octave_qscintilla::keyPressEvent (QKeyEvent *key_event)
+void
+octave_qscintilla::keyPressEvent (QKeyEvent *key_event)
 {
   if (m_selection.isEmpty ())
     QsciScintilla::keyPressEvent (key_event);
@@ -1283,8 +1316,9 @@
     }
 }
 
-void octave_qscintilla::auto_close (int auto_endif, int linenr,
-                                    const QString& line, QString& first_word)
+void
+octave_qscintilla::auto_close (int auto_endif, int linenr,
+                               const QString& line, QString& first_word)
 {
   // Insert an "end" for an "if" etc., if needed.
   // (Use of "while" allows "return" to skip the rest.
@@ -1367,7 +1401,8 @@
   setIndentation (linenr + 2, indentation (linenr));
 }
 
-void octave_qscintilla::dragEnterEvent (QDragEnterEvent *e)
+void
+octave_qscintilla::dragEnterEvent (QDragEnterEvent *e)
 {
   // if is not dragging a url, pass to qscintilla to handle,
   // otherwise ignore it so that it will be handled by
@@ -1382,12 +1417,14 @@
     }
 }
 
-void octave_qscintilla::handle_enter_debug_mode ()
+void
+octave_qscintilla::handle_enter_debug_mode ()
 {
   m_debug_mode = true;
 }
 
-void octave_qscintilla::handle_exit_debug_mode ()
+void
+octave_qscintilla::handle_exit_debug_mode ()
 {
   m_debug_mode = false;
 }
--- a/libgui/src/m-editor/octave-qscintilla.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/m-editor/octave-qscintilla.h	Mon Feb 26 23:30:33 2024 -0500
@@ -50,11 +50,11 @@
   ~octave_qscintilla () = default;
 
   enum
-    {
-      ST_NONE = 0,
-      ST_LINE_COMMENT,
-      ST_BLOCK_COMMENT
-    };
+  {
+    ST_NONE = 0,
+    ST_LINE_COMMENT,
+    ST_BLOCK_COMMENT
+  };
 
   virtual void contextMenuEvent (QContextMenuEvent *e);
   virtual void setCursorPosition (int line, int col);
--- a/libgui/src/m-editor/octave-txt-lexer.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/m-editor/octave-txt-lexer.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -43,12 +43,14 @@
     return QString ();
 };
 
-const char * octave_txt_lexer::language () const
+const char *
+octave_txt_lexer::language () const
 {
   return "Text";
 }
 
-const char * octave_txt_lexer::lexer () const
+const char *
+octave_txt_lexer::lexer () const
 {
   return "text";
 }
--- a/libgui/src/main-window.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/main-window.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -200,7 +200,8 @@
 
 main_window::~main_window () { }
 
-void main_window::adopt_dock_widgets ()
+void
+main_window::adopt_dock_widgets ()
 {
   adopt_terminal_widget ();
   adopt_documentation_widget ();
@@ -213,7 +214,8 @@
   m_previous_dock = m_command_window;
 }
 
-void main_window::adopt_terminal_widget ()
+void
+main_window::adopt_terminal_widget ()
 {
   m_command_window = m_octave_qobj.terminal_widget (this);
 
@@ -271,14 +273,16 @@
     }
 }
 
-void main_window::adopt_documentation_widget ()
+void
+main_window::adopt_documentation_widget ()
 {
   m_doc_browser_window = m_octave_qobj.documentation_widget (this);
 
   make_dock_widget_connections (m_doc_browser_window);
 }
 
-void main_window::adopt_file_browser_widget ()
+void
+main_window::adopt_file_browser_widget ()
 {
   m_file_browser_window = m_octave_qobj.file_browser_widget (this);
 
@@ -306,7 +310,8 @@
            this, &main_window::find_files);
 }
 
-void main_window::adopt_history_widget ()
+void
+main_window::adopt_history_widget ()
 {
   m_history_window = m_octave_qobj.history_widget (this);
 
@@ -319,7 +324,8 @@
            this, &main_window::execute_command_in_terminal);
 }
 
-void main_window::adopt_workspace_widget ()
+void
+main_window::adopt_workspace_widget ()
 {
   m_workspace_window = m_octave_qobj.workspace_widget (this);
 
@@ -329,7 +335,8 @@
            this, &main_window::execute_command_in_terminal);
 }
 
-void main_window::adopt_editor_widget ()
+void
+main_window::adopt_editor_widget ()
 {
   interpreter_qobject *interp_qobj = m_octave_qobj.interpreter_qobj ();
 
@@ -437,14 +444,16 @@
            m_active_editor, SLOT (handle_edit_file_request (const QString&)));
 }
 
-void main_window::adopt_variable_editor_widget ()
+void
+main_window::adopt_variable_editor_widget ()
 {
   m_variable_editor_window = m_octave_qobj.variable_editor_widget (this);
 
   make_dock_widget_connections (m_variable_editor_window);
 }
 
-void main_window::make_dock_widget_connections (octave_dock_widget *dw)
+void
+main_window::make_dock_widget_connections (octave_dock_widget *dw)
 {
   connect (this, &main_window::init_window_menu,
            dw, &octave_dock_widget::init_window_menu_entry);
@@ -468,17 +477,20 @@
            dw, &octave_dock_widget::save_settings);
 }
 
-bool main_window::command_window_has_focus () const
+bool
+main_window::command_window_has_focus () const
 {
   return m_command_window->has_focus ();
 }
 
-void main_window::focus_command_window ()
+void
+main_window::focus_command_window ()
 {
   m_command_window->activate ();
 }
 
-void main_window::focus_window (const QString& win_name)
+void
+main_window::focus_window (const QString& win_name)
 {
   if (win_name == "command")
     m_command_window->activate ();
@@ -490,7 +502,8 @@
     m_file_browser_window->activate ();
 }
 
-bool main_window::confirm_shutdown ()
+bool
+main_window::confirm_shutdown ()
 {
   bool closenow = true;
 
@@ -518,7 +531,8 @@
 }
 
 // catch focus changes and determine the active dock widget
-void main_window::focus_changed (QWidget *, QWidget *new_widget)
+void
+main_window::focus_changed (QWidget *, QWidget *new_widget)
 {
   // If there is no new widget or the new widget is a menu bar
   // (when pressing <alt>), we can return immediately and reset the
@@ -631,17 +645,20 @@
     }
 }
 
-void main_window::request_reload_settings ()
+void
+main_window::request_reload_settings ()
 {
   emit settings_changed ();
 }
 
-void main_window::report_status_message (const QString& statusMessage)
+void
+main_window::report_status_message (const QString& statusMessage)
 {
   m_status_bar->showMessage (statusMessage, 1000);
 }
 
-void main_window::handle_save_workspace_request ()
+void
+main_window::handle_save_workspace_request ()
 {
   // FIXME: Remove, if for all common KDE versions (bug #54607) is resolved.
   int opts = 0;  // No options by default.
@@ -658,7 +675,7 @@
   if (! file.isEmpty ())
     {
       emit interpreter_event
-        ([=] (interpreter& interp)
+        ([file] (interpreter& interp)
          {
            // INTERPRETER THREAD
 
@@ -667,7 +684,8 @@
     }
 }
 
-void main_window::handle_load_workspace_request (const QString& file_arg)
+void
+main_window::handle_load_workspace_request (const QString& file_arg)
 {
   // FIXME: Remove, if for all common KDE versions (bug #54607) is resolved.
   int opts = 0;  // No options by default.
@@ -686,7 +704,7 @@
   if (! file.isEmpty ())
     {
       emit interpreter_event
-        ([=] (interpreter& interp)
+        ([file] (interpreter& interp)
          {
            // INTERPRETER THREAD
 
@@ -701,14 +719,15 @@
     }
 }
 
-void main_window::handle_open_any_request (const QString& file_arg)
+void
+main_window::handle_open_any_request (const QString& file_arg)
 {
   if (! file_arg.isEmpty ())
     {
       std::string file = file_arg.toStdString ();
 
       emit interpreter_event
-        ([=] (interpreter& interp)
+        ([file] (interpreter& interp)
          {
            // INTERPRETER THREAD
 
@@ -725,7 +744,8 @@
     }
 }
 
-void main_window::handle_clear_workspace_request ()
+void
+main_window::handle_clear_workspace_request ()
 {
   emit interpreter_event
     ([] (interpreter& interp)
@@ -736,7 +756,8 @@
      });
 }
 
-void main_window::handle_clear_command_window_request ()
+void
+main_window::handle_clear_command_window_request ()
 {
   emit interpreter_event
     ([] ()
@@ -748,7 +769,8 @@
      });
 }
 
-void main_window::handle_clear_history_request ()
+void
+main_window::handle_clear_history_request ()
 {
   emit interpreter_event
     ([] (interpreter& interp)
@@ -761,7 +783,8 @@
      });
 }
 
-void main_window::handle_undo_request ()
+void
+main_window::handle_undo_request ()
 {
   if (command_window_has_focus ())
     {
@@ -778,11 +801,12 @@
     emit undo_signal ();
 }
 
-void main_window::modify_path (const QStringList& dir_list,
-                               bool rm, bool subdirs)
+void
+main_window::modify_path (const QStringList& dir_list,
+                          bool rm, bool subdirs)
 {
   emit interpreter_event
-    ([=] (interpreter& interp)
+    ([dir_list, subdirs, rm] (interpreter& interp)
     {
       // INTERPRETER THREAD
 
@@ -806,12 +830,14 @@
     });
 }
 
-void main_window::edit_mfile (const QString& name, int line)
+void
+main_window::edit_mfile (const QString& name, int line)
 {
   handle_edit_mfile_request (name, QString (), QString (), line);
 }
 
-void main_window::file_remove_proxy (const QString& o, const QString& n)
+void
+main_window::file_remove_proxy (const QString& o, const QString& n)
 {
   interpreter_qobject *interp_qobj = m_octave_qobj.interpreter_qobj ();
 
@@ -832,33 +858,39 @@
   qt_link->wake_all ();
 }
 
-void main_window::open_online_documentation_page ()
+void
+main_window::open_online_documentation_page ()
 {
   QDesktopServices::openUrl
     (QUrl ("https://octave.org/doc/interpreter/index.html"));
 }
 
-void main_window::open_bug_tracker_page ()
+void
+main_window::open_bug_tracker_page ()
 {
   QDesktopServices::openUrl (QUrl ("https://octave.org/bugs.html"));
 }
 
-void main_window::open_octave_packages_page ()
+void
+main_window::open_octave_packages_page ()
 {
   QDesktopServices::openUrl (QUrl ("https://packages.octave.org/index.html"));
 }
 
-void main_window::open_contribute_page ()
+void
+main_window::open_contribute_page ()
 {
   QDesktopServices::openUrl (QUrl ("https://octave.org/contribute.html"));
 }
 
-void main_window::open_donate_page ()
+void
+main_window::open_donate_page ()
 {
   QDesktopServices::openUrl (QUrl ("https://octave.org/donate.html"));
 }
 
-void main_window::process_settings_dialog_request (const QString& desired_tab)
+void
+main_window::process_settings_dialog_request (const QString& desired_tab)
 {
   if (m_settings_dlg)  // m_settings_dlg is a guarded pointer!
     {
@@ -874,7 +906,8 @@
            this, &main_window::request_reload_settings);
 }
 
-void main_window::show_about_octave ()
+void
+main_window::show_about_octave ()
 {
   std::string message
     = octave_name_version_copyright_copying_warranty_and_bugs (true);
@@ -883,7 +916,8 @@
                       QString::fromStdString (message));
 }
 
-void main_window::notice_settings (bool update_by_worker)
+void
+main_window::notice_settings (bool update_by_worker)
 {
   gui_settings settings;
 
@@ -894,7 +928,7 @@
   if (preferred_style == global_style.def ().toString ())
     preferred_style = m_default_style;
 
-  QApplication* qapp = m_octave_qobj.qapplication();
+  QApplication *qapp = m_octave_qobj.qapplication();
 
   if (preferred_style == global_extra_styles.at (EXTRA_STYLE_FUSION_DARK))
     {
@@ -991,7 +1025,8 @@
 
 }
 
-QPalette main_window::getFusionDarkPalette()
+QPalette
+main_window::getFusionDarkPalette()
 {
   QPalette darkPalette;
   darkPalette.setColor(QPalette::Window, QColor(53, 53, 53));
@@ -1018,7 +1053,8 @@
   return darkPalette;
 }
 
-void main_window::prepare_to_exit ()
+void
+main_window::prepare_to_exit ()
 {
   // Find files dialog is constructed dynamically, not at time of main_window
   // construction.  Connecting it to qApp aboutToQuit signal would have
@@ -1036,12 +1072,14 @@
   m_active_dock = nullptr;
 }
 
-void main_window::go_to_previous_widget ()
+void
+main_window::go_to_previous_widget ()
 {
   m_previous_dock->activate ();
 }
 
-void main_window::update_octave_directory (const QString& dir)
+void
+main_window::update_octave_directory (const QString& dir)
 {
   // Remove existing entry, if any, then add new directory at top and
   // mark it as the current directory.  Finally, update the file list
@@ -1056,7 +1094,8 @@
   m_current_directory_combo_box->setCurrentIndex (0);
 }
 
-void main_window::browse_for_directory ()
+void
+main_window::browse_for_directory ()
 {
   // FIXME: Remove, if for all common KDE versions (bug #54607) is resolved.
   int opts = QFileDialog::ShowDirsOnly;
@@ -1078,7 +1117,8 @@
   focus_command_window ();
 }
 
-void main_window::set_current_working_directory (const QString& dir)
+void
+main_window::set_current_working_directory (const QString& dir)
 {
   // Change to dir if it is an existing directory.
 
@@ -1089,7 +1129,7 @@
   if (fileInfo.exists () && fileInfo.isDir ())
     {
       emit interpreter_event
-        ([=] (interpreter& interp)
+        ([xdir] (interpreter& interp)
          {
            // INTERPRETER THREAD
 
@@ -1098,7 +1138,8 @@
     }
 }
 
-void main_window::change_directory_up ()
+void
+main_window::change_directory_up ()
 {
   set_current_working_directory ("..");
 }
@@ -1107,7 +1148,8 @@
 // combobox to change to a new directory or a directory that is already
 // in the drop down list.
 
-void main_window::accept_directory_line_edit ()
+void
+main_window::accept_directory_line_edit ()
 {
   // Get new directory name, and change to it if it is new.  Otherwise,
   // the combo box will trigger the "activated" signal to change to the
@@ -1121,7 +1163,8 @@
     set_current_working_directory (dir);
 }
 
-void main_window::execute_command_in_terminal (const QString& command)
+void
+main_window::execute_command_in_terminal (const QString& command)
 {
   if (m_octave_qobj.experimental_terminal_widget ())
     {
@@ -1130,7 +1173,7 @@
   else
     {
       emit interpreter_event
-        ([=] ()
+        ([command] ()
          {
            // INTERPRETER THREAD
 
@@ -1147,10 +1190,11 @@
   focus_console_after_command ();
 }
 
-void main_window::run_file_in_terminal (const QFileInfo& info)
+void
+main_window::run_file_in_terminal (const QFileInfo& info)
 {
   emit interpreter_event
-    ([=] (interpreter& interp)
+    ([info] (interpreter& interp)
      {
        // INTERPRETER THREAD
 
@@ -1191,7 +1235,8 @@
   focus_console_after_command ();
 }
 
-void main_window::handle_new_figure_request ()
+void
+main_window::handle_new_figure_request ()
 {
   emit interpreter_event
     ([] (interpreter& interp)
@@ -1203,7 +1248,8 @@
      });
 }
 
-void main_window::handle_enter_debugger ()
+void
+main_window::handle_enter_debugger ()
 {
   setWindowTitle ("Octave (Debugging)");
 
@@ -1214,7 +1260,8 @@
   m_debug_quit->setEnabled (true);
 }
 
-void main_window::handle_exit_debugger ()
+void
+main_window::handle_exit_debugger ()
 {
   setWindowTitle ("Octave");
 
@@ -1225,10 +1272,11 @@
   m_debug_quit->setEnabled (false);
 }
 
-void main_window::debug_continue ()
+void
+main_window::debug_continue ()
 {
   emit interpreter_event
-    ([=] (interpreter& interp)
+    ([this] (interpreter& interp)
      {
        // INTERPRETER THREAD
 
@@ -1239,10 +1287,11 @@
      });
 }
 
-void main_window::debug_step_into ()
+void
+main_window::debug_step_into ()
 {
   emit interpreter_event
-    ([=] (interpreter& interp)
+    ([this] (interpreter& interp)
      {
        // INTERPRETER THREAD
 
@@ -1253,14 +1302,15 @@
      });
 }
 
-void main_window::debug_step_over ()
+void
+main_window::debug_step_over ()
 {
   if (m_debug_quit->isEnabled ())
     {
       // We are in debug mode, just call dbstep.
 
       emit interpreter_event
-        ([=] (interpreter& interp)
+        ([this] (interpreter& interp)
          {
            // INTERPRETER THREAD
 
@@ -1278,10 +1328,11 @@
     }
 }
 
-void main_window::debug_step_out ()
+void
+main_window::debug_step_out ()
 {
   emit interpreter_event
-    ([=] (interpreter& interp)
+    ([this] (interpreter& interp)
      {
        // INTERPRETER THREAD
 
@@ -1292,7 +1343,8 @@
      });
 }
 
-void main_window::debug_quit ()
+void
+main_window::debug_quit ()
 {
   emit interpreter_event
     ([] (interpreter& interp)
@@ -1311,7 +1363,8 @@
 // These are moved from editor to here for also using them when octave
 // is built without qscintilla
 //
-void main_window::request_open_file ()
+void
+main_window::request_open_file ()
 {
   // Open file isn't a file_editor_tab or editor function since the file
   // might be opened in an external editor.  Hence, functionality is here.
@@ -1320,7 +1373,7 @@
 
   bool is_internal = m_editor_window
                      && ! settings.value (global_use_custom_editor.settings_key (),
-                                           global_use_custom_editor.def ()).toBool ();
+                                          global_use_custom_editor.def ()).toBool ();
 
   // Create a NonModal message.
   QWidget *p = this;
@@ -1347,13 +1400,15 @@
 }
 
 // Create a new script
-void main_window::request_new_script (const QString& commands)
+void
+main_window::request_new_script (const QString& commands)
 {
   emit new_file_signal (commands);
 }
 
 // Create a new function and open it
-void main_window::request_new_function (bool)
+void
+main_window::request_new_function (bool)
 {
   bool ok;
   // Get the name of the new function: Parent of the input dialog is the
@@ -1364,7 +1419,7 @@
   gui_settings settings;
 
   if (! p || settings.value (global_use_custom_editor.settings_key (),
-                              global_use_custom_editor.def ()).toBool ())
+                             global_use_custom_editor.def ()).toBool ())
     p = this;
   QString new_name = QInputDialog::getText (p, tr ("New Function"),
                                             tr ("New function name:\n"), QLineEdit::Normal, "", &ok);
@@ -1387,10 +1442,11 @@
     }
 }
 
-void main_window::handle_edit_mfile_request (const QString& fname,
-                                             const QString& ffile,
-                                             const QString& curr_dir,
-                                             int line)
+void
+main_window::handle_edit_mfile_request (const QString& fname,
+                                        const QString& ffile,
+                                        const QString& curr_dir,
+                                        int line)
 {
   // The interpreter_event callback function below emits a signal.
   // Because we don't control when that happens, use a guarded pointer
@@ -1399,7 +1455,7 @@
   QPointer<main_window> this_mw (this);
 
   emit interpreter_event
-    ([=] (interpreter& interp)
+    ([this, this_mw, fname, ffile, curr_dir, line] (interpreter& interp)
      {
        // INTERPRETER THREAD
 
@@ -1488,7 +1544,8 @@
      });
 }
 
-void main_window::warning_function_not_found (const QString& message)
+void
+main_window::warning_function_not_found (const QString& message)
 {
   QMessageBox *msgBox = new QMessageBox (QMessageBox::Critical,
                                          tr ("Octave Editor"),
@@ -1498,8 +1555,9 @@
   msgBox->show ();
 }
 
-void main_window::handle_insert_debugger_pointer_request (const QString& file,
-                                                          int line)
+void
+main_window::handle_insert_debugger_pointer_request (const QString& file,
+    int line)
 {
   bool cmd_focus = command_window_has_focus ();
 
@@ -1509,8 +1567,9 @@
     focus_command_window ();
 }
 
-void main_window::handle_delete_debugger_pointer_request (const QString& file,
-                                                          int line)
+void
+main_window::handle_delete_debugger_pointer_request (const QString& file,
+    int line)
 {
   bool cmd_focus = command_window_has_focus ();
 
@@ -1520,10 +1579,11 @@
     focus_command_window ();
 }
 
-void main_window::handle_update_breakpoint_marker_request (bool insert,
-                                                           const QString& file,
-                                                           int line,
-                                                           const QString& cond)
+void
+main_window::handle_update_breakpoint_marker_request (bool insert,
+    const QString& file,
+    int line,
+    const QString& cond)
 {
   bool cmd_focus = command_window_has_focus ();
 
@@ -1533,7 +1593,8 @@
     focus_command_window ();
 }
 
-void main_window::read_settings ()
+void
+main_window::read_settings ()
 {
   gui_settings settings;
 
@@ -1549,12 +1610,14 @@
   emit settings_changed ();
 }
 
-void main_window::init_terminal_size ()
+void
+main_window::init_terminal_size ()
 {
   emit init_terminal_size_signal ();
 }
 
-void main_window::set_window_layout ()
+void
+main_window::set_window_layout ()
 {
   gui_settings settings;
 
@@ -1651,7 +1714,8 @@
   show ();
 }
 
-void main_window::write_settings ()
+void
+main_window::write_settings ()
 {
   gui_settings settings;
 
@@ -1667,7 +1731,8 @@
   settings.sync ();
 }
 
-void main_window::copyClipboard ()
+void
+main_window::copyClipboard ()
 {
   if (m_current_directory_combo_box->hasFocus ())
     {
@@ -1682,7 +1747,8 @@
     emit copyClipboard_signal ();
 }
 
-void main_window::pasteClipboard ()
+void
+main_window::pasteClipboard ()
 {
   if (m_current_directory_combo_box->hasFocus ())
     {
@@ -1698,7 +1764,8 @@
     emit pasteClipboard_signal ();
 }
 
-void main_window::selectAll ()
+void
+main_window::selectAll ()
 {
   if (m_current_directory_combo_box->hasFocus ())
     {
@@ -1712,8 +1779,9 @@
     emit selectAll_signal ();
 }
 
-void main_window::handle_gui_status_update (const QString& feature,
-                                            const QString& status)
+void
+main_window::handle_gui_status_update (const QString& feature,
+                                       const QString& status)
 {
   // Put actions that are required for updating a gui features here
 
@@ -1727,7 +1795,8 @@
     }
 }
 
-void main_window::handle_octave_ready ()
+void
+main_window::handle_octave_ready ()
 {
   // actions after the startup files are executed
 
@@ -1767,7 +1836,10 @@
       // This can not be done when the editor is created because all functions
       // must be known for the lexer's auto completion information
       m_editor_window->empty_script (true, false);
-      m_editor_window->restore_session ();
+      bool ed_visible =
+        settings.value (dw_is_visible.settings_key ().arg (m_editor_window->objectName ()),
+                        dw_is_visible.def ()).toBool ();
+      m_editor_window->restore_session (ed_visible);
 #endif
     }
 
@@ -1783,7 +1855,7 @@
       QPointer<main_window> this_mw (this);
 
       emit interpreter_event
-        ([=] (interpreter& interp)
+        ([this, this_mw] (interpreter& interp)
         {
           // INTERPRETER_THREAD
 
@@ -1807,7 +1879,8 @@
   focus_command_window ();  // make sure that the command window has focus
 }
 
-void main_window::handle_set_path_dialog_request ()
+void
+main_window::handle_set_path_dialog_request ()
 {
   if (m_set_path_dlg)  // m_set_path_dlg is a guarded pointer!
     return;
@@ -1843,7 +1916,8 @@
   m_set_path_dlg->update_model ();
 }
 
-void main_window::find_files (const QString& start_dir)
+void
+main_window::find_files (const QString& start_dir)
 {
 
   if (! m_find_files_dlg)
@@ -1873,10 +1947,11 @@
 
 }
 
-void main_window::set_screen_size (int ht, int wd)
+void
+main_window::set_screen_size (int ht, int wd)
 {
   emit interpreter_event
-    ([=] ()
+    ([ht, wd] ()
      {
        // INTERPRETER THREAD
 
@@ -1884,7 +1959,8 @@
      });
 }
 
-void main_window::clipboard_has_changed ()
+void
+main_window::clipboard_has_changed ()
 {
   if (m_clipboard->text ().isEmpty ())
     {
@@ -1898,12 +1974,14 @@
     }
 }
 
-void main_window::clear_clipboard ()
+void
+main_window::clear_clipboard ()
 {
   m_clipboard->clear (QClipboard::Clipboard);
 }
 
-void main_window::disable_menu_shortcuts (bool disable)
+void
+main_window::disable_menu_shortcuts (bool disable)
 {
   QHash<QMenu *, QStringList>::const_iterator i = m_hash_menu_text.constBegin ();
 
@@ -1914,7 +1992,8 @@
     }
 }
 
-void main_window::restore_create_file_setting ()
+void
+main_window::restore_create_file_setting ()
 {
   // restore the new files creation setting
 
@@ -1925,7 +2004,8 @@
               this, SLOT (restore_create_file_setting ()));
 }
 
-void main_window::set_file_encoding (const QString& new_encoding)
+void
+main_window::set_file_encoding (const QString& new_encoding)
 {
   m_file_encoding = new_encoding;
 }
@@ -1933,43 +2013,48 @@
 // The following slot is called after files have been selected in the
 // open file dialog, possibly with a new selected encoding stored in
 // m_file_encoding
-void main_window::request_open_files (const QStringList& open_file_names)
+void
+main_window::request_open_files (const QStringList& open_file_names)
 {
   for (int i = 0; i < open_file_names.count (); i++)
     emit open_file_signal (open_file_names.at (i), m_file_encoding, -1);
 }
 
-void main_window::profiler_session ()
+void
+main_window::profiler_session ()
 {
   emit interpreter_event
-    ([=] (interpreter& interp)
+    ([] (interpreter& interp)
       {
         // INTERPRETER THREAD
         F__profiler_enable__ (interp, ovl (true));
       });
 }
 
-void main_window::profiler_session_resume ()
+void
+main_window::profiler_session_resume ()
 {
   emit interpreter_event
-    ([=] (interpreter& interp)
+    ([] (interpreter& interp)
       {
         // INTERPRETER THREAD
         F__profiler_enable__ (interp, ovl (true));
       });
 }
 
-void main_window::profiler_stop ()
+void
+main_window::profiler_stop ()
 {
   emit interpreter_event
-    ([=] (interpreter& interp)
+    ([] (interpreter& interp)
       {
         // INTERPRETER THREAD
         F__profiler_enable__ (interp, ovl (false));
       });
 }
 
-void main_window::handle_profiler_status_update (bool active)
+void
+main_window::handle_profiler_status_update (bool active)
 {
   m_profiler_start->setEnabled (! active);
   m_profiler_resume->setEnabled (! active);
@@ -1981,7 +2066,8 @@
   m_profiler_status_indicator->set_state (state);
 }
 
-void main_window::profiler_show ()
+void
+main_window::profiler_show ()
 {
   // Do not use a separate interpreter event as in the other
   // profiler slots since the output of the command "profshow"
@@ -1990,7 +2076,8 @@
   execute_command_in_terminal ("profshow");
 }
 
-void main_window::closeEvent (QCloseEvent *e)
+void
+main_window::closeEvent (QCloseEvent *e)
 {
   write_settings ();
 
@@ -2023,7 +2110,8 @@
     e->ignore ();
 }
 
-void main_window::construct_central_widget ()
+void
+main_window::construct_central_widget ()
 {
   // Create and set the central widget.  QMainWindow takes ownership of
   // the widget (pointer) so there is no need to delete the object upon
@@ -2039,7 +2127,8 @@
 
 // Main subroutine of the constructor
 
-void main_window::construct ()
+void
+main_window::construct ()
 {
   setWindowIcon (QIcon (dw_icon_set_names["NONE"]));
 
@@ -2061,7 +2150,7 @@
 
   // Default argument requires wrapper.
   connect (this, &main_window::settings_changed,
-           this, [=] () { notice_settings (); });
+           this, [this] () { notice_settings (); });
 
   // Connections for signals from the interpreter thread where the slot
   // should be executed by the gui thread
@@ -2086,7 +2175,8 @@
   configure_shortcuts ();
 }
 
-void main_window::construct_octave_qt_link ()
+void
+main_window::construct_octave_qt_link ()
 {
   interpreter_qobject *interp_qobj = m_octave_qobj.interpreter_qobj ();
 
@@ -2111,7 +2201,7 @@
            this, &main_window::handle_exit_debugger);
 
   connect (qt_link, &qt_interpreter_events::show_preferences_signal,
-           this, [=] () { process_settings_dialog_request (); });
+           this, [this] () { process_settings_dialog_request (); });
 
   connect (qt_link, &qt_interpreter_events::insert_debugger_pointer_signal,
            this, &main_window::handle_insert_debugger_pointer_request);
@@ -2129,9 +2219,10 @@
            this, &main_window::update_gui_lexer_signal);
 }
 
-QAction* main_window::add_action (QMenu *menu, const QIcon& icon,
-                                  const QString& text, const char *member,
-                                  const QWidget *receiver)
+QAction *
+main_window::add_action (QMenu *menu, const QIcon& icon,
+                         const QString& text, const char *member,
+                         const QWidget *receiver)
 {
   QAction *a;
 
@@ -2145,7 +2236,8 @@
   return a;
 }
 
-QMenu* main_window::m_add_menu (QMenuBar *p, QString name)
+QMenu *
+main_window::m_add_menu (QMenuBar *p, QString name)
 {
   QMenu *menu = p->addMenu (name);
 
@@ -2163,7 +2255,8 @@
   return menu;
 }
 
-void main_window::construct_menu_bar ()
+void
+main_window::construct_menu_bar ()
 {
   QMenuBar *menu_bar = menuBar ();
 
@@ -2184,7 +2277,8 @@
 #if defined (HAVE_QSCINTILLA)
   // call the editor to add actions which should also be available in the
   // editor's menu and tool bar
-  QList<QAction *> shared_actions = {
+  QList<QAction *> shared_actions =
+  {
     m_new_script_action,
     m_new_function_action,
     m_open_action,
@@ -2198,7 +2292,8 @@
 #endif
 }
 
-void main_window::construct_file_menu (QMenuBar *p)
+void
+main_window::construct_file_menu (QMenuBar *p)
 {
   QMenu *file_menu = m_add_menu (p, tr ("&File"));
 
@@ -2245,7 +2340,8 @@
            SLOT (request_open_file (const QString&, const QString&, int)));
 }
 
-void main_window::construct_new_menu (QMenu *p)
+void
+main_window::construct_new_menu (QMenu *p)
 {
   QMenu *new_menu = p->addMenu (tr ("New"));
 
@@ -2264,7 +2360,8 @@
                   SLOT (handle_new_figure_request ()), this);
 }
 
-void main_window::construct_edit_menu (QMenuBar *p)
+void
+main_window::construct_edit_menu (QMenuBar *p)
 {
   QMenu *edit_menu = m_add_menu (p, tr ("&Edit"));
 
@@ -2322,7 +2419,7 @@
                             tr ("Preferences..."));
 
   connect (m_find_files_action, &QAction::triggered,
-           this, [=] () { find_files (); });
+           this, [this] () { find_files (); });
 
   connect (m_clear_command_window_action, &QAction::triggered,
            this, &main_window::handle_clear_command_window_request);
@@ -2345,16 +2442,17 @@
 #endif
 
   connect (m_preferences_action, &QAction::triggered,
-           this, [=] () { process_settings_dialog_request (); });
+           this, [this] () { process_settings_dialog_request (); });
 
   connect (m_set_path_action, &QAction::triggered,
            this, &main_window::handle_set_path_dialog_request);
 
 }
 
-QAction * main_window::construct_debug_menu_item (const char *icon,
-                                                  const QString& item,
-                                                  const char *member)
+QAction *
+main_window::construct_debug_menu_item (const char *icon,
+                                        const QString& item,
+                                        const char *member)
 {
   gui_settings settings;
 
@@ -2371,7 +2469,8 @@
   return action;
 }
 
-void main_window::construct_debug_menu (QMenuBar *p)
+void
+main_window::construct_debug_menu (QMenuBar *p)
 {
   m_debug_menu = m_add_menu (p, tr ("De&bug"));
 
@@ -2401,25 +2500,27 @@
                                  SLOT (debug_quit ()));
 }
 
-void main_window::construct_tools_menu (QMenuBar *p)
+void
+main_window::construct_tools_menu (QMenuBar *p)
 {
   QMenu *tools_menu = m_add_menu (p, tr ("&Tools"));
 
   m_profiler_start = add_action (tools_menu, QIcon (),
-        tr ("Start &Profiler Session"), SLOT (profiler_session ()));
+                                 tr ("Start &Profiler Session"), SLOT (profiler_session ()));
 
   m_profiler_resume = add_action (tools_menu, QIcon (),
-        tr ("&Resume Profiler Session"), SLOT (profiler_session_resume ()));
+                                  tr ("&Resume Profiler Session"), SLOT (profiler_session_resume ()));
 
   m_profiler_stop = add_action (tools_menu, QIcon (),
-        tr ("&Stop Profiler"), SLOT (profiler_stop ()));
+                                tr ("&Stop Profiler"), SLOT (profiler_stop ()));
   m_profiler_stop->setEnabled (false);
 
   m_profiler_show = add_action (tools_menu, QIcon (),
-        tr ("&Show Profiler Data"), SLOT (profiler_show ()));
+                                tr ("&Show Profiler Data"), SLOT (profiler_show ()));
 }
 
-void main_window::editor_tabs_changed (bool have_tabs, bool is_octave)
+void
+main_window::editor_tabs_changed (bool have_tabs, bool is_octave)
 {
   // Set state of actions which depend on the existence of editor tabs
   m_editor_has_tabs = have_tabs;
@@ -2427,10 +2528,11 @@
   m_debug_step_over->setEnabled (have_tabs && is_octave);
 }
 
-QAction * main_window::construct_window_menu_item (QMenu *p,
-                                                   const QString& item,
-                                                   bool checkable,
-                                                   QWidget *widget)
+QAction *
+main_window::construct_window_menu_item (QMenu *p,
+    const QString& item,
+    bool checkable,
+    QWidget *widget)
 {
   QAction *action = p->addAction (QIcon (), item);
 
@@ -2464,7 +2566,8 @@
   return action;
 }
 
-void main_window::construct_window_menu (QMenuBar *p)
+void
+main_window::construct_window_menu (QMenuBar *p)
 {
   QMenu *window_menu = m_add_menu (p, tr ("&Window"));
 
@@ -2515,7 +2618,7 @@
   window_menu->addSeparator ();
 
   m_previous_dock_action = add_action (window_menu, QIcon (),
-                                         tr ("Previous Widget"), SLOT (go_to_previous_widget ()));
+                                       tr ("Previous Widget"), SLOT (go_to_previous_widget ()));
 
   window_menu->addSeparator ();
 
@@ -2523,7 +2626,8 @@
                                        tr ("Reset Default Window Layout"), SLOT (reset_windows ()));
 }
 
-void main_window::construct_help_menu (QMenuBar *p)
+void
+main_window::construct_help_menu (QMenuBar *p)
 {
   QMenu *help_menu = m_add_menu (p, tr ("&Help"));
 
@@ -2549,7 +2653,8 @@
                                       tr ("About Octave"), SLOT (show_about_octave ()));
 }
 
-void main_window::construct_documentation_menu (QMenu *p)
+void
+main_window::construct_documentation_menu (QMenu *p)
 {
   QMenu *doc_menu = p->addMenu (tr ("Documentation"));
 
@@ -2560,28 +2665,26 @@
                                     tr ("Online"), SLOT (open_online_documentation_page ()));
 }
 
-void main_window::construct_news_menu (QMenuBar *p)
+void
+main_window::construct_news_menu (QMenuBar *p)
 {
   QMenu *news_menu = m_add_menu (p, tr ("&News"));
 
   m_release_notes_action
     = news_menu->addAction (QIcon (), tr ("Release Notes"),
-                            [=] () {
-                              emit show_release_notes_signal ();
-                            });
+                            [this] () { emit show_release_notes_signal (); });
   addAction (m_release_notes_action);
   m_release_notes_action->setShortcutContext (Qt::ApplicationShortcut);
 
   m_current_news_action
     = news_menu->addAction (QIcon (), tr ("Community News"),
-                            [=] () {
-                              emit show_community_news_signal (-1);
-                            });
+                            [this] () { emit show_community_news_signal (-1); });
   addAction (m_current_news_action);
   m_current_news_action->setShortcutContext (Qt::ApplicationShortcut);
 }
 
-void main_window::construct_tool_bar ()
+void
+main_window::construct_tool_bar ()
 {
   m_main_tool_bar = addToolBar (tr ("Toolbar"));
   m_main_tool_bar->setStyleSheet (m_main_tool_bar->styleSheet ()
@@ -2646,7 +2749,8 @@
            this, &main_window::handle_undo_request);
 }
 
-void main_window::focus_console_after_command ()
+void
+main_window::focus_console_after_command ()
 {
   gui_settings settings;
 
@@ -2654,7 +2758,8 @@
     focus_command_window ();
 }
 
-void main_window::configure_shortcuts ()
+void
+main_window::configure_shortcuts ()
 {
   gui_settings settings;
 
@@ -2729,7 +2834,8 @@
   settings.set_shortcut (m_current_news_action, sc_main_news_community_news, enable);
 }
 
-QList<octave_dock_widget *> main_window::dock_widget_list ()
+QList<octave_dock_widget *>
+main_window::dock_widget_list ()
 {
   QList<octave_dock_widget *> list = QList<octave_dock_widget *> ();
   list.append (static_cast<octave_dock_widget *> (m_command_window));
@@ -2744,7 +2850,8 @@
   return list;
 }
 
-void main_window::update_default_encoding (const QString& default_encoding)
+void
+main_window::update_default_encoding (const QString& default_encoding)
 {
   m_default_encoding = default_encoding;
   std::string mfile_encoding = m_default_encoding.toStdString ();
@@ -2752,7 +2859,7 @@
     mfile_encoding = "SYSTEM";
 
   emit interpreter_event
-    ([=] (interpreter& interp)
+    ([mfile_encoding] (interpreter& interp)
      {
        // INTERPRETER THREAD
 
@@ -2760,7 +2867,8 @@
      });
 }
 
-void main_window::resize_dock (QDockWidget *dw, int width, int height)
+void
+main_window::resize_dock (QDockWidget *dw, int width, int height)
 {
   // resizeDockWidget was added to Qt in Qt 5.6
   if (width >= 0)
@@ -2770,7 +2878,8 @@
 }
 
 // The default main window size relative to the desktop size
-void main_window::set_default_geometry ()
+void
+main_window::set_default_geometry ()
 {
   int win_x, win_y;
   get_screen_geometry (win_x, win_y);
@@ -2779,7 +2888,8 @@
   resize (2*win_x/3, 7*win_y/8);
 }
 
-void main_window::reset_windows ()
+void
+main_window::reset_windows ()
 {
   // Slot for resetting the window layout to the default one
   hide ();
@@ -2796,13 +2906,14 @@
   // connections so that the event loop can do what it needs to do.
   // But I haven't been able to find the magic sequence.
 
-  QTimer::singleShot (250, this, [=] () { do_reset_windows (true, true, true); });
+  QTimer::singleShot (250, this, [this] () { do_reset_windows (true, true, true); });
 }
 
 // Create the default layout of the main window. Do not use
 // restoreState () and restoreGeometry () with default values since
 // this might lead to problems when the Qt version changes
-void main_window::do_reset_windows (bool show, bool save, bool force_all)
+void
+main_window::do_reset_windows (bool show, bool save, bool force_all)
 {
   // Set main window default geometry and store its width for
   // later resizing the command window
--- a/libgui/src/octave-dock-widget.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/octave-dock-widget.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -215,7 +215,7 @@
   connect (this, &octave_dock_widget::queue_make_window,
            this, &octave_dock_widget::make_window, Qt::QueuedConnection);
   connect (this, &octave_dock_widget::queue_make_widget,
-           this, [=] () { make_widget (); }, Qt::QueuedConnection);
+           this, [this] () { make_widget (); }, Qt::QueuedConnection);
 
   gui_settings settings;
 
@@ -527,7 +527,7 @@
 
   m_recent_float_geom
     = settings.value (dw_float_geometry.settings_key ().arg (objectName ()),
-                       default_floating_size).toRect ();
+                      default_floating_size).toRect ();
 
   adjust_to_screen (m_recent_float_geom, default_floating_size);
 
@@ -601,7 +601,8 @@
   settings.sync ();
 }
 
-bool octave_dock_widget::eventFilter (QObject *obj, QEvent *e)
+bool
+octave_dock_widget::eventFilter (QObject *obj, QEvent *e)
 {
   // Ignore double clicks into window decoration elements
   if (e->type () == QEvent::NonClientAreaMouseButtonDblClick)
@@ -657,7 +658,8 @@
   emit active_changed (false);
 }
 
-void octave_dock_widget::activate ()
+void
+octave_dock_widget::activate ()
 {
   if (! isVisible ())
     setVisible (true);
@@ -667,7 +669,8 @@
   raise ();
 }
 
-void octave_dock_widget::handle_visibility (bool visible)
+void
+octave_dock_widget::handle_visibility (bool visible)
 {
   if (visible)
     {
--- a/libgui/src/octave-qobject.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/octave-qobject.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -75,7 +75,8 @@
 
 // Bug #55940 (Disable App Nap on Mac)
 #if defined (Q_OS_MAC)
-static void disable_app_nap ()
+static void
+disable_app_nap ()
 {
   Class process_info_class;
   SEL process_info_selector;
@@ -141,7 +142,8 @@
 //! Reimplement QApplication::notify.  Octave's own exceptions are
 //! caught and rethrown in the interpreter thread.
 
-bool octave_qapplication::notify (QObject *receiver, QEvent *ev)
+bool
+octave_qapplication::notify (QObject *receiver, QEvent *ev)
 {
   try
     {
@@ -150,7 +152,7 @@
   catch (execution_exception& ee)
     {
       emit interpreter_event
-        ([=] ()
+        ([ee] ()
          {
            // INTERPRETER THREAD
            throw ee;
@@ -386,7 +388,8 @@
   string_vector::delete_c_str_vec (m_argv);
 }
 
-void base_qobject::config_translators ()
+void
+base_qobject::config_translators ()
 {
   if (m_translators_installed)
     return;
@@ -402,7 +405,8 @@
   m_translators_installed = true;
 }
 
-void base_qobject::start_main_thread ()
+void
+base_qobject::start_main_thread ()
 {
   // Note: if using the new experimental terminal widget, we defer
   // initializing and executing the interpreter until the main event
@@ -422,7 +426,8 @@
   m_main_thread->start ();
 }
 
-int base_qobject::exec ()
+int
+base_qobject::exec ()
 {
   int status = m_qapplication->exec ();
 
@@ -439,12 +444,14 @@
 
 // Provided for convenience.  Will be removed once we eliminate the
 // old terminal widget.
-bool base_qobject::experimental_terminal_widget () const
+bool
+base_qobject::experimental_terminal_widget () const
 {
   return m_app_context.experimental_terminal_widget ();
 }
 
-bool base_qobject::gui_running () const
+bool
+base_qobject::gui_running () const
 {
   return m_app_context.gui_running ();
 }
@@ -577,7 +584,7 @@
                m_history_widget, &history_dock_widget::clear_history);
 
       emit interpreter_event
-        ([=] (interpreter& interp) {
+        ([] (interpreter& interp) {
           // INTERPRETER THREAD
 
           event_manager& xevmgr = interp.get_event_manager ();
@@ -615,9 +622,9 @@
 
       connect (m_workspace_widget,
                &workspace_view::copy_variable_value_to_clipboard,
-               [=] (const QString& var_name) {
+               [this] (const QString& var_name) {
                  emit interpreter_event
-                   ([=] (interpreter& interp)
+                   ([var_name] (interpreter& interp)
                     {
                       // INTERPRETER THREAD
 
@@ -638,9 +645,9 @@
                });
 
       connect (m_workspace_widget, &workspace_view::rename_variable_signal,
-               [=] (const QString& old_name, const QString& new_name) {
+               [this] (const QString& old_name, const QString& new_name) {
                  emit interpreter_event
-                   ([=] (interpreter& interp) {
+                   ([old_name, new_name] (interpreter& interp) {
                      // INTERPRETER THREAD
 
                      symbol_scope scope = interp.get_current_scope ();
@@ -663,9 +670,9 @@
                });
 
       connect (m_workspace_widget, &workspace_view::edit_variable_signal,
-               [=] (const QString& var_name) {
+               [this] (const QString& var_name) {
                  emit interpreter_event
-                   ([=] (interpreter& interp) {
+                   ([var_name] (interpreter& interp) {
                      // INTERPRETER THREAD
 
                      std::string name = var_name.toStdString ();
@@ -678,7 +685,7 @@
                });
 
       emit interpreter_event
-        ([=] (interpreter& interp) {
+        ([] (interpreter& interp) {
           // INTERPRETER THREAD
 
           event_manager& xevmgr = interp.get_event_manager ();
@@ -725,7 +732,8 @@
   return m_variable_editor_widget;
 }
 
-QPointer<community_news> base_qobject::community_news_widget (int serial)
+QPointer<community_news>
+base_qobject::community_news_widget (int serial)
 {
   if (! m_community_news)
     m_community_news
@@ -734,7 +742,8 @@
   return m_community_news;
 }
 
-QPointer<release_notes> base_qobject::release_notes_widget ()
+QPointer<release_notes>
+base_qobject::release_notes_widget ()
 {
   if (! m_release_notes)
     m_release_notes = QPointer<release_notes> (new release_notes ());
@@ -742,7 +751,8 @@
   return m_release_notes;
 }
 
-bool base_qobject::confirm_shutdown ()
+bool
+base_qobject::confirm_shutdown ()
 {
   // Currently, we forward to main_window::confirm_shutdown instead of
   // just displaying a dialog box here because the main_window also
@@ -751,7 +761,8 @@
   return m_main_window ? m_main_window->confirm_shutdown () : true;
 }
 
-void base_qobject::start_gui (bool gui_app)
+void
+base_qobject::start_gui (bool gui_app)
 {
   if (m_app_context.experimental_terminal_widget ())
     {
@@ -795,7 +806,8 @@
     }
 }
 
-void base_qobject::show_terminal_window ()
+void
+base_qobject::show_terminal_window ()
 {
   terminal_dock_widget *widget
     = (m_terminal_widget
@@ -808,7 +820,8 @@
     }
 }
 
-void base_qobject::show_documentation_window (const QString& file)
+void
+base_qobject::show_documentation_window (const QString& file)
 {
   documentation_dock_widget *widget
     = (m_documentation_widget
@@ -823,7 +836,8 @@
     }
 }
 
-void base_qobject::show_file_browser_window ()
+void
+base_qobject::show_file_browser_window ()
 {
   files_dock_widget *widget
     = m_file_browser_widget ? m_file_browser_widget : file_browser_widget ();
@@ -835,7 +849,8 @@
     }
 }
 
-void base_qobject::show_command_history_window ()
+void
+base_qobject::show_command_history_window ()
 {
   history_dock_widget *widget
     = m_history_widget ? m_history_widget : history_widget ();
@@ -847,7 +862,8 @@
     }
 }
 
-void base_qobject::show_workspace_window ()
+void
+base_qobject::show_workspace_window ()
 {
   workspace_view *widget
     = m_workspace_widget ? m_workspace_widget : workspace_widget ();
@@ -859,8 +875,9 @@
     }
 }
 
-void base_qobject::show_variable_editor_window (const QString& name,
-                                                const octave_value& value)
+void
+base_qobject::show_variable_editor_window (const QString& name,
+    const octave_value& value)
 {
   variable_editor *widget
     = (m_variable_editor_widget
@@ -876,7 +893,8 @@
   widget->edit_variable (name, value);
 }
 
-void base_qobject::handle_variable_editor_update ()
+void
+base_qobject::handle_variable_editor_update ()
 {
   // Called when the variable editor emits the updated signal.  The size
   // of a variable may have changed, so we refresh the workspace in the
@@ -896,7 +914,8 @@
      });
 }
 
-void base_qobject::show_community_news (int serial)
+void
+base_qobject::show_community_news (int serial)
 {
   // Ensure widget exists.
   community_news_widget (serial);
@@ -904,7 +923,8 @@
   m_community_news->display ();
 }
 
-void base_qobject::show_release_notes ()
+void
+base_qobject::show_release_notes ()
 {
   // Ensure widget exists.
   release_notes_widget ();
@@ -912,10 +932,11 @@
   m_release_notes->display ();
 }
 
-void base_qobject::execute_command (const QString& command)
+void
+base_qobject::execute_command (const QString& command)
 {
   emit interpreter_event
-    ([=] (interpreter& interp)
+    ([command] (interpreter& interp)
     {
       // INTERPRETER THREAD
 
@@ -930,7 +951,8 @@
     });
 }
 
-void base_qobject::close_gui ()
+void
+base_qobject::close_gui ()
 {
   if (m_app_context.experimental_terminal_widget ())
     {
@@ -941,7 +963,7 @@
       // returning to the command line?
 
       interpreter_event
-        ([=] (interpreter& interp)
+        ([] (interpreter& interp)
         {
           // INTERPRETER THREAD
 
@@ -957,12 +979,14 @@
     }
 }
 
-void base_qobject::interpreter_ready ()
+void
+base_qobject::interpreter_ready ()
 {
   m_interpreter_ready = true;
 }
 
-void base_qobject::interpreter_event (const fcn_callback& fcn)
+void
+base_qobject::interpreter_event (const fcn_callback& fcn)
 {
   // The following is a direct function call across threads.  It works
   // because it is accessing a thread-safe queue of events that
@@ -974,7 +998,8 @@
   m_interpreter_qobj->interpreter_event (fcn);
 }
 
-void base_qobject::interpreter_event (const meth_callback& meth)
+void
+base_qobject::interpreter_event (const meth_callback& meth)
 {
   // The following is a direct function call across threads.  It works
   // because it is accessing a thread-safe queue of events that
@@ -986,7 +1011,8 @@
   m_interpreter_qobj->interpreter_event (meth);
 }
 
-void base_qobject::interpreter_interrupt ()
+void
+base_qobject::interpreter_interrupt ()
 {
   m_interpreter_qobj->interrupt ();
 }
@@ -994,26 +1020,30 @@
 // FIXME: Should we try to make the pause, stop, and resume actions
 // work for both the old and new terminal widget?
 
-void base_qobject::interpreter_pause ()
+void
+base_qobject::interpreter_pause ()
 {
   if (m_app_context.experimental_terminal_widget ())
     m_interpreter_qobj->pause ();
 }
 
-void base_qobject::interpreter_stop ()
+void
+base_qobject::interpreter_stop ()
 {
   if (m_app_context.experimental_terminal_widget ())
     m_interpreter_qobj->stop ();
 }
 
-void base_qobject::interpreter_resume ()
+void
+base_qobject::interpreter_resume ()
 {
   if (m_app_context.experimental_terminal_widget ())
     m_interpreter_qobj->resume ();
 }
 
-void base_qobject::copy_image_to_clipboard (const QString& file,
-                                            bool remove_file)
+void
+base_qobject::copy_image_to_clipboard (const QString& file,
+                                       bool remove_file)
 {
   QClipboard *clipboard = QApplication::clipboard ();
 
--- a/libgui/src/qt-application.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/qt-application.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -78,7 +78,8 @@
   sysdep_init ();
 }
 
-bool qt_application::start_gui_p () const
+bool
+qt_application::start_gui_p () const
 {
   // Note: this function is not needed if using the experimental
   // terminal widget, so return a dummy value of false in that case.
@@ -86,7 +87,8 @@
   return experimental_terminal_widget () ? false : m_options.gui ();
 }
 
-int qt_application::execute ()
+int
+qt_application::execute ()
 {
   octave_block_interrupt_signal ();
 
--- a/libgui/src/qt-interpreter-events.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/qt-interpreter-events.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -133,13 +133,15 @@
            this, &qt_interpreter_events::gui_preference_slot);
 }
 
-void qt_interpreter_events::start_gui (bool gui_app)
+void
+qt_interpreter_events::start_gui (bool gui_app)
 {
   if (m_octave_qobj.experimental_terminal_widget ())
     emit start_gui_signal (gui_app);
 }
 
-void qt_interpreter_events::close_gui ()
+void
+qt_interpreter_events::close_gui ()
 {
   if (m_octave_qobj.experimental_terminal_widget ())
     emit close_gui_signal ();
@@ -246,72 +248,85 @@
   return answer.toStdString ();
 }
 
-void qt_interpreter_events::update_path_dialog ()
+void
+qt_interpreter_events::update_path_dialog ()
 {
   emit update_path_dialog_signal ();
 }
 
-void qt_interpreter_events::show_preferences ()
+void
+qt_interpreter_events::show_preferences ()
 {
   emit show_preferences_signal ();
 }
 
-void qt_interpreter_events::apply_preferences ()
+void
+qt_interpreter_events::apply_preferences ()
 {
   emit apply_new_settings ();
 }
 
-void qt_interpreter_events::show_terminal_window ()
+void
+qt_interpreter_events::show_terminal_window ()
 {
   emit show_terminal_window_signal ();
 }
 
-bool qt_interpreter_events::show_documentation (const std::string& file)
+bool
+qt_interpreter_events::show_documentation (const std::string& file)
 {
   emit show_documentation_signal (QString::fromStdString (file));
 
   return true;
 }
 
-void qt_interpreter_events::show_file_browser ()
+void
+qt_interpreter_events::show_file_browser ()
 {
   emit show_file_browser_signal ();
 }
 
-void qt_interpreter_events::show_command_history ()
+void
+qt_interpreter_events::show_command_history ()
 {
   emit show_command_history_signal ();
 }
 
-void qt_interpreter_events::show_workspace ()
+void
+qt_interpreter_events::show_workspace ()
 {
   emit show_workspace_signal ();
 }
 
-void qt_interpreter_events::show_community_news (int serial)
+void
+qt_interpreter_events::show_community_news (int serial)
 {
   emit show_community_news_signal (serial);
 }
 
-void qt_interpreter_events::show_release_notes ()
+void
+qt_interpreter_events::show_release_notes ()
 {
   emit show_release_notes_signal ();
 }
 
-bool qt_interpreter_events::edit_file (const std::string& file)
+bool
+qt_interpreter_events::edit_file (const std::string& file)
 {
   emit edit_file_signal (QString::fromStdString (file));
 
   return true;
 }
 
-void qt_interpreter_events::edit_variable (const std::string& expr,
-                                           const octave_value& val)
+void
+qt_interpreter_events::edit_variable (const std::string& expr,
+                                      const octave_value& val)
 {
   emit edit_variable_signal (QString::fromStdString (expr), val);
 }
 
-bool qt_interpreter_events::confirm_shutdown ()
+bool
+qt_interpreter_events::confirm_shutdown ()
 {
   QMutexLocker autolock (&m_mutex);
 
@@ -323,7 +338,8 @@
   return m_result.toBool ();
 }
 
-bool qt_interpreter_events::prompt_new_edit_file (const std::string& file)
+bool
+qt_interpreter_events::prompt_new_edit_file (const std::string& file)
 {
   gui_settings settings;
 
@@ -392,7 +408,8 @@
   return retval;
 }
 
-uint8NDArray qt_interpreter_events::get_named_icon (const std::string& name)
+uint8NDArray
+qt_interpreter_events::get_named_icon (const std::string& name)
 {
   QMutexLocker autolock (&m_mutex);
 
@@ -435,7 +452,8 @@
   return retval;
 }
 
-void qt_interpreter_events::get_named_icon_slot (const QString& name)
+void
+qt_interpreter_events::get_named_icon_slot (const QString& name)
 {
   QMutexLocker autolock (&m_mutex);
 
@@ -466,14 +484,16 @@
   return pref.toStdString ();
 }
 
-bool qt_interpreter_events::copy_image_to_clipboard (const std::string& file)
+bool
+qt_interpreter_events::copy_image_to_clipboard (const std::string& file)
 {
   emit copy_image_to_clipboard_signal (QString::fromStdString (file), true);
 
   return true;
 }
 
-void qt_interpreter_events::focus_window (const std::string win_name)
+void
+qt_interpreter_events::focus_window (const std::string win_name)
 {
   emit focus_window_signal (QString::fromStdString (win_name));
 }
@@ -484,17 +504,20 @@
   emit execute_command_in_terminal_signal (QString::fromStdString (command));
 }
 
-void qt_interpreter_events::register_documentation (const std::string& file)
+void
+qt_interpreter_events::register_documentation (const std::string& file)
 {
   emit register_documentation_signal (QString::fromStdString (file));
 }
 
-void qt_interpreter_events::unregister_documentation (const std::string& file)
+void
+qt_interpreter_events::unregister_documentation (const std::string& file)
 {
   emit unregister_documentation_signal (QString::fromStdString (file));
 }
 
-void qt_interpreter_events::interpreter_output (const std::string& msg)
+void
+qt_interpreter_events::interpreter_output (const std::string& msg)
 {
   if (m_octave_qobj.experimental_terminal_widget ()
       && m_octave_qobj.have_terminal_window ())
@@ -506,8 +529,9 @@
     }
 }
 
-void qt_interpreter_events::display_exception (const execution_exception& ee,
-                                               bool beep)
+void
+qt_interpreter_events::display_exception (const execution_exception& ee,
+    bool beep)
 {
   if (m_octave_qobj.experimental_terminal_widget ()
       && m_octave_qobj.have_terminal_window ())
@@ -528,25 +552,29 @@
     }
 }
 
-void qt_interpreter_events::gui_status_update (const std::string& feature,
-                                               const std::string& status)
+void
+qt_interpreter_events::gui_status_update (const std::string& feature,
+    const std::string& status)
 {
   emit gui_status_update_signal (QString::fromStdString (feature),
                                  QString::fromStdString (status));
 }
 
-void qt_interpreter_events::update_gui_lexer ()
+void
+qt_interpreter_events::update_gui_lexer ()
 {
   emit update_gui_lexer_signal (true);
 }
 
-void qt_interpreter_events::directory_changed (const std::string& dir)
+void
+qt_interpreter_events::directory_changed (const std::string& dir)
 {
   emit directory_changed_signal (QString::fromStdString (dir));
 }
 
-void qt_interpreter_events::file_remove (const std::string& old_name,
-                                         const std::string& new_name)
+void
+qt_interpreter_events::file_remove (const std::string& old_name,
+                                    const std::string& new_name)
 {
   QMutexLocker autolock (&m_mutex);
 
@@ -558,14 +586,16 @@
   wait ();
 }
 
-void qt_interpreter_events::file_renamed (bool load_new)
+void
+qt_interpreter_events::file_renamed (bool load_new)
 {
   emit file_renamed_signal (load_new);
 }
 
-void qt_interpreter_events::set_workspace (bool top_level, bool debug,
-                                           const symbol_info_list& syminfo,
-                                           bool update_variable_editor)
+void
+qt_interpreter_events::set_workspace (bool top_level, bool debug,
+                                      const symbol_info_list& syminfo,
+                                      bool update_variable_editor)
 {
   if (! top_level && ! debug)
     return;
@@ -576,17 +606,20 @@
     emit refresh_variable_editor_signal ();
 }
 
-void qt_interpreter_events::clear_workspace ()
+void
+qt_interpreter_events::clear_workspace ()
 {
   emit clear_workspace_signal ();
 }
 
-void qt_interpreter_events::update_prompt (const std::string& prompt)
+void
+qt_interpreter_events::update_prompt (const std::string& prompt)
 {
   emit update_prompt_signal (QString::fromStdString (prompt));
 }
 
-void qt_interpreter_events::set_history (const string_vector& hist)
+void
+qt_interpreter_events::set_history (const string_vector& hist)
 {
   QStringList qt_hist;
 
@@ -596,25 +629,30 @@
   emit set_history_signal (qt_hist);
 }
 
-void qt_interpreter_events::append_history (const std::string& hist_entry)
+void
+qt_interpreter_events::append_history (const std::string& hist_entry)
 {
   emit append_history_signal (QString::fromStdString (hist_entry));
 }
 
-void qt_interpreter_events::clear_history ()
+void
+qt_interpreter_events::clear_history ()
 {
   emit clear_history_signal ();
 }
 
-void qt_interpreter_events::pre_input_event ()
+void
+qt_interpreter_events::pre_input_event ()
 { }
 
-void qt_interpreter_events::post_input_event ()
+void
+qt_interpreter_events::post_input_event ()
 { }
 
-void qt_interpreter_events::enter_debugger_event (const std::string& /*fcn_name*/,
-                                                  const std::string& fcn_file_name,
-                                                  int line)
+void
+qt_interpreter_events::enter_debugger_event (const std::string& /*fcn_name*/,
+    const std::string& fcn_file_name,
+    int line)
 {
   if (fcn_file_name.empty ())
     return;
@@ -631,7 +669,8 @@
   delete_debugger_pointer (file, line);
 }
 
-void qt_interpreter_events::exit_debugger_event ()
+void
+qt_interpreter_events::exit_debugger_event ()
 {
   emit exit_debugger_signal ();
 }
@@ -639,10 +678,11 @@
 //! Display (if @c insert true) or remove the appropriate symbol for a
 //! breakpoint in @c file at @c line with condition @c cond.
 
-void qt_interpreter_events::update_breakpoint (bool insert,
-                                               const std::string& file,
-                                               int line,
-                                               const std::string& cond)
+void
+qt_interpreter_events::update_breakpoint (bool insert,
+                                          const std::string& file,
+                                          int line,
+                                          const std::string& cond)
 {
   emit update_breakpoint_marker_signal (insert, QString::fromStdString (file),
                                         line, QString::fromStdString (cond));
--- a/libgui/src/release-notes.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/release-notes.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -106,7 +106,8 @@
   move (20, 20);  // move to the top left corner
 }
 
-void release_notes::display ()
+void
+release_notes::display ()
 {
   if (! isVisible ())
     show ();
--- a/libgui/src/set-path-dialog.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/set-path-dialog.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -172,13 +172,15 @@
   restoreGeometry (settings.value(pd_geometry.settings_key ()).toByteArray());
 }
 
-void set_path_dialog::update_model ()
+void
+set_path_dialog::update_model ()
 {
   set_path_model *m = static_cast<set_path_model *> (m_path_list->model ());
   m->path_to_model ();
 }
 
-void set_path_dialog::add_dir_common (bool subdirs)
+void
+set_path_dialog::add_dir_common (bool subdirs)
 {
   QString dir
     = QFileDialog::getExistingDirectory (this, tr ("Open Directory"),
@@ -203,17 +205,20 @@
     }
 }
 
-void set_path_dialog::add_dir()
+void
+set_path_dialog::add_dir()
 {
   add_dir_common (false);
 }
 
-void set_path_dialog::add_dir_subdirs ()
+void
+set_path_dialog::add_dir_subdirs ()
 {
   add_dir_common (true);
 }
 
-void set_path_dialog::rm_dir ()
+void
+set_path_dialog::rm_dir ()
 {
   set_path_model *m = static_cast<set_path_model *> (m_path_list->model ());
   QItemSelectionModel *selmodel = m_path_list->selectionModel ();
@@ -223,7 +228,8 @@
   selmodel->clearSelection ();
 }
 
-void set_path_dialog::move_dir_up ()
+void
+set_path_dialog::move_dir_up ()
 {
   set_path_model *m = static_cast<set_path_model *> (m_path_list->model ());
   QItemSelectionModel *selmodel = m_path_list->selectionModel ();
@@ -243,7 +249,8 @@
   m_path_list->scrollTo (m->index (min_row));
 }
 
-void set_path_dialog::move_dir_down ()
+void
+set_path_dialog::move_dir_down ()
 {
   set_path_model *m = static_cast<set_path_model *> (m_path_list->model ());
   QItemSelectionModel *selmodel = m_path_list->selectionModel ();
@@ -263,7 +270,8 @@
   m_path_list->scrollTo (m->index (max_row));
 }
 
-void set_path_dialog::move_dir_top ()
+void
+set_path_dialog::move_dir_top ()
 {
   set_path_model *m = static_cast<set_path_model *> (m_path_list->model ());
   QItemSelectionModel *selmodel = m_path_list->selectionModel ();
@@ -278,7 +286,8 @@
   m_path_list->scrollTo (m->index (0));
 }
 
-void set_path_dialog::move_dir_bottom ()
+void
+set_path_dialog::move_dir_bottom ()
 {
   set_path_model *m = static_cast<set_path_model *> (m_path_list->model ());
   QItemSelectionModel *selmodel = m_path_list->selectionModel ();
@@ -295,14 +304,16 @@
   m_path_list->scrollTo (m->index (row_count - 1));
 }
 
-void set_path_dialog::save_settings ()
+void
+set_path_dialog::save_settings ()
 {
   gui_settings settings;
 
   settings.setValue (pd_geometry.settings_key (), saveGeometry ());
 }
 
-void set_path_dialog::closeEvent (QCloseEvent *e)
+void
+set_path_dialog::closeEvent (QCloseEvent *e)
 {
   save_settings ();
 
--- a/libgui/src/set-path-model.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/set-path-model.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -46,7 +46,7 @@
 OCTAVE_BEGIN_NAMESPACE(octave)
 
 set_path_model::set_path_model (QObject *p)
-: QAbstractListModel (p)
+  : QAbstractListModel (p)
 {
   connect (this, &set_path_model::update_data_signal,
            this, &set_path_model::update_data);
@@ -54,7 +54,8 @@
   m_revertible = false;
 }
 
-std::string set_path_model::to_string ()
+std::string
+set_path_model::to_string ()
 {
   std::string path_sep = directory_path::path_sep_str ();
 
@@ -73,12 +74,13 @@
   return path_str;
 }
 
-void set_path_model::model_to_path ()
+void
+set_path_model::model_to_path ()
 {
   std::string path_str = to_string ();
 
   emit interpreter_event
-    ([=] (interpreter& interp)
+    ([path_str] (interpreter& interp)
     {
       // INTERPRETER THREAD
 
@@ -88,7 +90,8 @@
     });
 }
 
-void set_path_model::clear ()
+void
+set_path_model::clear ()
 {
   beginResetModel ();
 
@@ -97,7 +100,8 @@
   endResetModel ();
 }
 
-void set_path_model::save ()
+void
+set_path_model::save ()
 {
   model_to_path ();
 
@@ -110,7 +114,8 @@
     });
 }
 
-void set_path_model::revert ()
+void
+set_path_model::revert ()
 {
   clear ();
 
@@ -121,7 +126,8 @@
   model_to_path ();
 }
 
-void set_path_model::revert_last ()
+void
+set_path_model::revert_last ()
 {
   clear ();
 
@@ -132,7 +138,8 @@
   model_to_path ();
 }
 
-void set_path_model::add_dir (const QString& p)
+void
+set_path_model::add_dir (const QString& p)
 {
   m_last_dirs = m_dirs;
 
@@ -147,7 +154,8 @@
   model_to_path ();
 }
 
-void set_path_model::rm_dir (const QModelIndexList& indices)
+void
+set_path_model::rm_dir (const QModelIndexList& indices)
 {
   m_last_dirs = m_dirs;
 
@@ -163,7 +171,8 @@
   model_to_path ();
 }
 
-void set_path_model::move_dir_up (const QModelIndexList& indices)
+void
+set_path_model::move_dir_up (const QModelIndexList& indices)
 {
   m_last_dirs = m_dirs;
 
@@ -185,7 +194,8 @@
   model_to_path ();
 }
 
-void set_path_model::move_dir_down (const QModelIndexList& indices)
+void
+set_path_model::move_dir_down (const QModelIndexList& indices)
 {
   m_last_dirs = m_dirs;
 
@@ -208,7 +218,8 @@
   model_to_path ();
 }
 
-void set_path_model::move_dir_top (const QModelIndexList& indices)
+void
+set_path_model::move_dir_top (const QModelIndexList& indices)
 {
   m_last_dirs = m_dirs;
 
@@ -229,7 +240,8 @@
   model_to_path ();
 }
 
-void set_path_model::move_dir_bottom (const QModelIndexList& indices)
+void
+set_path_model::move_dir_bottom (const QModelIndexList& indices)
 {
   m_last_dirs = m_dirs;
 
@@ -252,12 +264,14 @@
   model_to_path ();
 }
 
-int set_path_model::rowCount (const QModelIndex&) const
+int
+set_path_model::rowCount (const QModelIndex&) const
 {
   return m_dirs.size ();
 }
 
-QVariant set_path_model::data (const QModelIndex& idx, int role) const
+QVariant
+set_path_model::data (const QModelIndex& idx, int role) const
 {
   QVariant retval;
   if (idx.isValid ())
@@ -281,7 +295,8 @@
   return retval;
 }
 
-void set_path_model::path_to_model ()
+void
+set_path_model::path_to_model ()
 {
   // The interpreter_event callback function below emits a signal.
   // Because we don't control when that happens, use a guarded pointer
@@ -290,7 +305,7 @@
   QPointer<set_path_model> this_spm (this);
 
   emit interpreter_event
-    ([=] (interpreter& interp)
+    ([this, this_spm] (interpreter& interp)
     {
       // INTERPRETER THREAD
 
@@ -315,7 +330,8 @@
   m_revertible = false;
 }
 
-void set_path_model::update_data (const QStringList& dirs)
+void
+set_path_model::update_data (const QStringList& dirs)
 {
   m_dirs = dirs;
 
--- a/libgui/src/settings-dialog.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/settings-dialog.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -78,7 +78,7 @@
   setupUi (this);
 
   QMessageBox *info = wait_message_box (
-                      tr ("Loading current preferences ... "), this);
+                        tr ("Loading current preferences ... "), this);
 
   read_settings (true);  // it's the first read, prepare everything
 
@@ -105,7 +105,8 @@
   show ();
 }
 
-void settings_dialog::read_settings (bool first)
+void
+settings_dialog::read_settings (bool first)
 {
   gui_settings settings;
 
@@ -490,7 +491,7 @@
   varedit_columnWidth->setValue (settings.int_value (ve_column_width));
   varedit_rowHeight->setValue (settings.int_value (ve_row_height));
   varedit_font->setCurrentFont (QFont (settings.value (ve_font_name.settings_key (),
-                                                        settings.value (cs_font.settings_key (), default_font)).toString ()));
+                                       settings.value (cs_font.settings_key (), default_font)).toString ()));
   varedit_fontSize->setValue (settings.int_value (ve_font_size));
   varedit_useTerminalFont->setChecked (settings.bool_value (ve_use_terminal_font));
   varedit_font->setDisabled (varedit_useTerminalFont->isChecked ());
@@ -578,7 +579,7 @@
       connect (cb_color_mode, &QCheckBox::stateChanged,
                this, &settings_dialog::update_editor_lexers);
       connect (pb_reload_default_colors, &QPushButton::clicked,
-               [=] () { update_editor_lexers (settings_reload_default_colors_flag); });
+               [this] () { update_editor_lexers (settings_reload_default_colors_flag); });
 
       // finally read the lexer colors using the update slot
       update_editor_lexers ();
@@ -603,7 +604,8 @@
 #endif
 }
 
-void settings_dialog::show_tab (const QString& tab)
+void
+settings_dialog::show_tab (const QString& tab)
 {
   gui_settings settings;
 
@@ -620,17 +622,20 @@
     }
 }
 
-void settings_dialog::get_octave_dir ()
+void
+settings_dialog::get_octave_dir ()
 {
   get_dir (le_octave_dir, tr ("Set Octave Startup Directory"));
 }
 
-void settings_dialog::get_file_browser_dir ()
+void
+settings_dialog::get_file_browser_dir ()
 {
   get_dir (le_file_browser_dir, tr ("Set File Browser Startup Directory"));
 }
 
-void settings_dialog::get_dir (QLineEdit *line_edit, const QString& title)
+void
+settings_dialog::get_dir (QLineEdit *line_edit, const QString& title)
 {
   // FIXME: Remove, if for all common KDE versions (bug #54607) is resolved.
   int opts = QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks;
@@ -646,7 +651,8 @@
   line_edit->setText (dir);
 }
 
-void settings_dialog::button_clicked (QAbstractButton *button)
+void
+settings_dialog::button_clicked (QAbstractButton *button)
 {
   QDialogButtonBox::ButtonRole button_role = button_box->buttonRole (button);
 
@@ -682,7 +688,8 @@
     }
 }
 
-void settings_dialog::set_disabled_pref_file_browser_dir (bool disable)
+void
+settings_dialog::set_disabled_pref_file_browser_dir (bool disable)
 {
   cb_restore_file_browser_dir->setDisabled (disable);
 
@@ -699,7 +706,8 @@
 }
 
 // slot for updating enabled state of proxy settings
-void settings_dialog::proxy_items_update ()
+void
+settings_dialog::proxy_items_update ()
 {
   bool use_proxy = use_proxy_server->isChecked ();
 
@@ -731,7 +739,8 @@
 // gui_settings_object so that the user may choose to apply or cancel
 // the action.
 
-void settings_dialog::import_shortcut_set ()
+void
+settings_dialog::import_shortcut_set ()
 {
   if (! overwrite_all_shortcuts ())
     return;
@@ -755,7 +764,8 @@
 // choice to save current application settings or the modified values
 // in the dialog?
 
-void settings_dialog::export_shortcut_set ()
+void
+settings_dialog::export_shortcut_set ()
 {
   QString file = get_shortcuts_file_name (OSC_EXPORT);
 
@@ -772,7 +782,8 @@
 // gui_settings object so that the user may choose to apply or cancel
 // the action.
 
-void settings_dialog::default_shortcut_set ()
+void
+settings_dialog::default_shortcut_set ()
 {
   if (! overwrite_all_shortcuts ())
     return;
@@ -780,7 +791,8 @@
   shortcuts_treewidget->set_default_shortcuts ();
 }
 
-void settings_dialog::update_editor_lexers (int def)
+void
+settings_dialog::update_editor_lexers (int def)
 {
 #if defined (HAVE_QSCINTILLA)
 
@@ -859,7 +871,8 @@
 
 #if defined (HAVE_QSCINTILLA)
 
-void settings_dialog::update_lexer (QsciLexer *lexer, int mode, int def)
+void
+settings_dialog::update_lexer (QsciLexer *lexer, int mode, int def)
 {
   // Get lexer settings and copy from default settings if not yet
   // available in normal settings file
@@ -961,12 +974,13 @@
 
 }
 
-void settings_dialog::get_lexer_settings (QsciLexer *lexer)
+void
+settings_dialog::get_lexer_settings (QsciLexer *lexer)
 {
   gui_settings settings;
 
   int styles[ed_max_lexer_styles];  // array for saving valid styles
-  // (enum is not continuous)
+                                    // (enum is not continuous)
   int max_style = settings.get_valid_lexer_styles (lexer, styles);
   QGridLayout *style_grid = new QGridLayout ();
   QVector<QLabel *> description (max_style);
@@ -1055,7 +1069,8 @@
   tabs_editor_lexers->setCurrentIndex (settings.int_value (sd_last_editor_styles_tab));
 }
 
-void settings_dialog::write_lexer_settings (QsciLexer *lexer)
+void
+settings_dialog::write_lexer_settings (QsciLexer *lexer)
 {
   gui_settings settings;
 
@@ -1070,7 +1085,7 @@
   QWidget *tab = tabs_editor_lexers->
     findChild <QWidget *> (QString (lexer->language ()) + "_styles");
   int styles[ed_max_lexer_styles];  // array for saving valid styles
-  // (enum is not continuous)
+                                    // (enum is not continuous)
 
   int max_style = settings.get_valid_lexer_styles (lexer, styles);
 
@@ -1084,7 +1099,7 @@
   color = findChild <color_picker *> (ed_highlight_current_line_color.settings_key ());
   if (color)
     settings.setValue (ed_highlight_current_line_color.settings_key ()
-                        + settings_color_modes_ext[mode], color->color ());
+                       + settings_color_modes_ext[mode], color->color ());
 
   QString default_font_name
     = settings.string_value (global_mono_font);
@@ -1161,7 +1176,8 @@
 
 #endif
 
-void settings_dialog::write_changed_settings ()
+void
+settings_dialog::write_changed_settings ()
 {
 
   gui_settings settings;
@@ -1391,7 +1407,8 @@
   settings.sync ();
 }
 
-void settings_dialog::read_workspace_colors ()
+void
+settings_dialog::read_workspace_colors ()
 {
   gui_settings settings;
 
@@ -1434,7 +1451,7 @@
   for (int i = 0; i < ws_colors_count; i++)
     {
       description[i] = new QLabel ("    "
-        + tr (ws_color_names.at (i).toStdString ().data ()));
+                                   + tr (ws_color_names.at (i).toStdString ().data ()));
       description[i]->setAlignment (Qt::AlignRight);
       description[i]->setEnabled (colors_enabled);
       connect (m_ws_enable_colors, &QCheckBox::toggled,
@@ -1472,10 +1489,11 @@
   connect (cb_color_mode, &QCheckBox::stateChanged,
            this, &settings_dialog::update_workspace_colors);
   connect (pb_reload_default_colors, &QPushButton::clicked,
-           [=] () { update_workspace_colors (settings_reload_default_colors_flag); });
+           [this] () { update_workspace_colors (settings_reload_default_colors_flag); });
 }
 
-void settings_dialog::update_workspace_colors (int def)
+void
+settings_dialog::update_workspace_colors (int def)
 {
   QCheckBox *cb_color_mode
     = workspace_colors_box->findChild <QCheckBox *> (ws_color_mode.settings_key ());
@@ -1507,7 +1525,8 @@
     }
 }
 
-void settings_dialog::write_workspace_colors ()
+void
+settings_dialog::write_workspace_colors ()
 {
   gui_settings settings;
 
@@ -1535,7 +1554,8 @@
   settings.sync ();
 }
 
-void settings_dialog::read_terminal_colors ()
+void
+settings_dialog::read_terminal_colors ()
 {
   gui_settings settings;
 
@@ -1561,7 +1581,7 @@
   for (unsigned int i = 0; i < cs_colors_count; i++)
     {
       description[i] = new QLabel ("    "
-          + tr (cs_color_names.at (i).toStdString ().data ()));
+                                   + tr (cs_color_names.at (i).toStdString ().data ()));
       description[i]->setAlignment (Qt::AlignRight);
       QColor setting_color = settings.color_value (cs_colors[i], mode);
       color[i] = new color_picker (setting_color);
@@ -1584,10 +1604,11 @@
   connect (cb_color_mode, &QCheckBox::stateChanged,
            this, &settings_dialog::update_terminal_colors);
   connect (pb_reload_default_colors, &QPushButton::clicked,
-           [=] () { update_terminal_colors (settings_reload_default_colors_flag); });
+           [this] () { update_terminal_colors (settings_reload_default_colors_flag); });
 }
 
-void settings_dialog::update_terminal_colors (int def)
+void
+settings_dialog::update_terminal_colors (int def)
 {
   QCheckBox *cb_color_mode
     = terminal_colors_box->findChild <QCheckBox *> (cs_color_mode.settings_key ());
@@ -1619,7 +1640,8 @@
     }
 }
 
-void settings_dialog::write_terminal_colors ()
+void
+settings_dialog::write_terminal_colors ()
 {
   QCheckBox *cb_color_mode
     = terminal_colors_box->findChild <QCheckBox *> (cs_color_mode.settings_key ());
@@ -1644,7 +1666,8 @@
   settings.sync ();
 }
 
-void settings_dialog::read_varedit_colors ()
+void
+settings_dialog::read_varedit_colors ()
 {
   gui_settings settings;
 
@@ -1670,7 +1693,7 @@
   for (int i = 0; i < ve_colors_count; i++)
     {
       description[i] = new QLabel ("    "
-          + tr (ve_color_names.at (i).toStdString ().data ()));
+                                   + tr (ve_color_names.at (i).toStdString ().data ()));
       description[i]->setAlignment (Qt::AlignRight);
 
       QColor setting_color = settings.color_value (ve_colors[i], mode);
@@ -1694,10 +1717,11 @@
   connect (cb_color_mode, &QCheckBox::stateChanged,
            this, &settings_dialog::update_varedit_colors);
   connect (pb_reload_default_colors, &QPushButton::clicked,
-           [=] () { update_varedit_colors (settings_reload_default_colors_flag); });
+           [this] () { update_varedit_colors (settings_reload_default_colors_flag); });
 }
 
-void settings_dialog::update_varedit_colors (int def)
+void
+settings_dialog::update_varedit_colors (int def)
 {
   QCheckBox *cb_color_mode
     = varedit_colors_box->findChild <QCheckBox *> (ve_color_mode.settings_key ());
@@ -1729,7 +1753,8 @@
     }
 }
 
-void settings_dialog::write_varedit_colors ()
+void
+settings_dialog::write_varedit_colors ()
 {
   QCheckBox *cb_color_mode
     = varedit_colors_box->findChild <QCheckBox *> (ve_color_mode.settings_key ());
@@ -1754,7 +1779,8 @@
   settings.sync ();
 }
 
-QString settings_dialog::get_shortcuts_file_name (import_export_action action)
+QString
+settings_dialog::get_shortcuts_file_name (import_export_action action)
 {
   QString file;
 
@@ -1801,7 +1827,8 @@
 //   (XX) - already possible (cancel operation, cancel settings
 //          dialog, re-open settings dialog and export changes).
 
-bool settings_dialog::overwrite_all_shortcuts ()
+bool
+settings_dialog::overwrite_all_shortcuts ()
 {
   QMessageBox msg_box;
 
@@ -1840,7 +1867,8 @@
   return false;
 }
 
-QMessageBox* settings_dialog::wait_message_box (const QString& text, QWidget *p)
+QMessageBox *
+settings_dialog::wait_message_box (const QString& text, QWidget *p)
 {
   QMessageBox *info = new QMessageBox (p);
 
@@ -1860,7 +1888,8 @@
   return info;
 }
 
-void settings_dialog::close_wait_message_box (QMessageBox *mbox)
+void
+settings_dialog::close_wait_message_box (QMessageBox *mbox)
 {
   QApplication::restoreOverrideCursor ();
   mbox->close ();
--- a/libgui/src/shortcuts-tree-widget.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/shortcuts-tree-widget.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -54,7 +54,8 @@
 }
 
 // new keyPressEvent
-void enter_shortcut::keyPressEvent (QKeyEvent *e)
+void
+enter_shortcut::keyPressEvent (QKeyEvent *e)
 {
   if (! m_direct_shortcut)
     {
@@ -85,7 +86,8 @@
 }
 
 // slot for checkbox whether the shortcut is directly entered or not
-void enter_shortcut::handle_direct_shortcut (int state)
+void
+enter_shortcut::handle_direct_shortcut (int state)
 {
   if (state)
     m_direct_shortcut = true;  // the shortcut is directly entered
@@ -94,7 +96,8 @@
 }
 
 // slot for checkbox whether the shift modifier should be added
-void enter_shortcut::handle_shift_modifier (int state)
+void
+enter_shortcut::handle_shift_modifier (int state)
 {
   if (state)
     m_shift_modifier = true;  // the shortcut is directly entered
@@ -117,37 +120,44 @@
   set_actual_text (actual_text);
 }
 
-QString tree_widget_shortcut_item::settings_key () const
+QString
+tree_widget_shortcut_item::settings_key () const
 {
   return m_settings_key;
 }
 
-QString tree_widget_shortcut_item::description () const
+QString
+tree_widget_shortcut_item::description () const
 {
   return text (DESCRIPTION_COLUMN);
 }
 
-void tree_widget_shortcut_item::set_description (const QString& text)
+void
+tree_widget_shortcut_item::set_description (const QString& text)
 {
   setText (DESCRIPTION_COLUMN, text);
 }
 
-QString tree_widget_shortcut_item::default_text () const
+QString
+tree_widget_shortcut_item::default_text () const
 {
   return text (DEFAULT_COLUMN);
 }
 
-void tree_widget_shortcut_item::set_default_text (const QString& text)
+void
+tree_widget_shortcut_item::set_default_text (const QString& text)
 {
   setText (DEFAULT_COLUMN, text);
 }
 
-QString tree_widget_shortcut_item::actual_text () const
+QString
+tree_widget_shortcut_item::actual_text () const
 {
   return text (ACTUAL_COLUMN);
 }
 
-void tree_widget_shortcut_item::set_actual_text (const QString& text)
+void
+tree_widget_shortcut_item::set_actual_text (const QString& text)
 {
   setText (ACTUAL_COLUMN, text);
 }
@@ -262,7 +272,8 @@
   setFocusProxy (m_edit_actual);
 }
 
-void shortcut_edit_dialog::finished (int result)
+void
+shortcut_edit_dialog::finished (int result)
 {
   if (result == QDialog::Rejected)
     return;
@@ -273,7 +284,7 @@
   // organized the sections as child groups instead of using a colon in
   // the settings key to separate the section from the shortcut name.
 
- // Note that m_settings_key doesn't begin with the sc_group prefix.
+  // Note that m_settings_key doesn't begin with the sc_group prefix.
 
   QString my_section = get_shortcut_section (m_settings_key);
   QString actual_text = m_edit_actual->text ();
@@ -333,7 +344,8 @@
   m_shortcut_item->set_actual_text (actual_text);
 }
 
-void shortcut_edit_dialog::set_default_shortcut ()
+void
+shortcut_edit_dialog::set_default_shortcut ()
 {
   // Just remove user-set value so that the default will be used.
   m_edit_actual->setText ("");
@@ -504,8 +516,9 @@
   dialog->show ();
 }
 
-void shortcuts_tree_widget::update_widget_value (const QString& settings_key,
-                                                 const QString& sc_text)
+void
+shortcuts_tree_widget::update_widget_value (const QString& settings_key,
+    const QString& sc_text)
 {
   tree_widget_shortcut_item *item = get_item (settings_key);
 
@@ -546,8 +559,9 @@
   return item;
 }
 
-void shortcuts_tree_widget::update_settings_value (gui_settings& settings,
-                                                   const QString& settings_key)
+void
+shortcuts_tree_widget::update_settings_value (gui_settings& settings,
+    const QString& settings_key)
 {
   tree_widget_shortcut_item *item = get_item (settings_key);
 
@@ -557,7 +571,8 @@
 
 // Refresh the tree view with values from the settings object.
 
-void shortcuts_tree_widget::import_shortcuts (gui_settings& settings)
+void
+shortcuts_tree_widget::import_shortcuts (gui_settings& settings)
 {
   settings.beginGroup (sc_group);
 
@@ -609,7 +624,8 @@
 
 // Export all shortcuts from the tree view to the settings object.
 
-void shortcuts_tree_widget::export_shortcuts (gui_settings& settings)
+void
+shortcuts_tree_widget::export_shortcuts (gui_settings& settings)
 {
   settings.beginGroup (sc_group);
 
@@ -654,7 +670,8 @@
 // Clear all user-defined settings from the tree widget and the
 // application settings.
 
-void shortcuts_tree_widget::set_default_shortcuts ()
+void
+shortcuts_tree_widget::set_default_shortcuts ()
 {
   gui_settings settings;
 
@@ -701,7 +718,8 @@
 // For each key found in application settings object, transfer
 // corresponding setting to the application settings object.
 
-void shortcuts_tree_widget::write_settings ()
+void
+shortcuts_tree_widget::write_settings ()
 {
   gui_settings settings;
 
--- a/libgui/src/tab-bar.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/tab-bar.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -39,36 +39,42 @@
 //
 
 tab_bar::tab_bar (QWidget *p)
-: QTabBar (p), m_context_menu (new QMenu (this))
+  : QTabBar (p), m_context_menu (new QMenu (this))
 { }
 
-void tab_bar::set_rotated (int rotated)
+void
+tab_bar::set_rotated (int rotated)
 {
   m_rotated = rotated;
 }
 
 // slots for tab navigation
-void tab_bar::switch_left_tab ()
+void
+tab_bar::switch_left_tab ()
 {
   switch_tab (-1);
 }
 
-void tab_bar::switch_right_tab ()
+void
+tab_bar::switch_right_tab ()
 {
   switch_tab (1);
 }
 
-void tab_bar::move_tab_left ()
+void
+tab_bar::move_tab_left ()
 {
   switch_tab (-1, true);
 }
 
-void tab_bar::move_tab_right ()
+void
+tab_bar::move_tab_right ()
 {
   switch_tab (1, true);
 }
 
-void tab_bar::switch_tab (int direction, bool movetab)
+void
+tab_bar::switch_tab (int direction, bool movetab)
 {
   int tabs = count ();
 
@@ -91,7 +97,8 @@
     setCurrentIndex (new_pos);
 }
 
-void tab_bar::sort_tabs_alph ()
+void
+tab_bar::sort_tabs_alph ()
 {
   QString current_title = tabText (currentIndex ());
   int tab_with_focus = 0;
@@ -133,7 +140,8 @@
 // https://stackoverflow.com/a/50579369
 
 // Reimplemented size hint allowing rotated tabs
-QSize tab_bar::tabSizeHint (int idx) const
+QSize
+tab_bar::tabSizeHint (int idx) const
 {
   QSize s = QTabBar::tabSizeHint (idx);
   if (m_rotated)
@@ -143,7 +151,8 @@
 }
 
 // Reimplemented paint event allowing rotated tabs
-void tab_bar::paintEvent(QPaintEvent *e)
+void
+tab_bar::paintEvent(QPaintEvent *e)
 {
   // Just process the original event if not rotated
   if (! m_rotated)
@@ -175,7 +184,8 @@
 }
 
 // Reimplement mouse event for filtering out the desired mouse clicks
-void tab_bar::mousePressEvent (QMouseEvent *me)
+void
+tab_bar::mousePressEvent (QMouseEvent *me)
 {
   QPoint click_pos;
   int clicked_idx = -1;
@@ -273,7 +283,8 @@
 }
 
 // Slot if a menu entry in the context menu is activated
-void tab_bar::ctx_menu_activated (QAction *a)
+void
+tab_bar::ctx_menu_activated (QAction *a)
 {
   // If the index of the activated action is in the range of
   // the current tabs, set the related current tab. The basic actions
--- a/libgui/src/terminal-dock-widget.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/terminal-dock-widget.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -72,10 +72,10 @@
                widget, &command_widget::insert_interpreter_output);
 
       connect (this, &terminal_dock_widget::execute_command_signal,
-              con, &console::execute_command);
+               con, &console::execute_command);
 
       connect (this, &terminal_dock_widget::new_command_line_signal,
-              con, &console::new_command_line);
+               con, &console::new_command_line);
 
       m_terminal = widget;
 #endif
@@ -141,32 +141,37 @@
     make_window ();
 }
 
-bool terminal_dock_widget::has_focus () const
+bool
+terminal_dock_widget::has_focus () const
 {
   QWidget *w = widget ();
   return w->hasFocus ();
 }
 
-QTerminal * terminal_dock_widget::get_qterminal ()
+QTerminal *
+terminal_dock_widget::get_qterminal ()
 {
   return (m_experimental_terminal_widget
           ? nullptr : dynamic_cast<QTerminal *> (m_terminal));
 }
 
 #if defined (HAVE_QSCINTILLA)
-command_widget * terminal_dock_widget::get_command_widget ()
+command_widget *
+terminal_dock_widget::get_command_widget ()
 {
   return (m_experimental_terminal_widget
           ? dynamic_cast<command_widget *> (m_terminal) : nullptr);
 }
 #endif
 
-void terminal_dock_widget::notice_settings ()
+void
+terminal_dock_widget::notice_settings ()
 {
   emit settings_changed ();
 }
 
-void terminal_dock_widget::init_command_prompt ()
+void
+terminal_dock_widget::init_command_prompt ()
 {
   if (m_experimental_terminal_widget)
     {
@@ -178,7 +183,8 @@
     }
 }
 
-void terminal_dock_widget::init_control_d_shortcut_behavior ()
+void
+terminal_dock_widget::init_control_d_shortcut_behavior ()
 {
   gui_settings settings;
 
@@ -210,7 +216,7 @@
               break;
             }
         }
-   }
+    }
 }
 
 OCTAVE_END_NAMESPACE(octave)
--- a/libgui/src/variable-editor-model.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/variable-editor-model.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -179,7 +179,7 @@
     }
   else
     {
-      dim_vector dv = elt.dims ();
+      const dim_vector& dv = elt.dims ();
       str = "[" + dv.str () + " " + elt.class_name () + "]";
     }
 
@@ -294,7 +294,7 @@
       if (! lbl_txt.isEmpty ())
         lbl_txt += " ";
 
-      dim_vector dv = m_value.dims ();
+      const dim_vector& dv = m_value.dims ();
 
       lbl_txt += ("["
                   + QString::fromStdString (dv.str ())
@@ -1008,7 +1008,7 @@
   QPointer<variable_editor_model> this_vem (this);
 
   emit interpreter_event
-    ([=] (interpreter& interp)
+    ([this, this_vem, expr, nm, idx] (interpreter& interp)
     {
       // INTERPRETER THREAD
 
@@ -1163,7 +1163,7 @@
   std::string expr = expr_arg.toStdString ();
 
   emit interpreter_event
-    ([=] (interpreter& interp)
+    ([this, expr] (interpreter& interp)
     {
       // INTERPRETER THREAD
 
@@ -1235,7 +1235,7 @@
 variable_editor_model::update_data_cache ()
 {
   emit interpreter_event
-    ([=] (interpreter& interp)
+    ([this] (interpreter& interp)
     {
       // INTERPRETER_THREAD
 
--- a/libgui/src/variable-editor.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/variable-editor.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -291,7 +291,8 @@
     }
 }
 
-void variable_dock_widget::resizeEvent (QResizeEvent *)
+void
+variable_dock_widget::resizeEvent (QResizeEvent *)
 {
   if (m_frame)
     m_frame->resize (size ());
@@ -464,7 +465,7 @@
 
   // No format given, test save default options
   emit interpreter_event
-    ([=] (interpreter& interp)
+    ([this, this_ves, format_string] (interpreter& interp)
       {
         // INTERPRETER THREAD
 
@@ -519,7 +520,7 @@
 
   // Let the interpreter thread do the saving
   emit interpreter_event
-    ([=] (interpreter& interp)
+    ([file, name, format] (interpreter& interp)
       {
         // INTERPRETER THREAD
 
@@ -1063,7 +1064,8 @@
   installEventFilter (this);
 }
 
-bool HoverToolButton::eventFilter (QObject *obj, QEvent *ev)
+bool
+HoverToolButton::eventFilter (QObject *obj, QEvent *ev)
 {
   if (ev->type () == QEvent::HoverEnter)
     emit hovered_signal ();
@@ -1079,7 +1081,8 @@
   installEventFilter (this);
 }
 
-bool ReturnFocusToolButton::eventFilter (QObject *obj, QEvent *ev)
+bool
+ReturnFocusToolButton::eventFilter (QObject *obj, QEvent *ev)
 {
 
   if (ev->type () == QEvent::MouseButtonRelease && isDown ())
@@ -1103,7 +1106,8 @@
   installEventFilter (this);
 }
 
-bool ReturnFocusMenu::eventFilter (QObject *obj, QEvent *ev)
+bool
+ReturnFocusMenu::eventFilter (QObject *obj, QEvent *ev)
 {
   if (ev->type () == QEvent::MouseButtonRelease && underMouse ())
     {
@@ -1175,7 +1179,8 @@
     make_window ();
 }
 
-void variable_editor::focusInEvent (QFocusEvent *ev)
+void
+variable_editor::focusInEvent (QFocusEvent *ev)
 {
   octave_dock_widget::focusInEvent (ev);
 
@@ -1222,7 +1227,7 @@
   for (long long int i = 0; i < m_variables.size (); i++)
     {
       if (m_variables.at (i) != nullptr)
-        disconnect (m_variables.at (i), SIGNAL (destroyed (QObject*)), 0, 0);
+        disconnect (m_variables.at (i), SIGNAL (destroyed (QObject *)), 0, 0);
     }
 }
 
@@ -1303,7 +1308,7 @@
   connect (this, &variable_editor::level_up_signal,
            stack, &variable_editor_stack::levelUp);
   connect (this, &variable_editor::save_signal,
-           stack, [=] () { stack->save (); });
+           stack, [stack] () { stack->save (); });
 
   variable_editor_view *edit_view = stack->edit_view ();
 
@@ -1620,7 +1625,8 @@
 
 // Also updates the font.
 
-void variable_editor::update_colors ()
+void
+variable_editor::update_colors ()
 {
   m_stylesheet = "";
 
--- a/libgui/src/variable-editor.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/variable-editor.h	Mon Feb 26 23:30:33 2024 -0500
@@ -394,7 +394,7 @@
 
   void construct_tool_bar ();
 
-  QList<variable_dock_widget*> m_variables;
+  QList<variable_dock_widget *> m_variables;
 
   QString m_current_focus_vname;
 
--- a/libgui/src/welcome-wizard.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/welcome-wizard.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -33,8 +33,8 @@
 #include <QVBoxLayout>
 
 #if defined (OCTAVE_USE_WINDOWS_API)
-  #define WIN32_LEAN_AND_MEAN
-  #include <windows.h>
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
 #endif
 
 #include "gui-preferences-dw.h"
@@ -91,7 +91,8 @@
 #endif
 }
 
-void welcome_wizard::adjust_size ()
+void
+welcome_wizard::adjust_size ()
 {
   // Get adjusted size for the current page
   adjustSize ();
@@ -106,12 +107,14 @@
     m_max_width = sz.width ();
 }
 
-void welcome_wizard::handle_web_connect_option (int state)
+void
+welcome_wizard::handle_web_connect_option (int state)
 {
   m_allow_web_connect_state = state == Qt::Checked;
 }
 
-void welcome_wizard::show_page ()
+void
+welcome_wizard::show_page ()
 {
   delete m_current_page;
   delete layout ();
@@ -124,21 +127,24 @@
   new_layout->addWidget (m_current_page);
 }
 
-void welcome_wizard::previous_page ()
+void
+welcome_wizard::previous_page ()
 {
   --m_page_list_iterator;
 
   show_page ();
 }
 
-void welcome_wizard::next_page ()
+void
+welcome_wizard::next_page ()
 {
   ++m_page_list_iterator;
 
   show_page ();
 }
 
-void welcome_wizard::accept ()
+void
+welcome_wizard::accept ()
 {
   // Create default settings file.
 
--- a/libgui/src/workspace-view.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libgui/src/workspace-view.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -153,7 +153,8 @@
     make_window ();
 }
 
-void workspace_view::setModel (workspace_model *model)
+void
+workspace_view::setModel (workspace_model *model)
 {
   m_filter_model.setSourceModel (model);
   m_filter_model.setFilterKeyColumn(0);
@@ -231,7 +232,8 @@
   octave_dock_widget::save_settings ();
 }
 
-void workspace_view::set_filter_focus (bool focus)
+void
+workspace_view::set_filter_focus (bool focus)
 {
   if (focus)
     {
--- a/libinterp/corefcn/Cell.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/Cell.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -72,7 +72,7 @@
     {
       resize (dim_vector (n, 1));
 
-      octave_value *dst = fortran_vec ();
+      octave_value *dst = rwdata ();
       auto p = sl.begin ();
 
       for (octave_idx_type i = 0; i < n; i++)
@@ -85,7 +85,7 @@
 {
   octave_idx_type n = sa.numel ();
 
-  octave_value *dst = fortran_vec ();
+  octave_value *dst = rwdata ();
   const std::string *src = sa.data ();
 
   for (octave_idx_type i = 0; i < n; i++)
@@ -344,7 +344,7 @@
 Cell::map (ctype_mapper fcn) const
 {
   Cell retval (dims ());
-  octave_value *r = retval.fortran_vec ();
+  octave_value *r = retval.rwdata ();
 
   const octave_value *p = data ();
 
--- a/libinterp/corefcn/Cell.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/Cell.h	Mon Feb 26 23:30:33 2024 -0500
@@ -37,9 +37,7 @@
 
 class octave_value_list;
 
-class
-OCTINTERP_API
-Cell : public Array<octave_value>
+class OCTINTERP_API Cell : public Array<octave_value>
 {
 public:
 
--- a/libinterp/corefcn/__betainc__.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/__betainc__.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -79,7 +79,7 @@
 
       // Initialize variables used in algorithm
       static const float tiny = math::exp2 (-50.0f);
-      static const float eps = std::numeric_limits<float>::epsilon ();
+      static constexpr float eps = std::numeric_limits<float>::epsilon ();
       float xj, x2, y, Cj, Dj, aj, bj, Deltaj, alpha_j, beta_j;
       int j, maxit;
       maxit = 200;
@@ -150,7 +150,7 @@
 
       // Initialize variables used in algorithm
       static const double tiny = math::exp2 (-100.0);
-      static const double eps = std::numeric_limits<double>::epsilon ();
+      static constexpr double eps = std::numeric_limits<double>::epsilon ();
       double xj, x2, y, Cj, Dj, aj, bj, Deltaj, alpha_j, beta_j;
       int j, maxit;
       maxit = 200;
--- a/libinterp/corefcn/__dsearchn__.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/__dsearchn__.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -57,9 +57,9 @@
   octave_idx_type nxi = xi.columns ();
 
   ColumnVector idx (nxi);
-  double *pidx = idx.fortran_vec ();
+  double *pidx = idx.rwdata ();
   ColumnVector dist (nxi);
-  double *pdist = dist.fortran_vec ();
+  double *pdist = dist.rwdata ();
 
 #define DIST(dd, y, yi, m)                      \
   dd = 0.0;                                     \
--- a/libinterp/corefcn/__expint__.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/__expint__.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -65,7 +65,7 @@
 
       // Initialize variables used in algorithm
       static const FloatComplex tiny = math::exp2 (-50.0f);
-      static const float eps = std::numeric_limits<float>::epsilon ();
+      static constexpr float eps = std::numeric_limits<float>::epsilon ();
       const FloatComplex cone (1.0, 0.0);
       const FloatComplex czero (0.0, 0.0);
       const int maxit = 100;
@@ -123,7 +123,7 @@
 
       // Initialize variables used in algorithm
       static const Complex tiny = math::exp2 (-100.0);
-      static const double eps = std::numeric_limits<double>::epsilon ();
+      static constexpr double eps = std::numeric_limits<double>::epsilon ();
       const Complex cone (1.0, 0.0);
       const Complex czero (0.0, 0.0);
       const int maxit = 200;
--- a/libinterp/corefcn/__gammainc__.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/__gammainc__.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -71,7 +71,7 @@
 
       // Initialize variables used in algorithm
       static const float tiny = math::exp2 (-50.0f);
-      static const float eps = std::numeric_limits<float>::epsilon();
+      static constexpr float eps = std::numeric_limits<float>::epsilon();
       float y, Cj, Dj, bj, aj, Deltaj;
       int j, maxit;
       maxit = 200;
@@ -126,7 +126,7 @@
 
       // Initialize variables used in algorithm
       static const double tiny = math::exp2 (-100.0);
-      static const double eps = std::numeric_limits<double>::epsilon();
+      static constexpr double eps = std::numeric_limits<double>::epsilon();
       double y, Cj, Dj, bj, aj, Deltaj;
       int j, maxit;
       maxit = 200;
--- a/libinterp/corefcn/__ichol__.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/__ichol__.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -254,11 +254,11 @@
   max_len = sm.nnz ();
   max_len += (0.1 * max_len) > n ? 0.1 * max_len : n;
   Array <octave_idx_type> cidx_out_l (dim_vector (n + 1, 1));
-  octave_idx_type *cidx_l = cidx_out_l.fortran_vec ();
+  octave_idx_type *cidx_l = cidx_out_l.rwdata ();
   Array <octave_idx_type> ridx_out_l (dim_vector (max_len, 1));
-  octave_idx_type *ridx_l = ridx_out_l.fortran_vec ();
+  octave_idx_type *ridx_l = ridx_out_l.rwdata ();
   Array <T> data_out_l (dim_vector (max_len, 1));
-  T *data_l = data_out_l.fortran_vec ();
+  T *data_l = data_out_l.rwdata ();
 
   // Working arrays
   OCTAVE_LOCAL_BUFFER (T, w_data, n);
@@ -332,9 +332,9 @@
         {
           max_len += (0.1 * max_len) > n ? 0.1 * max_len : n;
           data_out_l.resize (dim_vector (max_len, 1));
-          data_l = data_out_l.fortran_vec ();
+          data_l = data_out_l.rwdata ();
           ridx_out_l.resize (dim_vector (max_len, 1));
-          ridx_l = ridx_out_l.fortran_vec ();
+          ridx_l = ridx_out_l.rwdata ();
         }
 
       // The sorting of the nonzero elements of the working column can be
@@ -445,7 +445,7 @@
       RowVector sm_col_norms = xcolnorms (sm_l, 1);
       ichol_t <SparseMatrix,
               double, ichol_mult_real, ichol_checkpivot_real>
-              (sm_l, L, sm_col_norms.fortran_vec (), droptol, michol);
+              (sm_l, L, sm_col_norms.rwdata (), droptol, michol);
 
       return ovl (L);
     }
@@ -457,7 +457,7 @@
       Array <Complex> cols_norm = xcolnorms (sm_l, 1);
       ichol_t <SparseComplexMatrix,
               Complex, ichol_mult_complex, ichol_checkpivot_complex>
-              (sm_l, L, cols_norm.fortran_vec (),
+              (sm_l, L, cols_norm.rwdata (),
                Complex (droptol), michol);
 
       return ovl (L);
--- a/libinterp/corefcn/__ilu__.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/__ilu__.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -220,15 +220,15 @@
 
   // L output arrays
   Array <octave_idx_type> ridx_out_l (dim_vector (max_len_l, 1));
-  octave_idx_type *ridx_l = ridx_out_l.fortran_vec ();
+  octave_idx_type *ridx_l = ridx_out_l.rwdata ();
   Array <T> data_out_l (dim_vector (max_len_l, 1));
-  T *data_l = data_out_l.fortran_vec ();
+  T *data_l = data_out_l.rwdata ();
 
   // U output arrays
   Array <octave_idx_type> ridx_out_u (dim_vector (max_len_u, 1));
-  octave_idx_type *ridx_u = ridx_out_u.fortran_vec ();
+  octave_idx_type *ridx_u = ridx_out_u.rwdata ();
   Array <T> data_out_u (dim_vector (max_len_u, 1));
-  T *data_u = data_out_u.fortran_vec ();
+  T *data_u = data_out_u.rwdata ();
 
   // Working arrays
   OCTAVE_LOCAL_BUFFER (octave_idx_type, cidx_l, n + 1);
@@ -293,18 +293,18 @@
         {
           max_len_u += (0.1 * max_len_u) > n ? 0.1 * max_len_u : n;
           data_out_u.resize (dim_vector (max_len_u, 1));
-          data_u = data_out_u.fortran_vec ();
+          data_u = data_out_u.rwdata ();
           ridx_out_u.resize (dim_vector (max_len_u, 1));
-          ridx_u = ridx_out_u.fortran_vec ();
+          ridx_u = ridx_out_u.rwdata ();
         }
 
       if ((max_len_l - total_len_l) < n)
         {
           max_len_l += (0.1 * max_len_l) > n ? 0.1 * max_len_l : n;
           data_out_l.resize (dim_vector (max_len_l, 1));
-          data_l = data_out_l.fortran_vec ();
+          data_l = data_out_l.rwdata ();
           ridx_out_l.resize (dim_vector (max_len_l, 1));
-          ridx_l = ridx_out_l.fortran_vec ();
+          ridx_l = ridx_out_l.rwdata ();
         }
 
       // Expand the working row into the U output data structures
@@ -487,8 +487,8 @@
       RowVector sm_col_norms = xcolnorms (sm);
       ColumnVector sm_row_norms = xrownorms (sm);
       ilu_crout <SparseMatrix, double> (sm_l, sm_u, L, U,
-                                        sm_col_norms.fortran_vec (),
-                                        sm_row_norms.fortran_vec (),
+                                        sm_col_norms.rwdata (),
+                                        sm_row_norms.rwdata (),
                                         droptol, milu);
 
       SparseMatrix speye (DiagMatrix (L.cols (), L.cols (), 1.0));
@@ -505,8 +505,8 @@
       Array<Complex> rows_norm = xrownorms (sm);
 
       ilu_crout <SparseComplexMatrix, Complex> (sm_l, sm_u, L, U,
-          cols_norm.fortran_vec (),
-          rows_norm.fortran_vec (),
+          cols_norm.rwdata (),
+          rows_norm.rwdata (),
           Complex (droptol), milu);
 
       SparseMatrix speye (DiagMatrix (L.cols (), L.cols (), 1.0));
@@ -563,19 +563,19 @@
 
   // Extract pointers to the arrays for faster access inside loops
   Array <octave_idx_type> cidx_out_l (dim_vector (n + 1, 1));
-  octave_idx_type *cidx_l = cidx_out_l.fortran_vec ();
+  octave_idx_type *cidx_l = cidx_out_l.rwdata ();
   Array <octave_idx_type> ridx_out_l (dim_vector (max_len_l, 1));
-  octave_idx_type *ridx_l = ridx_out_l.fortran_vec ();
+  octave_idx_type *ridx_l = ridx_out_l.rwdata ();
   Array <T> data_out_l (dim_vector (max_len_l, 1));
-  T *data_l = data_out_l.fortran_vec ();
+  T *data_l = data_out_l.rwdata ();
 
   // Data for U
   Array <octave_idx_type> cidx_out_u (dim_vector (n + 1, 1));
-  octave_idx_type *cidx_u = cidx_out_u.fortran_vec ();
+  octave_idx_type *cidx_u = cidx_out_u.rwdata ();
   Array <octave_idx_type> ridx_out_u (dim_vector (max_len_u, 1));
-  octave_idx_type *ridx_u = ridx_out_u.fortran_vec ();
+  octave_idx_type *ridx_u = ridx_out_u.rwdata ();
   Array <T> data_out_u (dim_vector (max_len_u, 1));
-  T *data_u = data_out_u.fortran_vec ();
+  T *data_u = data_out_u.rwdata ();
 
   // Working arrays and permutation arrays
   octave_idx_type w_len_u, w_len_l;
@@ -585,7 +585,7 @@
   std::set <octave_idx_type>::iterator it, it2;
   OCTAVE_LOCAL_BUFFER (T, w_data, n);
   OCTAVE_LOCAL_BUFFER (octave_idx_type, iperm, n);
-  octave_idx_type *perm = perm_vec.fortran_vec ();
+  octave_idx_type *perm = perm_vec.rwdata ();
   OCTAVE_LOCAL_BUFFER (octave_idx_type, uptr, n);
 
   // Initialize working and permutation arrays
@@ -770,18 +770,18 @@
         {
           max_len_u += (0.1 * max_len_u) > n ? 0.1 * max_len_u : n;
           data_out_u.resize (dim_vector (max_len_u, 1));
-          data_u = data_out_u.fortran_vec ();
+          data_u = data_out_u.rwdata ();
           ridx_out_u.resize (dim_vector (max_len_u, 1));
-          ridx_u = ridx_out_u.fortran_vec ();
+          ridx_u = ridx_out_u.rwdata ();
         }
 
       if ((max_len_l - total_len_l) < n)
         {
           max_len_l += (0.1 * max_len_l) > n ? 0.1 * max_len_l : n;
           data_out_l.resize (dim_vector (max_len_l, 1));
-          data_l = data_out_l.fortran_vec ();
+          data_l = data_out_l.rwdata ();
           ridx_out_l.resize (dim_vector (max_len_l, 1));
-          ridx_l = ridx_out_l.fortran_vec ();
+          ridx_l = ridx_out_l.rwdata ();
         }
 
       // Expand working vector into U.
@@ -935,7 +935,7 @@
       Array <octave_idx_type> perm (dim_vector (sm.cols (), 1));
 
       ilu_tp <SparseMatrix, double> (sm, L, U, nnz_u, nnz_l,
-                                     rc_norm.fortran_vec (),
+                                     rc_norm.rwdata (),
                                      perm, droptol, thresh, milu, udiag);
 
       SparseMatrix speye (DiagMatrix (L.cols (), L.cols (), 1.0));
@@ -976,7 +976,7 @@
       Array <octave_idx_type> perm (dim_vector (sm.cols (), 1));
 
       ilu_tp <SparseComplexMatrix, Complex>
-      (sm, L, U, nnz_u, nnz_l, rc_norm.fortran_vec (), perm,
+      (sm, L, U, nnz_u, nnz_l, rc_norm.rwdata (), perm,
        Complex (droptol), Complex (thresh), milu, udiag);
 
       SparseMatrix speye (DiagMatrix (L.cols (), L.cols (), 1.0));
--- a/libinterp/corefcn/__lin_interpn__.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/__lin_interpn__.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -212,7 +212,7 @@
   OCTAVE_LOCAL_BUFFER (octave_idx_type, scale, n);
 
   const DT *v = V.data ();
-  DT *vi = Vi.fortran_vec ();
+  DT *vi = Vi.rwdata ();
   octave_idx_type Ni = Vi.numel ();
 
   // offset in memory of each dimension
--- a/libinterp/corefcn/__magick_read__.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/__magick_read__.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -176,8 +176,7 @@
   return output;
 }
 
-class
-image_region
+class image_region
 {
 public:
 
@@ -301,7 +300,7 @@
   const octave_idx_type def_elem = frameidx(0);
 
   T img       = T (dim_vector (nRows, nCols, 1, nFrames));
-  P *img_fvec = img.fortran_vec ();
+  P *img_fvec = img.rwdata ();
 
   const octave_idx_type row_start = region.row_start ();
   const octave_idx_type col_start = region.col_start ();
@@ -359,7 +358,7 @@
               const double *amap_fvec = amap.data ();
 
               NDArray alpha (dim_vector (nRows, nCols, 1, nFrames));
-              double *alpha_fvec = alpha.fortran_vec ();
+              double *alpha_fvec = alpha.rwdata ();
 
               // GraphicsMagick stores the alpha values inverted, i.e.,
               // 1 for transparent and 0 for opaque so we fix that here.
@@ -527,7 +526,7 @@
     case Magick::GrayscaleType:         // Grayscale image
       {
         img = T (dim_vector (nRows, nCols, 1, nFrames));
-        P *img_fvec = img.fortran_vec ();
+        P *img_fvec = img.rwdata ();
 
         octave_idx_type idx = 0;
         for (octave_idx_type frame = 0; frame < nFrames; frame++)
@@ -555,8 +554,8 @@
       {
         img = T (dim_vector (nRows, nCols, 1, nFrames));
         T alpha (dim_vector (nRows, nCols, 1, nFrames));
-        P *img_fvec = img.fortran_vec ();
-        P *a_fvec   = alpha.fortran_vec ();
+        P *img_fvec = img.rwdata ();
+        P *a_fvec   = alpha.rwdata ();
 
         octave_idx_type idx = 0;
         for (octave_idx_type frame = 0; frame < nFrames; frame++)
@@ -587,7 +586,7 @@
     case Magick::TrueColorType:         // Truecolor image
       {
         img = T (dim_vector (nRows, nCols, 3, nFrames));
-        P *img_fvec = img.fortran_vec ();
+        P *img_fvec = img.rwdata ();
 
         const octave_idx_type frame_stride = color_stride * 3;
         for (octave_idx_type frame = 0; frame < nFrames; frame++)
@@ -625,8 +624,8 @@
       {
         img = T (dim_vector (nRows, nCols, 3, nFrames));
         T alpha (dim_vector (nRows, nCols, 1, nFrames));
-        P *img_fvec = img.fortran_vec ();
-        P *a_fvec   = alpha.fortran_vec ();
+        P *img_fvec = img.rwdata ();
+        P *a_fvec   = alpha.rwdata ();
 
         const octave_idx_type frame_stride = color_stride * 3;
 
@@ -668,7 +667,7 @@
     case Magick::ColorSeparationType:  // Cyan/Magenta/Yellow/Black (CMYK) image
       {
         img = T (dim_vector (nRows, nCols, 4, nFrames));
-        P *img_fvec = img.fortran_vec ();
+        P *img_fvec = img.rwdata ();
 
         const octave_idx_type frame_stride = color_stride * 4;
         for (octave_idx_type frame = 0; frame < nFrames; frame++)
@@ -708,8 +707,8 @@
       {
         img = T (dim_vector (nRows, nCols, 4, nFrames));
         T alpha (dim_vector (nRows, nCols, 1, nFrames));
-        P *img_fvec = img.fortran_vec ();
-        P *a_fvec   = alpha.fortran_vec ();
+        P *img_fvec = img.rwdata ();
+        P *a_fvec   = alpha.rwdata ();
 
         const octave_idx_type frame_stride = color_stride * 4;
 
@@ -969,7 +968,7 @@
   typedef typename T::element_type P;
   uint32NDArray out (img.dims ());
 
-  octave_uint32 *out_fvec = out.fortran_vec ();
+  octave_uint32 *out_fvec = out.rwdata ();
   const P       *img_fvec = img.data ();
 
   const octave_uint32 max = octave_uint32::max ();
@@ -2090,7 +2089,7 @@
         // be all zeros.  So rather than send a matrix of zeros, we will
         // check for that, and send an empty vector instead.
         RowVector chromaticities (8);
-        double *chroma_fvec = chromaticities.fortran_vec ();
+        double *chroma_fvec = chromaticities.rwdata ();
         img.chromaWhitePoint    (&chroma_fvec[0], &chroma_fvec[1]);
         img.chromaRedPrimary    (&chroma_fvec[2], &chroma_fvec[3]);
         img.chromaGreenPrimary  (&chroma_fvec[4], &chroma_fvec[5]);
--- a/libinterp/corefcn/__pchip_deriv__.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/__pchip_deriv__.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -75,14 +75,14 @@
 
               F77_INT ierr;
               const F77_INT incfd = (rows ? to_f77_int (2*nyr) : 2);
-              volatile const octave_idx_type inc = (rows ? 2 : 2*nyr);
-              volatile octave_idx_type k = 0;
+              const octave_idx_type inc = (rows ? 2 : 2*nyr);
+              octave_idx_type k = 0;
 
-              for (volatile octave_idx_type i = (rows ? nyr : nyc); i > 0; i--)
+              for (octave_idx_type i = (rows ? nyr : nyc); i > 0; i--)
                 {
                   F77_XFCN (pchim, PCHIM, (nx, xvec.data (),
                                            reinterpret_cast<float const *> (ymat.data ()) + k * inc,
-                                           reinterpret_cast<float *> (dmat.fortran_vec ()) + k * inc,
+                                           reinterpret_cast<float *> (dmat.rwdata ()) + k * inc,
                                            incfd, ierr));
 
                   if (ierr < 0)
@@ -91,7 +91,7 @@
 
                   F77_XFCN (pchim, PCHIM, (nx, xvec.data (),
                                            reinterpret_cast<float const *> (ymat.data ()) + 1 + k * inc,
-                                           reinterpret_cast<float *> (dmat.fortran_vec ()) + 1 + k * inc,
+                                           reinterpret_cast<float *> (dmat.rwdata ()) + 1 + k * inc,
                                            incfd, ierr));
 
                   if (ierr < 0)
@@ -117,14 +117,14 @@
 
               F77_INT ierr;
               const F77_INT incfd = (rows ? to_f77_int (nyr) : 1);
-              volatile const octave_idx_type inc = (rows ? 1 : nyr);
-              volatile octave_idx_type k = 0;
+              const octave_idx_type inc = (rows ? 1 : nyr);
+              octave_idx_type k = 0;
 
-              for (volatile octave_idx_type i = (rows ? nyr : nyc); i > 0; i--)
+              for (octave_idx_type i = (rows ? nyr : nyc); i > 0; i--)
                 {
                   F77_XFCN (pchim, PCHIM, (nx, xvec.data (),
                                            ymat.data () + k * inc,
-                                           dmat.fortran_vec () + k * inc,
+                                           dmat.rwdata () + k * inc,
                                            incfd, ierr));
 
                   k++;
@@ -158,14 +158,14 @@
 
               F77_INT ierr;
               const F77_INT incfd = (rows ? to_f77_int (2*nyr) : 2);
-              volatile const octave_idx_type inc = (rows ? 2 : 2*nyr);
-              volatile octave_idx_type k = 0;
+              const octave_idx_type inc = (rows ? 2 : 2*nyr);
+              octave_idx_type k = 0;
 
-              for (volatile octave_idx_type i = (rows ? nyr : nyc); i > 0; i--)
+              for (octave_idx_type i = (rows ? nyr : nyc); i > 0; i--)
                 {
                   F77_XFCN (dpchim, DPCHIM, (nx, xvec.data (),
                                              reinterpret_cast<double const *> (ymat.data ()) + k * inc,
-                                             reinterpret_cast<double *> (dmat.fortran_vec ()) + k * inc,
+                                             reinterpret_cast<double *> (dmat.rwdata ()) + k * inc,
                                              incfd, ierr));
 
                   if (ierr < 0)
@@ -174,7 +174,7 @@
 
                   F77_XFCN (dpchim, DPCHIM, (nx, xvec.data (),
                                              reinterpret_cast<double const *> (ymat.data ()) + 1 + k * inc,
-                                             reinterpret_cast<double *> (dmat.fortran_vec ()) + 1 + k * inc,
+                                             reinterpret_cast<double *> (dmat.rwdata ()) + 1 + k * inc,
                                              incfd, ierr));
 
                   if (ierr < 0)
@@ -200,14 +200,14 @@
 
               F77_INT ierr;
               const F77_INT incfd = (rows ? to_f77_int (nyr) : 1);
-              volatile const octave_idx_type inc = (rows ? 1 : nyr);
-              volatile octave_idx_type k = 0;
+              const octave_idx_type inc = (rows ? 1 : nyr);
+              octave_idx_type k = 0;
 
-              for (volatile octave_idx_type i = (rows ? nyr : nyc); i > 0; i--)
+              for (octave_idx_type i = (rows ? nyr : nyc); i > 0; i--)
                 {
                   F77_XFCN (dpchim, DPCHIM, (nx, xvec.data (),
                                              ymat.data () + k * inc,
-                                             dmat.fortran_vec () + k * inc,
+                                             dmat.rwdata () + k * inc,
                                              incfd, ierr));
                   k++;
 
--- a/libinterp/corefcn/amd.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/amd.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -147,7 +147,7 @@
 
   OCTAVE_LOCAL_BUFFER (suitesparse_integer, P, n_col);
   Matrix xinfo (AMD_INFO, 1);
-  double *Info = xinfo.fortran_vec ();
+  double *Info = xinfo.rwdata ();
 
   // FIXME: how can we manage the memory allocation of amd
   //        in a cleaner manner?
--- a/libinterp/corefcn/auto-shlib.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/auto-shlib.h	Mon Feb 26 23:30:33 2024 -0500
@@ -37,9 +37,7 @@
 // time.  When deriving new classes, you can either use it as a field or
 // as a parent (with multiple inheritance).
 
-class
-OCTINTERP_API
-auto_shlib : public dynamic_library
+class OCTINTERP_API auto_shlib : public dynamic_library
 {
 public:
 
--- a/libinterp/corefcn/base-text-renderer.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/base-text-renderer.h	Mon Feb 26 23:30:33 2024 -0500
@@ -40,8 +40,7 @@
 
 OCTAVE_BEGIN_NAMESPACE(octave)
 
-class
-base_text_renderer : public text_processor
+class base_text_renderer : public text_processor
 {
 public:
 
--- a/libinterp/corefcn/besselj.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/besselj.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -153,8 +153,8 @@
         }
       else
         {
-          dim_vector dv0 = args(0).dims ();
-          dim_vector dv1 = args(1).dims ();
+          const dim_vector& dv0 = args(0).dims ();
+          const dim_vector& dv1 = args(1).dims ();
 
           bool args0_is_row_vector = (dv0(1) == dv0.numel ());
           bool args1_is_col_vector = (dv1(0) == dv1.numel ());
@@ -244,8 +244,8 @@
         }
       else
         {
-          dim_vector dv0 = args(0).dims ();
-          dim_vector dv1 = args(1).dims ();
+          const dim_vector& dv0 = args(0).dims ();
+          const dim_vector& dv1 = args(1).dims ();
 
           bool args0_is_row_vector = (dv0(1) == dv0.numel ());
           bool args1_is_col_vector = (dv1(0) == dv1.numel ());
--- a/libinterp/corefcn/bitfcns.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/bitfcns.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -89,8 +89,8 @@
 
   bool is_scalar_op = (nelx == 1 || nely == 1);
 
-  dim_vector dvx = x.dims ();
-  dim_vector dvy = y.dims ();
+  const dim_vector& dvx = x.dims ();
+  const dim_vector& dvy = y.dims ();
 
   bool is_array_op = (dvx == dvy);
 
@@ -475,8 +475,8 @@
                                                                         \
   bool is_scalar_op = (m_nel == 1 || n_nel == 1);                       \
                                                                         \
-  dim_vector m_dv = m.dims ();                                          \
-  dim_vector n_dv = n.dims ();                                          \
+  const dim_vector& m_dv = m.dims ();                                   \
+  const dim_vector& n_dv = n.dims ();                                   \
                                                                         \
   bool is_array_op = (m_dv == n_dv);                                    \
                                                                         \
--- a/libinterp/corefcn/c-file-ptr-stream.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/c-file-ptr-stream.h	Mon Feb 26 23:30:33 2024 -0500
@@ -37,8 +37,7 @@
 
 OCTAVE_BEGIN_NAMESPACE(octave)
 
-class
-c_file_ptr_buf : public std::streambuf
+class c_file_ptr_buf : public std::streambuf
 {
 public:
 
@@ -106,8 +105,7 @@
 // FIXME: the following three classes could probably share some code...
 
 template <typename STREAM_T, typename FILE_T, typename BUF_T>
-class
-c_file_ptr_stream : public STREAM_T
+class c_file_ptr_stream : public STREAM_T
 {
 public:
 
@@ -148,8 +146,7 @@
 
 #if defined (HAVE_ZLIB)
 
-class
-c_zfile_ptr_buf : public std::streambuf
+class c_zfile_ptr_buf : public std::streambuf
 {
 public:
 
--- a/libinterp/corefcn/call-stack.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/call-stack.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -1054,7 +1054,7 @@
 
       push (tmp_scope);
 
-      unwind_action restore_scope ([=] () { pop (); });
+      unwind_action restore_scope ([this] () { pop (); });
 
       interpreter& interp = m_evaluator.get_interpreter ();
 
@@ -1142,7 +1142,7 @@
                   symbol_info syminf (nm, value, is_formal, is_global,
                                       is_persistent);
 
-                  symbol_stats.append (syminf);
+                  symbol_stats.push_back (syminf);
                 }
               else
                 symbol_names.push_back (nm);
--- a/libinterp/corefcn/call-stack.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/call-stack.h	Mon Feb 26 23:30:33 2024 -0500
@@ -50,9 +50,7 @@
 class symbol_info_list;
 class unwind_protect;
 
-class
-OCTINTERP_API
-call_stack
+class OCTINTERP_API call_stack
 {
 public:
 
--- a/libinterp/corefcn/cellfun.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/cellfun.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -197,7 +197,7 @@
 
       for (octave_idx_type count = 0; count < k; count++)
         {
-          dim_vector dv = f_args.elem (count).dims ();
+          const dim_vector& dv = f_args.elem (count).dims ();
           if (d < dv.ndims ())
             result(count) = static_cast<double> (dv(d));
           else
@@ -1789,7 +1789,7 @@
   if (! dimv.isempty ())
     error ("num2cell (A, dim) not implemented for class objects");
 
-  dim_vector dv = get_object_dims (array);
+  const dim_vector& dv = get_object_dims (array);
 
   retval.resize (dv);
 
--- a/libinterp/corefcn/chol.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/chol.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -1187,9 +1187,9 @@
 positive definite matrix @w{@var{A} = @var{R}'*@var{R}}, @var{R}@tie{}upper
 triangular, return the Cholesky@tie{}factorization of
 @w{@var{A}(p,p)}, where @w{p} is the permutation @*
-@code{p = [1:i-1, shift(i:j, 1), j+1:n]} if @w{@var{i} < @var{j}} @*
+@code{p = [1:i-1, circshift(i:j, 1), j+1:n]} if @w{@var{i} < @var{j}} @*
  or @*
-@code{p = [1:j-1, shift(j:i,-1), i+1:n]} if @w{@var{j} < @var{i}}.  @*
+@code{p = [1:j-1, circshift(j:i,-1), i+1:n]} if @w{@var{j} < @var{i}}.  @*
 
 @seealso{chol, cholupdate, cholinsert, choldelete}
 @end deftypefn */)
@@ -1276,13 +1276,13 @@
 %!test
 %! R = chol (A);
 %!
-%! i = 1;  j = 3;  p = [1:i-1, shift(i:j,-1), j+1:4];
+%! i = 1;  j = 3;  p = [1:i-1, circshift(i:j,-1), j+1:4];
 %! R1 = cholshift (R, i, j);
 %!
 %! assert (norm (triu (R1)-R1, Inf), 0);
 %! assert (norm (R1'*R1 - A(p,p), Inf), 0, 1e1*eps);
 %!
-%! j = 1;  i = 3;  p = [1:j-1, shift(j:i,+1), i+1:4];
+%! j = 1;  i = 3;  p = [1:j-1, circshift(j:i,+1), i+1:4];
 %! R1 = cholshift (R, i, j);
 %!
 %! assert (norm (triu (R1) - R1, Inf), 0);
@@ -1291,13 +1291,13 @@
 %!test
 %! R = chol (Ac);
 %!
-%! i = 1;  j = 3;  p = [1:i-1, shift(i:j,-1), j+1:4];
+%! i = 1;  j = 3;  p = [1:i-1, circshift(i:j,-1), j+1:4];
 %! R1 = cholshift (R, i, j);
 %!
 %! assert (norm (triu (R1)-R1, Inf), 0);
 %! assert (norm (R1'*R1 - Ac(p,p), Inf), 0, 1e1*eps);
 %!
-%! j = 1;  i = 3;  p = [1:j-1, shift(j:i,+1), i+1:4];
+%! j = 1;  i = 3;  p = [1:j-1, circshift(j:i,+1), i+1:4];
 %! R1 = cholshift (R, i, j);
 %!
 %! assert (norm (triu (R1)-R1, Inf), 0);
@@ -1306,13 +1306,13 @@
 %!test
 %! R = chol (single (A));
 %!
-%! i = 1;  j = 3;  p = [1:i-1, shift(i:j,-1), j+1:4];
+%! i = 1;  j = 3;  p = [1:i-1, circshift(i:j,-1), j+1:4];
 %! R1 = cholshift (R, i, j);
 %!
 %! assert (norm (triu (R1)-R1, Inf), 0);
 %! assert (norm (R1'*R1 - single (A(p,p)), Inf), 0, 1e1* eps ("single"));
 %!
-%! j = 1;  i = 3;  p = [1:j-1, shift(j:i,+1), i+1:4];
+%! j = 1;  i = 3;  p = [1:j-1, circshift(j:i,+1), i+1:4];
 %! R1 = cholshift (R, i, j);
 %!
 %! assert (norm (triu (R1)-R1, Inf), 0);
@@ -1321,13 +1321,13 @@
 %!test
 %! R = chol (single (Ac));
 %!
-%! i = 1;  j = 3;  p = [1:i-1, shift(i:j,-1), j+1:4];
+%! i = 1;  j = 3;  p = [1:i-1, circshift(i:j,-1), j+1:4];
 %! R1 = cholshift (R, i, j);
 %!
 %! assert (norm (triu (R1)-R1, Inf), 0);
 %! assert (norm (R1'*R1 - single (Ac(p,p)), Inf), 0, 1e1* eps ("single"));
 %!
-%! j = 1; i = 3; p = [1:j-1, shift(j:i,+1), i+1:4];
+%! j = 1; i = 3; p = [1:j-1, circshift(j:i,+1), i+1:4];
 %! R1 = cholshift (R, i, j);
 %!
 %! assert (norm (triu (R1)-R1, Inf), 0);
--- a/libinterp/corefcn/data.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/data.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -2006,7 +2006,7 @@
               // the right type.
               tmp = cat_op (tmp, args(j), ra_idx);
 
-              dim_vector dv_tmp = args(j).dims ();
+              const dim_vector& dv_tmp = args(j).dims ();
 
               if (dim >= dv_len)
                 {
@@ -2938,11 +2938,11 @@
 
   if (nargin >= 1)
     {
-      dim_vector a_dims = args(0).dims ();
+      const dim_vector& a_dims = args(0).dims ();
 
       for (int i = 1; i < nargin; ++i)
         {
-          dim_vector b_dims = args(i).dims ();
+          const dim_vector& b_dims = args(i).dims ();
 
           if (a_dims != b_dims)
             return ovl (false);
@@ -3004,9 +3004,14 @@
 DEFUN (rows, args, ,
        doc: /* -*- texinfo -*-
 @deftypefn {} {@var{nr} =} rows (@var{A})
+@deftypefnx () {@var{nr} =} height (@var{A})
 Return the number of rows of @var{A}.
 
 This is equivalent to @code{size (@var{A}, 1)}.
+
+Programming Note: @code{height} is an alias for @code{rows} and can be
+used interchangeably.
+
 @seealso{columns, size, length, numel, isscalar, isvector, ismatrix}
 @end deftypefn */)
 {
@@ -3019,6 +3024,8 @@
   return ovl ((octave_value (args(0)).size ())(0));
 }
 
+DEFALIAS (height, rows);
+
 /*
 %!assert (rows (ones (2,5)), 2)
 %!assert (rows (ones (5,2)), 5)
@@ -3049,9 +3056,14 @@
 DEFUN (columns, args, ,
        doc: /* -*- texinfo -*-
 @deftypefn {} {@var{nc} =} columns (@var{A})
+@deftypefnx {} {@var{nc} =} width (@var{A})
 Return the number of columns of @var{A}.
 
 This is equivalent to @code{size (@var{A}, 2)}.
+
+Programming Note: @code{width} is an alias for @code{columns} and can be
+used interchangeably.
+
 @seealso{rows, size, length, numel, isscalar, isvector, ismatrix}
 @end deftypefn */)
 {
@@ -3064,6 +3076,8 @@
   return ovl ((octave_value (args(0)).size ())(1));
 }
 
+DEFALIAS (width, columns);
+
 DEFUN (sum, args, ,
        doc: /* -*- texinfo -*-
 @deftypefn  {} {@var{y} =} sum (@var{x})
@@ -5670,9 +5684,9 @@
   octave_value arg_1 = args(0);
   octave_value arg_2 = args(1);
 
-  dim_vector sz1 = arg_1.dims ();
+  const dim_vector& sz1 = arg_1.dims ();
   bool isvector1 = sz1.ndims () == 2 && (sz1(0) == 1 || sz1(1) == 1);
-  dim_vector sz2 = arg_2.dims ();
+  const dim_vector& sz2 = arg_2.dims ();
   bool isvector2 = sz2.ndims () == 2 && (sz2(0) == 1 || sz2(1) == 1);
 
   if (! isvector1 || ! isvector2)
@@ -7874,7 +7888,7 @@
   else if (idx.extent (n) > n)
     error ("accumdim: index out of range");
 
-  dim_vector vals_dim = vals.dims ();
+  const dim_vector& vals_dim = vals.dims ();
   dim_vector rdv = vals_dim;
 
   if (dim < 0)
@@ -7958,7 +7972,7 @@
           const NDT& tval, const NDT& fval)
 {
   typedef typename NDT::element_type T;
-  dim_vector dv = mask.dims ();
+  const dim_vector& dv = mask.dims ();
   NDT retval (dv);
 
   bool tscl = tval.numel () == 1;
@@ -7967,7 +7981,7 @@
   if ((! tscl && tval.dims () != dv) || (! fscl && fval.dims () != dv))
     error ("merge: MASK, TVAL, and FVAL dimensions must match");
 
-  T *rv = retval.fortran_vec ();
+  T *rv = retval.rwdata ();
   octave_idx_type n = retval.numel ();
 
   const T *tv = tval.data ();
@@ -8348,7 +8362,7 @@
     }
 
   retval.clear (1, l);
-  T *dest = retval.fortran_vec ();
+  T *dest = retval.rwdata ();
   l = 0;
   for (octave_idx_type i = 0; i < n; i++)
     {
--- a/libinterp/corefcn/debug.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/debug.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -592,37 +592,6 @@
   return ovl ();
 }
 
-static void
-do_dbtype (std::ostream& os, const std::string& name, int start, int end)
-{
-  std::string ff = octave::fcn_file_in_path (name);
-
-  if (ff.empty ())
-    os << "dbtype: unknown function " << name << "\n";
-  else
-    {
-      std::ifstream fs = octave::sys::ifstream (ff.c_str (), std::ios::in);
-
-      if (! fs)
-        os << "dbtype: unable to open '" << ff << "' for reading!\n";
-      else
-        {
-          int line = 1;
-          std::string text;
-
-          while (std::getline (fs, text) && line <= end)
-            {
-              if (line >= start)
-                os << line << "\t" << text << "\n";
-
-              line++;
-            }
-        }
-    }
-
-  os.flush ();
-}
-
 DEFMETHOD (dbtype, interp, args, ,
            doc: /* -*- texinfo -*-
 @deftypefn  {} {} dbtype
@@ -647,23 +616,17 @@
 @seealso{dblist, dbwhere, dbstatus, dbstop}
 @end deftypefn */)
 {
-  octave_user_code *dbg_fcn;
-
   string_vector argv = args.make_argv ("dbtype");
 
-  octave::tree_evaluator& tw = interp.get_evaluator ();
+  // Empty means current function on call stack.
+  std::string fcn_name;
+
+  int start = 0;
+  int end = std::numeric_limits<int>::max ();
 
   switch (args.length ())
     {
     case 0:  // dbtype
-      dbg_fcn = tw.get_user_code ();
-
-      if (! dbg_fcn)
-        error ("dbtype: must be inside a user function to give no arguments to dbtype\n");
-
-      do_dbtype (octave_stdout, dbg_fcn->fcn_file_name (),
-                 0, std::numeric_limits<int>::max ());
-
       break;
 
     case 1:  // (dbtype start:end) || (dbtype fcn) || (dbtype lineno)
@@ -674,54 +637,34 @@
 
         if (ind != std::string::npos)  // (dbtype start:end)
           {
-            dbg_fcn = tw.get_user_code ();
-
-            if (dbg_fcn)
-              {
-                std::string start_str = arg.substr (0, ind);
-                std::string end_str = arg.substr (ind + 1);
+            std::string start_str = arg.substr (0, ind);
+            std::string end_str = arg.substr (ind + 1);
 
-                int start, end;
-                start = atoi (start_str.c_str ());
-                if (end_str == "end")
-                  end = std::numeric_limits<int>::max ();
-                else
-                  end = atoi (end_str.c_str ());
+            start = atoi (start_str.c_str ());
+            if (end_str == "end")
+              end = std::numeric_limits<int>::max ();
+            else
+              end = atoi (end_str.c_str ());
 
-                if (std::min (start, end) <= 0)
-                  error ("dbtype: start and end lines must be >= 1\n");
+            if (std::min (start, end) <= 0)
+              error ("dbtype: start and end lines must be >= 1\n");
 
-                if (start > end)
-                  error ("dbtype: start line must be less than end line\n");
-
-                do_dbtype (octave_stdout, dbg_fcn->fcn_file_name (),
-                           start, end);
-              }
+            if (start > end)
+              error ("dbtype: start line must be less than end line\n");
           }
         else  // (dbtype fcn) || (dbtype lineno)
           {
             int line = atoi (arg.c_str ());
 
             if (line == 0)  // (dbtype fcn)
-              {
-                dbg_fcn = tw.get_user_code (arg);
-
-                if (! dbg_fcn)
-                  error ("dbtype: function <%s> not found\n", arg.c_str ());
-
-                do_dbtype (octave_stdout, dbg_fcn->fcn_file_name (),
-                           0, std::numeric_limits<int>::max ());
-              }
+              fcn_name = arg;
             else  // (dbtype lineno)
               {
                 if (line <= 0)
                   error ("dbtype: start and end lines must be >= 1\n");
 
-                dbg_fcn = tw.get_user_code ();
-
-                if (dbg_fcn)
-                  do_dbtype (octave_stdout, dbg_fcn->fcn_file_name (),
-                             line, line);
+                start = line;
+                end = line;
               }
           }
       }
@@ -729,13 +672,9 @@
 
     case 2:  // (dbtype fcn start:end) || (dbtype fcn start)
       {
-        dbg_fcn = tw.get_user_code (argv[1]);
-
-        if (! dbg_fcn)
-          error ("dbtype: function <%s> not found\n", argv[1].c_str ());
+        fcn_name = argv[1];
 
         std::string arg = argv[2];
-        int start, end;
         std::size_t ind = arg.find (':');
 
         if (ind != std::string::npos)
@@ -760,8 +699,6 @@
 
         if (start > end)
           error ("dbtype: start line must be less than end line\n");
-
-        do_dbtype (octave_stdout, dbg_fcn->fcn_file_name (), start, end);
       }
       break;
 
@@ -769,6 +706,22 @@
       error ("dbtype: expecting zero, one, or two arguments\n");
     }
 
+  if (fcn_name.empty ())
+    {
+      octave::tree_evaluator& tw = interp.get_evaluator ();
+
+      tw.debug_type (octave_stdout, start, end);
+    }
+  else
+    {
+      std::string file_name = octave::fcn_file_in_path (fcn_name);
+
+      if (file_name.empty ())
+        error ("dbtype: unknown function '%s'", fcn_name.c_str ());
+
+      octave::display_file_lines (octave_stdout, file_name, start, end, -1, "", "dbtype");
+    }
+
   return ovl ();
 }
 
@@ -785,7 +738,12 @@
 {
   int n = 10;
 
-  if (args.length () == 1)
+  int numel = args.length ();
+
+  if (numel > 1)
+    print_usage ();
+
+  if (numel == 1)
     {
       octave_value arg = args(0);
 
@@ -804,44 +762,7 @@
 
   octave::tree_evaluator& tw = interp.get_evaluator ();
 
-  octave_user_code *dbg_fcn = tw.get_user_code ();
-
-  if (! dbg_fcn)
-    error ("dblist: must be inside a user function to use dblist\n");
-
-  bool have_file = true;
-
-  std::string name = dbg_fcn->fcn_file_name ();
-
-  if (name.empty ())
-    {
-      have_file = false;
-      name = dbg_fcn->name ();
-    }
-
-  int l = tw.debug_user_code_line ();
-
-  if (l > 0)
-    {
-      if (have_file)
-        {
-          int l_min = std::max (l - n/2, 0);
-          int l_max = l + n/2;
-          do_dbtype (octave_stdout, name, l_min, l-1);
-
-          std::string line = dbg_fcn->get_code_line (l);
-
-          if (! line.empty ())
-            octave_stdout << l << "-->\t" << line << std::endl;
-
-          do_dbtype (octave_stdout, name, l+1, l_max);
-        }
-    }
-  else
-    {
-      octave_stdout << "dblist: unable to determine source code line"
-                    << std::endl;
-    }
+  tw.debug_list (octave_stdout, n);
 
   return ovl ();
 }
--- a/libinterp/corefcn/defun-int.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/defun-int.h	Mon Feb 26 23:30:33 2024 -0500
@@ -40,7 +40,7 @@
 
 class interpreter;
 
-extern OCTINTERP_API void print_usage (void);
+extern OCTINTERP_API void print_usage ();
 
 extern OCTINTERP_API void print_usage (const std::string&);
 
@@ -62,14 +62,14 @@
                       const dynamic_library& shl, bool relative = false);
 
 // Gets the shlib of the currently executing DLD function, if any.
-extern OCTINTERP_API dynamic_library get_current_shlib (void);
+extern OCTINTERP_API dynamic_library get_current_shlib ();
 
 OCTAVE_END_NAMESPACE(octave)
 
 // Some of these functions are widely used, so maybe we should avoid
 // deprecating them for now?
 
-inline void print_usage (void)
+inline void print_usage ()
 {
   octave::print_usage ();
 }
@@ -110,7 +110,7 @@
 }
 
 // Gets the shlib of the currently executing DLD function, if any.
-inline octave::dynamic_library get_current_shlib (void)
+inline octave::dynamic_library get_current_shlib ()
 {
   return octave::get_current_shlib ();
 }
--- a/libinterp/corefcn/dlmread.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/dlmread.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -47,10 +47,10 @@
 #include "ovl.h"
 #include "utils.h"
 
-static const octave_idx_type idx_max
+static constexpr octave_idx_type idx_max
   = std::numeric_limits<octave_idx_type>::max () - 1;
 
-static const double idx_max_dbl = double (idx_max);
+static constexpr double idx_max_dbl = double (idx_max);
 
 static bool
 read_cell_spec (std::istream& is, octave_idx_type& row, octave_idx_type& col)
--- a/libinterp/corefcn/dot.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/dot.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -144,7 +144,7 @@
 
           F77_XFCN (cdotc3, CDOTC3, (m, n, k,
                                      F77_CONST_CMPLX_ARG (x.data ()), F77_CONST_CMPLX_ARG (y.data ()),
-                                     F77_CMPLX_ARG (z.fortran_vec ())));
+                                     F77_CMPLX_ARG (z.rwdata ())));
           retval = z;
         }
       else
@@ -156,7 +156,7 @@
 
           F77_XFCN (zdotc3, ZDOTC3, (m, n, k,
                                      F77_CONST_DBLE_CMPLX_ARG (x.data ()), F77_CONST_DBLE_CMPLX_ARG (y.data ()),
-                                     F77_DBLE_CMPLX_ARG (z.fortran_vec ())));
+                                     F77_DBLE_CMPLX_ARG (z.rwdata ())));
           retval = z;
         }
     }
@@ -170,7 +170,7 @@
           FloatNDArray z (dimz);
 
           F77_XFCN (sdot3, SDOT3, (m, n, k, x.data (), y.data (),
-                                   z.fortran_vec ()));
+                                   z.rwdata ()));
           retval = z;
         }
       else
@@ -181,7 +181,7 @@
           NDArray z (dimz);
 
           F77_XFCN (ddot3, DDOT3, (m, n, k, x.data (), y.data (),
-                                   z.fortran_vec ()));
+                                   z.rwdata ()));
           retval = z;
         }
     }
@@ -263,7 +263,7 @@
   F77_XFCN (cmatm3, CMATM3, (m, n, k, np,
                              F77_CONST_CMPLX_ARG (x.data ()),
                              F77_CONST_CMPLX_ARG (y.data ()),
-                             F77_CMPLX_ARG (z.fortran_vec ())));
+                             F77_CMPLX_ARG (z.rwdata ())));
 }
 
 template <>
@@ -275,7 +275,7 @@
   F77_XFCN (zmatm3, ZMATM3, (m, n, k, np,
                              F77_CONST_DBLE_CMPLX_ARG (x.data ()),
                              F77_CONST_DBLE_CMPLX_ARG (y.data ()),
-                             F77_DBLE_CMPLX_ARG (z.fortran_vec ())));
+                             F77_DBLE_CMPLX_ARG (z.rwdata ())));
 }
 
 template <>
@@ -285,7 +285,7 @@
 {
   F77_XFCN (smatm3, SMATM3, (m, n, k, np,
                              x.data (), y.data (),
-                             z.fortran_vec ()));
+                             z.rwdata ()));
 }
 
 template <>
@@ -295,7 +295,7 @@
 {
   F77_XFCN (dmatm3, DMATM3, (m, n, k, np,
                              x.data (), y.data (),
-                             z.fortran_vec ()));
+                             z.rwdata ()));
 }
 
 static void
--- a/libinterp/corefcn/dynamic-ld.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/dynamic-ld.h	Mon Feb 26 23:30:33 2024 -0500
@@ -39,13 +39,11 @@
 
 class interpreter;
 
-class
-dynamic_loader
+class dynamic_loader
 {
 private:
 
-  class
-  shlibs_list
+  class shlibs_list
   {
   public:
 
--- a/libinterp/corefcn/ellipj.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/ellipj.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -117,16 +117,16 @@
           // u is matrix, m is scalar
           ComplexNDArray u = u_arg.xcomplex_array_value ("ellipj: U must be a scalar or matrix");
 
-          dim_vector sz_u = u.dims ();
+          const dim_vector& sz_u = u.dims ();
 
           ComplexNDArray sn (sz_u), cn (sz_u), dn (sz_u);
           NDArray err (sz_u);
 
           const Complex *pu = u.data ();
-          Complex *psn = sn.fortran_vec ();
-          Complex *pcn = cn.fortran_vec ();
-          Complex *pdn = dn.fortran_vec ();
-          double *perr = err.fortran_vec ();
+          Complex *psn = sn.rwdata ();
+          Complex *pcn = cn.rwdata ();
+          Complex *pdn = dn.rwdata ();
+          double *perr = err.rwdata ();
           octave_idx_type nel = u.numel ();
 
           for (octave_idx_type i = 0; i < nel; i++)
@@ -139,7 +139,7 @@
     {
       NDArray m = args(1).xarray_value ("ellipj: M must be a scalar or matrix");
 
-      dim_vector sz_m = m.dims ();
+      const dim_vector& sz_m = m.dims ();
 
       if (u_arg.is_scalar_type ())
         {
@@ -153,10 +153,10 @@
               NDArray err (sz_m);
 
               const double *pm = m.data ();
-              double *psn = sn.fortran_vec ();
-              double *pcn = cn.fortran_vec ();
-              double *pdn = dn.fortran_vec ();
-              double *perr = err.fortran_vec ();
+              double *psn = sn.rwdata ();
+              double *pcn = cn.rwdata ();
+              double *pdn = dn.rwdata ();
+              double *perr = err.rwdata ();
               octave_idx_type nel = m.numel ();
 
               for (octave_idx_type i = 0; i < nel; i++)
@@ -173,10 +173,10 @@
               NDArray err (sz_m);
 
               const double *pm = m.data ();
-              Complex *psn = sn.fortran_vec ();
-              Complex *pcn = cn.fortran_vec ();
-              Complex *pdn = dn.fortran_vec ();
-              double *perr = err.fortran_vec ();
+              Complex *psn = sn.rwdata ();
+              Complex *pcn = cn.rwdata ();
+              Complex *pdn = dn.rwdata ();
+              double *perr = err.rwdata ();
               octave_idx_type nel = m.numel ();
 
               for (octave_idx_type i = 0; i < nel; i++)
@@ -193,7 +193,7 @@
               // u is real array, m is array
               NDArray u = u_arg.xarray_value ("ellipj: U must be a scalar or matrix");
 
-              dim_vector sz_u = u.dims ();
+              const dim_vector& sz_u = u.dims ();
 
               if (sz_u.ndims () == 2 && sz_m.ndims () == 2
                   && sz_u(1) == 1 && sz_m(0) == 1)
@@ -222,10 +222,10 @@
 
                   const double *pu = u.data ();
                   const double *pm = m.data ();
-                  double *psn = sn.fortran_vec ();
-                  double *pcn = cn.fortran_vec ();
-                  double *pdn = dn.fortran_vec ();
-                  double *perr = err.fortran_vec ();
+                  double *psn = sn.rwdata ();
+                  double *pcn = cn.rwdata ();
+                  double *pdn = dn.rwdata ();
+                  double *perr = err.rwdata ();
                   octave_idx_type nel = m.numel ();
 
                   for (octave_idx_type i = 0; i < nel; i++)
@@ -241,7 +241,7 @@
               // u is complex array, m is array
               ComplexNDArray u = u_arg.xcomplex_array_value ("ellipj: U must be a scalar or matrix");
 
-              dim_vector sz_u = u.dims ();
+              const dim_vector& sz_u = u.dims ();
 
               if (sz_u.ndims () == 2 && sz_m.ndims () == 2
                   && sz_u(1) == 1 && sz_m(0) == 1)
@@ -270,10 +270,10 @@
 
                   const Complex *pu = u.data ();
                   const double  *pm = m.data ();
-                  Complex *psn = sn.fortran_vec ();
-                  Complex *pcn = cn.fortran_vec ();
-                  Complex *pdn = dn.fortran_vec ();
-                  double *perr = err.fortran_vec ();
+                  Complex *psn = sn.rwdata ();
+                  Complex *pcn = cn.rwdata ();
+                  Complex *pdn = dn.rwdata ();
+                  double *perr = err.rwdata ();
                   octave_idx_type nel = m.numel ();
 
                   for (octave_idx_type i = 0; i < nel; i++)
--- a/libinterp/corefcn/event-manager.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/event-manager.h	Mon Feb 26 23:30:33 2024 -0500
@@ -288,9 +288,7 @@
 //! This class provides thread-safe communication between the
 //! interpreter and a GUI.
 
-class
-OCTINTERP_API
-event_manager
+class OCTINTERP_API event_manager
 {
 public:
 
--- a/libinterp/corefcn/event-queue.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/event-queue.h	Mon Feb 26 23:30:33 2024 -0500
@@ -35,8 +35,7 @@
 
 OCTAVE_BEGIN_NAMESPACE(octave)
 
-class
-event_queue : public action_container
+class event_queue : public action_container
 {
 public:
 
@@ -88,8 +87,7 @@
 // possibility of seeing an exception (or interrupt) in the cleanup actions.
 // Not that we can do much about it, but at least we won't crash.
 
-class
-event_queue_safe : public event_queue
+class event_queue_safe : public event_queue
 {
 public:
 
--- a/libinterp/corefcn/filter.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/filter.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -68,13 +68,13 @@
   if (norm == static_cast<T> (0.0))
     error ("filter: the first element of A must be nonzero");
 
-  dim_vector x_dims = x.dims ();
+  const dim_vector& x_dims = x.dims ();
   if (dim < 0 || dim > x_dims.ndims ())
     error ("filter: DIM must be a valid dimension");
 
   octave_idx_type x_len = x_dims(dim);
 
-  dim_vector si_dims = si.dims ();
+  const dim_vector& si_dims = si.dims ();
   octave_idx_type si_len = si_dims(0);
 
   if (si_len != ab_len - 1)
@@ -164,8 +164,8 @@
       // is common to both branches can be pulled out here without affecting
       // correctness or speed.
 
-      T *py = y.fortran_vec ();
-      T *psi = si.fortran_vec ();
+      T *py = y.rwdata ();
+      T *psi = si.rwdata ();
       const T *pb = b.data ();
       const T *px = x.data ();
       psi += si_offset;
@@ -239,7 +239,7 @@
 MArray<T>
 filter (MArray<T>& b, MArray<T>& a, MArray<T>& x, int dim = -1)
 {
-  dim_vector x_dims = x.dims ();
+  const dim_vector& x_dims = x.dims ();
 
   if (dim < 0)
     dim = x_dims.first_non_singleton ();
@@ -369,7 +369,7 @@
     print_usage ();
 
   int dim;
-  dim_vector x_dims = args(2).dims ();
+  const dim_vector& x_dims = args(2).dims ();
 
   if (nargin == 5)
     {
--- a/libinterp/corefcn/find.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/find.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -451,7 +451,7 @@
 
           octave_value result = arg.index_vector ().unmask ();
 
-          dim_vector dv = result.dims ();
+          const dim_vector& dv = result.dims ();
 
           retval(0) = (dv.all_zero () || dv.isvector ()
                        ? result : result.reshape (dv.as_column ()));
--- a/libinterp/corefcn/ft-text-renderer.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/ft-text-renderer.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -97,8 +97,7 @@
 // Forward declaration
 static void ft_face_destroyed (void *object);
 
-class
-ft_manager
+class ft_manager
 {
 private:
 
@@ -457,9 +456,7 @@
   ft_manager::font_destroyed (reinterpret_cast<FT_Face> (object));
 }
 
-class
-OCTINTERP_API
-ft_text_renderer : public base_text_renderer
+class OCTINTERP_API ft_text_renderer : public base_text_renderer
 {
 public:
 
--- a/libinterp/corefcn/gcd.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/gcd.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -351,9 +351,9 @@
       bool inca = aa.numel () != 1;
       bool incb = bb.numel () != 1;
 
-      T *gptr = gg.fortran_vec ();
-      T *xptr = xx.fortran_vec ();
-      T *yptr = yy.fortran_vec ();
+      T *gptr = gg.rwdata ();
+      T *xptr = xx.rwdata ();
+      T *yptr = yy.rwdata ();
 
       octave_idx_type n = gg.numel ();
       for (octave_idx_type i = 0; i < n; i++)
--- a/libinterp/corefcn/gl-render.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/gl-render.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -180,7 +180,7 @@
 {
   opengl_texture retval (glfcns);
 
-  dim_vector dv (data.dims ());
+  const dim_vector& dv = data.dims ();
 
   // Expect RGB data
   if (dv.ndims () == 3 && (dv(2) == 3 || dv(2) == 4))
@@ -339,8 +339,7 @@
   return retval;
 }
 
-class
-opengl_tessellator
+class opengl_tessellator
 {
 public:
 #if defined (HAVE_FRAMEWORK_OPENGL) && defined (HAVE_GLUTESSCALLBACK_THREEDOTS)
@@ -508,8 +507,7 @@
   std::shared_ptr<vertex_data_rep> m_rep;
 };
 
-class
-opengl_renderer::patch_tessellator : public opengl_tessellator
+class opengl_renderer::patch_tessellator : public opengl_tessellator
 {
 public:
 
@@ -675,8 +673,7 @@
 
 #else
 
-class
-opengl_renderer::patch_tessellator
+class opengl_renderer::patch_tessellator
 {
   // Dummy class.
 };
@@ -985,7 +982,7 @@
                                    double p1, double p1N,
                                    double p2, double p2N,
                                    double dx, double dy, double dz,
-                                   int xyz, bool mirror)
+                                   int xyz, bool mirror, bool tickdir_both)
 {
 #if defined (HAVE_OPENGL)
 
@@ -999,31 +996,37 @@
         {
           if (xyz == X_AXIS)
             {
-              m_glfcns.glVertex3d (val, p1, p2);
+              m_glfcns.glVertex3d (val, p1 + (tickdir_both ? -dy : 0),
+                                   p2 + (tickdir_both ? -dz : 0));
               m_glfcns.glVertex3d (val, p1+dy, p2+dz);
               if (mirror)
                 {
-                  m_glfcns.glVertex3d (val, p1N, p2N);
+                  m_glfcns.glVertex3d (val, p1N + (tickdir_both ? dy : 0),
+                                       p2N + (tickdir_both ? dz : 0));
                   m_glfcns.glVertex3d (val, p1N-dy, p2N-dz);
                 }
             }
           else if (xyz == Y_AXIS)
             {
-              m_glfcns.glVertex3d (p1, val, p2);
+              m_glfcns.glVertex3d (p1 + (tickdir_both ? -dx : 0), val,
+                                   p2 + (tickdir_both ? -dz : 0));
               m_glfcns.glVertex3d (p1+dx, val, p2+dz);
               if (mirror)
                 {
-                  m_glfcns.glVertex3d (p1N, val, p2N);
+                  m_glfcns.glVertex3d (p1N + (tickdir_both ? dx : 0), val,
+                                       p2N + (tickdir_both ? dz : 0));
                   m_glfcns.glVertex3d (p1N-dx, val, p2N-dz);
                 }
             }
           else if (xyz == Z_AXIS)
             {
-              m_glfcns.glVertex3d (p1, p2, val);
+              m_glfcns.glVertex3d (p1 + (tickdir_both ? -dx : 0),
+                                   p2 + (tickdir_both ? -dy : 0), val);
               m_glfcns.glVertex3d (p1+dx, p2+dy, val);
               if (mirror)
                 {
-                  m_glfcns.glVertex3d (p1N, p2N, val);
+                  m_glfcns.glVertex3d (p1N + (tickdir_both ? dx : 0),
+                                       p2N + (tickdir_both ? dy : 0), val);
                   m_glfcns.glVertex3d (p1N-dx, p2N-dy, val);
                 }
             }
@@ -1225,7 +1228,7 @@
   uint8NDArray pix(dim_vector (3, width, height), 0);
 
   m_glfcns.glReadPixels(0, 0, width, height, GL_RGB, GL_UNSIGNED_BYTE,
-                        pix.fortran_vec ());
+                        pix.rwdata ());
 
   // Permute and flip data
   Array<octave_idx_type> perm (dim_vector (3, 1));
@@ -1607,6 +1610,7 @@
                        && ! props.yscale_is ("log");
       bool is_origin_low = is_origin && (y_min + y_max) < 0;
       bool mirror = props.is_box () && xstate != AXE_ANY_DIR;
+      bool is_tickdir_both = props.tickdir_is ("both");
 
       // X grid
 
@@ -1674,17 +1678,17 @@
           if (tick_along_z)
             render_tickmarks (xmticks, x_min, x_max,
                               is_origin ? y_axis_pos : ypTick, ypTick,
-                              zpTick, zpTickN, 0., 0.,
-                              (is_origin_low ? -1. : 1.) *
+                              zpTick, zpTickN,
+                              0., 0., (is_origin_low ? -1. : 1.) *
                               math::signum (zpTick-zpTickN)*fz*xticklen/2,
-                              0, ! is_origin && mirror);
+                              0, ! is_origin && mirror, is_tickdir_both);
           else
             render_tickmarks (xmticks, x_min, x_max,
                               is_origin ? y_axis_pos : ypTick, ypTickN,
-                              zpTick, zpTick, 0.,
-                              (is_origin_low ? -1. : 1.) *
-                              math::signum (ypTick-ypTickN)*fy*xticklen/2,
-                              0., 0, ! is_origin && mirror);
+                              zpTick, zpTick,
+                              0., (is_origin_low ? -1. : 1.) *
+                              math::signum (ypTick-ypTickN)*fy*xticklen/2, 0.,
+                              0, ! is_origin && mirror, is_tickdir_both);
         }
 
       // tick marks
@@ -1693,17 +1697,17 @@
           if (tick_along_z)
             render_tickmarks (xticks, x_min, x_max,
                               is_origin ? y_axis_pos : ypTick, ypTick,
-                              zpTick, zpTickN, 0., 0.,
-                              (is_origin_low ? -1. : 1.) *
+                              zpTick, zpTickN,
+                              0., 0., (is_origin_low ? -1. : 1.) *
                               math::signum (zpTick-zpTickN)*fz*xticklen,
-                              0, ! is_origin && mirror);
+                              0, ! is_origin && mirror, is_tickdir_both);
           else
             render_tickmarks (xticks, x_min, x_max,
                               is_origin ? y_axis_pos : ypTick, ypTickN,
-                              zpTick, zpTick, 0.,
-                              (is_origin_low ? -1. : 1.) *
-                              math::signum (ypTick-ypTickN)*fy*xticklen,
-                              0., 0, ! is_origin && mirror);
+                              zpTick, zpTick,
+                              0., (is_origin_low ? -1. : 1.) *
+                              math::signum (ypTick-ypTickN)*fy*xticklen, 0.,
+                              0, ! is_origin && mirror, is_tickdir_both);
         }
 
       // tick texts
@@ -1808,6 +1812,7 @@
       bool is_origin_low = is_origin && (x_min + x_max) < 0;
       bool mirror = props.is_box () && ystate != AXE_ANY_DIR
                     && (! props.has_property ("__plotyy_axes__"));
+      bool is_tickdir_both = props.tickdir_is ("both");
 
       // Y grid
 
@@ -1875,17 +1880,17 @@
           if (tick_along_z)
             render_tickmarks (ymticks, y_min, y_max,
                               is_origin ? x_axis_pos : xpTick, xpTick,
-                              zpTick, zpTickN, 0., 0.,
-                              (is_origin_low ? -1. : 1.) *
+                              zpTick, zpTickN,
+                              0., 0., (is_origin_low ? -1. : 1.) *
                               math::signum (zpTick-zpTickN)*fz*yticklen/2,
-                              1, ! is_origin && mirror);
+                              1, ! is_origin && mirror, is_tickdir_both);
           else
             render_tickmarks (ymticks, y_min, y_max,
                               is_origin ? x_axis_pos : xpTick, xpTickN,
                               zpTick, zpTick,
                               (is_origin_low ? -1. : 1.) *
-                              math::signum (xpTick-xpTickN)*fx*yticklen/2,
-                              0., 0., 1, ! is_origin && mirror);
+                              math::signum (xpTick-xpTickN)*fx*yticklen/2, 0., 0.,
+                              1, ! is_origin && mirror, is_tickdir_both);
         }
 
       // tick marks
@@ -1894,17 +1899,17 @@
           if (tick_along_z)
             render_tickmarks (yticks, y_min, y_max,
                               is_origin ? x_axis_pos : xpTick, xpTick,
-                              zpTick, zpTickN, 0., 0.,
-                              (is_origin_low ? -1. : 1.) *
+                              zpTick, zpTickN,
+                              0., 0., (is_origin_low ? -1. : 1.) *
                               math::signum (zpTick-zpTickN)*fz*yticklen,
-                              1, ! is_origin && mirror);
+                              1, ! is_origin && mirror, is_tickdir_both);
           else
             render_tickmarks (yticks, y_min, y_max,
                               is_origin ? x_axis_pos : xpTick, xpTickN,
                               zpTick, zpTick,
                               (is_origin_low ? -1. : 1.) *
-                              math::signum (xPlaneN-xPlane)*fx*yticklen,
-                              0., 0., 1, ! is_origin && mirror);
+                              math::signum (xPlaneN-xPlane)*fx*yticklen, 0., 0.,
+                              1, ! is_origin && mirror, is_tickdir_both);
         }
 
       // tick texts
@@ -1993,6 +1998,7 @@
                             && (minorgridstyle != "none")
                             && ! zticks.isempty ());
       bool mirror = props.is_box () && zstate != AXE_ANY_DIR;
+      bool is_tickdir_both = props.tickdir_is ("both");
 
       // Z grid
 
@@ -2048,26 +2054,26 @@
               if (math::isinf (fy))
                 render_tickmarks (zmticks, z_min, z_max, xPlaneN, xPlane,
                                   yPlane, yPlane,
-                                  math::signum (xPlaneN-xPlane)*fx*zticklen/2,
-                                  0., 0., 2, mirror);
+                                  math::signum (xPlaneN-xPlane)*fx*zticklen/2, 0., 0.,
+                                  2, mirror, is_tickdir_both);
               else
                 render_tickmarks (zmticks, z_min, z_max, xPlaneN, xPlaneN,
-                                  yPlane, yPlane, 0.,
-                                  math::signum (yPlane-yPlaneN)*fy*zticklen/2,
-                                  0., 2, false);
+                                  yPlane, yPlane,
+                                  0., math::signum (yPlane-yPlaneN)*fy*zticklen/2, 0.,
+                                  2, false, is_tickdir_both);
             }
           else
             {
               if (math::isinf (fx))
                 render_tickmarks (zmticks, z_min, z_max, xPlane, xPlane,
-                                  yPlaneN, yPlane, 0.,
-                                  math::signum (yPlaneN-yPlane)*fy*zticklen/2,
-                                  0., 2, mirror);
+                                  yPlaneN, yPlane,
+                                  0., math::signum (yPlaneN-yPlane)*fy*zticklen/2, 0.,
+                                  2, mirror, is_tickdir_both);
               else
                 render_tickmarks (zmticks, z_min, z_max, xPlane, xPlane,
                                   yPlaneN, yPlaneN,
-                                  math::signum (xPlane-xPlaneN)*fx*zticklen/2,
-                                  0., 0., 2, false);
+                                  math::signum (xPlane-xPlaneN)*fx*zticklen/2, 0., 0.,
+                                  2, false, is_tickdir_both);
             }
         }
 
@@ -2079,26 +2085,26 @@
               if (math::isinf (fy))
                 render_tickmarks (zticks, z_min, z_max, xPlaneN, xPlane,
                                   yPlane, yPlane,
-                                  math::signum (xPlaneN-xPlane)*fx*zticklen,
-                                  0., 0., 2, mirror);
+                                  math::signum (xPlaneN-xPlane)*fx*zticklen, 0., 0.,
+                                  2, mirror, is_tickdir_both);
               else
                 render_tickmarks (zticks, z_min, z_max, xPlaneN, xPlaneN,
-                                  yPlane, yPlane, 0.,
-                                  math::signum (yPlane-yPlaneN)*fy*zticklen,
-                                  0., 2, false);
+                                  yPlane, yPlane,
+                                  0., math::signum (yPlane-yPlaneN)*fy*zticklen, 0.,
+                                  2, false, is_tickdir_both);
             }
           else
             {
               if (math::isinf (fx))
                 render_tickmarks (zticks, z_min, z_max, xPlaneN, xPlane,
-                                  yPlaneN, yPlane, 0.,
-                                  math::signum (yPlaneN-yPlane)*fy*zticklen,
-                                  0., 2, mirror);
+                                  yPlaneN, yPlane,
+                                  0., math::signum (yPlaneN-yPlane)*fy*zticklen, 0.,
+                                  2, mirror, is_tickdir_both);
               else
                 render_tickmarks (zticks, z_min, z_max, xPlane, xPlane,
                                   yPlaneN, yPlane,
-                                  math::signum (xPlane-xPlaneN)*fx*zticklen,
-                                  0., 0., 2, false);
+                                  math::signum (xPlane-xPlaneN)*fx*zticklen, 0., 0.,
+                                  2, false, is_tickdir_both);
             }
         }
 
@@ -2543,11 +2549,11 @@
 
   NDArray c;
   const NDArray vn = props.get_vertexnormals ().array_value ();
-  dim_vector vn_dims = vn.dims ();
+  const dim_vector& vn_dims = vn.dims ();
   bool has_vertex_normals = (vn_dims(0) == zr && vn_dims(1) == zc
                              && vn_dims(2) == 3);
   const NDArray fn = props.get_facenormals ().array_value ();
-  dim_vector fn_dims = fn.dims ();
+  const dim_vector& fn_dims = fn.dims ();
   bool has_face_normals = (fn_dims(0) == zr - 1 && fn_dims(1) == zc - 1
                            && fn_dims(2) == 3);
 
@@ -3464,7 +3470,7 @@
                       vertex_data::vertex_data_rep *vv
                         = vdata[i+j*fr].get_rep ();
 
-                      tess.add_vertex (vv->m_coords.fortran_vec (), vv);
+                      tess.add_vertex (vv->m_coords.rwdata (), vv);
                     }
 
                   if (count_f(i) > 0)
@@ -3504,7 +3510,7 @@
                             }
                         }
 
-                      tess.add_vertex (vv->m_coords.fortran_vec (), vv);
+                      tess.add_vertex (vv->m_coords.rwdata (), vv);
                     }
 
                   tess.end_contour ();
@@ -3634,7 +3640,7 @@
                     {
                       vertex_data::vertex_data_rep *vv
                         = vdata[i+j*fr].get_rep ();
-                      tess.add_vertex (vv->m_coords.fortran_vec (), vv);
+                      tess.add_vertex (vv->m_coords.rwdata (), vv);
                     }
 
                   tess.end_contour ();
@@ -4090,7 +4096,7 @@
 {
 #if defined (HAVE_OPENGL)
 
-  dim_vector dv (cdata.dims ());
+  const dim_vector& dv = cdata.dims ();
   int h = dv(0);
   int w = dv(1);
   double x0, x1, y0, y1;
--- a/libinterp/corefcn/gl-render.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/gl-render.h	Mon Feb 26 23:30:33 2024 -0500
@@ -35,9 +35,7 @@
 
 class opengl_functions;
 
-class
-OCTINTERP_API
-opengl_renderer
+class OCTINTERP_API opengl_renderer
 {
 public:
 
@@ -146,7 +144,7 @@
                                  double lim1, double lim2,
                                  double p1, double p1N, double p2, double p2N,
                                  double dx, double dy, double dz,
-                                 int xyz, bool doubleside);
+                                 int xyz, bool doubleside, bool tickdir_both);
 
   virtual void render_ticktexts (const Matrix& ticks,
                                  const string_vector& ticklabels,
--- a/libinterp/corefcn/gl2ps-print.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/gl2ps-print.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -57,9 +57,7 @@
 
 OCTAVE_BEGIN_NAMESPACE(octave)
 
-class
-OCTINTERP_API
-gl2ps_renderer : public opengl_renderer
+class OCTINTERP_API gl2ps_renderer : public opengl_renderer
 {
 public:
 
@@ -406,7 +404,7 @@
       if (! tmpf)
         error ("gl2ps_renderer::draw: couldn't open temporary file for printing");
 
-      frame.add ([=] () { std::fclose (tmpf); });
+      frame.add ([tmpf] () { std::fclose (tmpf); });
 
       // Reset buffsize, unless this is 2nd pass of a texstandalone print.
       if (m_term.find ("tex") == std::string::npos)
@@ -1236,7 +1234,7 @@
 gl2ps_renderer::draw_image (const image::properties& props)
 {
   octave_value cdata = props.get_color_data ();
-  dim_vector dv (cdata.dims ());
+  const dim_vector& dv = cdata.dims ();
   int h = dv(0);
   int w = dv(1);
 
@@ -1522,10 +1520,10 @@
 
   OCTAVE_LOCAL_BUFFER (float, tmp_data, static_cast<size_t> (3)*w*h);
 
-  static const float maxval = std::numeric_limits<uint8_t>::max ();
+  static constexpr float MAXVAL = std::numeric_limits<uint8_t>::max ();
 
   for (int i = 0; i < 3*w*h; i++)
-    tmp_data[i] = data[i] / maxval;
+    tmp_data[i] = data[i] / MAXVAL;
 
   draw_pixels (w, h, tmp_data);
 }
@@ -1537,10 +1535,10 @@
 
   OCTAVE_LOCAL_BUFFER (float, tmp_data, static_cast<size_t> (3)*w*h);
 
-  static const float maxval = std::numeric_limits<uint16_t>::max ();
+  static constexpr float MAXVAL = std::numeric_limits<uint16_t>::max ();
 
   for (int i = 0; i < 3*w*h; i++)
-    tmp_data[i] = data[i] / maxval;
+    tmp_data[i] = data[i] / MAXVAL;
 
   draw_pixels (w, h, tmp_data);
 }
@@ -1623,7 +1621,7 @@
         error (R"(print: failed to open pipe "%s")", stream.c_str ());
 
       // Need octave:: qualifier here to avoid ambiguity.
-      frame.add ([=] () { octave::pclose (m_fp); });
+      frame.add ([m_fp] () { octave::pclose (m_fp); });
     }
   else
     {
@@ -1634,7 +1632,7 @@
       if (! m_fp)
         error (R"(gl2ps_print: failed to create file "%s")", stream.c_str ());
 
-      frame.add ([=] () { std::fclose (m_fp); });
+      frame.add ([m_fp] () { std::fclose (m_fp); });
     }
 
   gl2ps_renderer rend (glfcns, m_fp, term);
--- a/libinterp/corefcn/graphics.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/graphics.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -139,87 +139,291 @@
 static Matrix
 viridis_colormap ()
 {
-  // The values below have been produced by viridis (64)(:)
-  // It would be nice to be able to feval the
-  // viridis function but since there is a static property object that includes
-  // a colormap_property object, we need to initialize this before main is
-  // even called, so calling an interpreted function is not possible.
+  // The values below have been produced by "viridis ()(:)".
+  // It would be nice to be able to feval the  viridis function but since there
+  // is a static property object that includes a colormap_property object, we
+  // need to initialize this before main() is even called, so calling an
+  // interpreted function is not possible.
 
   const double cmapv[] =
   {
-    2.67004010000000e-01, 2.72651720952381e-01, 2.77106307619048e-01,
-    2.80356151428571e-01, 2.82390045238095e-01, 2.83204606666667e-01,
-    2.82809341428571e-01, 2.81230763333333e-01, 2.78516153333333e-01,
-    2.74735528571429e-01, 2.69981791904762e-01, 2.64368580952381e-01,
-    2.58026184285714e-01, 2.51098684761905e-01, 2.43732853333333e-01,
-    2.36073294285714e-01, 2.28263191428571e-01, 2.20424955714286e-01,
-    2.12666598571429e-01, 2.05079113809524e-01, 1.97721880952381e-01,
-    1.90631350000000e-01, 1.83819438571429e-01, 1.77272360952381e-01,
-    1.70957518571429e-01, 1.64832915714286e-01, 1.58845368095238e-01,
-    1.52951235714286e-01, 1.47131626666667e-01, 1.41402210952381e-01,
-    1.35832975714286e-01, 1.30582113809524e-01, 1.25898377619048e-01,
-    1.22163105714286e-01, 1.19872409523810e-01, 1.19626570000000e-01,
-    1.22045948571429e-01, 1.27667691904762e-01, 1.36834947142857e-01,
-    1.49643331428571e-01, 1.65967274285714e-01, 1.85538397142857e-01,
-    2.08030450000000e-01, 2.33127309523809e-01, 2.60531475238095e-01,
-    2.90000730000000e-01, 3.21329971428571e-01, 3.54355250000000e-01,
-    3.88930322857143e-01, 4.24933143333333e-01, 4.62246770476190e-01,
-    5.00753620000000e-01, 5.40336957142857e-01, 5.80861172380952e-01,
-    6.22170772857143e-01, 6.64087320476191e-01, 7.06403823333333e-01,
-    7.48885251428571e-01, 7.91273132857143e-01, 8.33302102380952e-01,
-    8.74717527142857e-01, 9.15296319047619e-01, 9.54839555238095e-01,
-    9.93247890000000e-01, 4.87433000000000e-03, 2.58456800000000e-02,
-    5.09139004761905e-02, 7.42014957142857e-02, 9.59536042857143e-02,
-    1.16893314761905e-01, 1.37350195714286e-01, 1.57479940000000e-01,
-    1.77347967619048e-01, 1.96969168571429e-01, 2.16330337619048e-01,
-    2.35404660952381e-01, 2.54161735714286e-01, 2.72573219047619e-01,
-    2.90619516666667e-01, 3.08291041428571e-01, 3.25586450952381e-01,
-    3.42517215238095e-01, 3.59102207142857e-01, 3.75366067142857e-01,
-    3.91340913333333e-01, 4.07061480000000e-01, 4.22563764285714e-01,
-    4.37885543809524e-01, 4.53062984285714e-01, 4.68129543809524e-01,
-    4.83117059523810e-01, 4.98052961428571e-01, 5.12959473333333e-01,
-    5.27854311428571e-01, 5.42750087142857e-01, 5.57652481904762e-01,
-    5.72563073333333e-01, 5.87476284285714e-01, 6.02382410952381e-01,
-    6.17265840000000e-01, 6.32106955714286e-01, 6.46881817142857e-01,
-    6.61562926190476e-01, 6.76119717142857e-01, 6.90518987142857e-01,
-    7.04725181904762e-01, 7.18700950000000e-01, 7.32406441904762e-01,
-    7.45802021904762e-01, 7.58846480000000e-01, 7.71497934761905e-01,
-    7.83714033809524e-01, 7.95453081428571e-01, 8.06673890000000e-01,
-    8.17337565714286e-01, 8.27409135714286e-01, 8.36858167619048e-01,
-    8.45663399523809e-01, 8.53815582857143e-01, 8.61321019047619e-01,
-    8.68206316666667e-01, 8.74522215714286e-01, 8.80346158571429e-01,
-    8.85780083333333e-01, 8.90945338571429e-01, 8.95973498571429e-01,
-    9.01005800000000e-01, 9.06156570000000e-01, 3.29415190000000e-01,
-    3.53367293333333e-01, 3.76236064761905e-01, 3.97901482857143e-01,
-    4.18250757142857e-01, 4.37178920000000e-01, 4.54595888571429e-01,
-    4.70433883333333e-01, 4.84653865714286e-01, 4.97250492857143e-01,
-    5.08254501428571e-01, 5.17731949047619e-01, 5.25780221428571e-01,
-    5.32522206190476e-01, 5.38097133333333e-01, 5.42651800000000e-01,
-    5.46335411904762e-01, 5.49287148571429e-01, 5.51635008571429e-01,
-    5.53493173333333e-01, 5.54953478571429e-01, 5.56089070000000e-01,
-    5.56952166666667e-01, 5.57576145714286e-01, 5.57974025714286e-01,
-    5.58142745238095e-01, 5.58058673809524e-01, 5.57684744285714e-01,
-    5.56973310000000e-01, 5.55864478571429e-01, 5.54288677142857e-01,
-    5.52175699047619e-01, 5.49445382857143e-01, 5.46023368571429e-01,
-    5.41830633809524e-01, 5.36795616666667e-01, 5.30847985714286e-01,
-    5.23924198571429e-01, 5.15966779523810e-01, 5.06924262857143e-01,
-    4.96751861428571e-01, 4.85412122857143e-01, 4.72873300000000e-01,
-    4.59105875238095e-01, 4.44095883333333e-01, 4.27825852857143e-01,
-    4.10292713809524e-01, 3.91487632857143e-01, 3.71420688571429e-01,
-    3.50098750000000e-01, 3.27544678571429e-01, 3.03798967142857e-01,
-    2.78916748571429e-01, 2.53000856190476e-01, 2.26223670000000e-01,
-    1.98879439523810e-01, 1.71494930000000e-01, 1.45037631428572e-01,
-    1.21291048571429e-01, 1.03326155238095e-01, 9.53507900000000e-02,
-    1.00469958095238e-01, 1.17876387142857e-01, 1.43936200000000e-01
+    0.26700401, 0.26851048, 0.26994384,
+    0.27130489, 0.27259384, 0.27380934,
+    0.27495242, 0.27602238, 0.27701840,
+    0.27794143, 0.27879067, 0.27956550,
+    0.28026658, 0.28089358, 0.28144581,
+    0.28192358, 0.28232739, 0.28265633,
+    0.28291049, 0.28309095, 0.28319704,
+    0.28322882, 0.28318684, 0.28307200,
+    0.28288389, 0.28262297, 0.28229037,
+    0.28188676, 0.28141228, 0.28086773,
+    0.28025468, 0.27957399, 0.27882618,
+    0.27801236, 0.27713437, 0.27619376,
+    0.27519116, 0.27412802, 0.27300596,
+    0.27182812, 0.27059473, 0.26930756,
+    0.26796846, 0.26657984, 0.26514450,
+    0.26366320, 0.26213801, 0.26057103,
+    0.25896451, 0.25732244, 0.25564519,
+    0.25393498, 0.25219404, 0.25042462,
+    0.24862899, 0.24681140, 0.24497208,
+    0.24311324, 0.24123708, 0.23934575,
+    0.23744138, 0.23552606, 0.23360277,
+    0.23167350, 0.22973926, 0.22780192,
+    0.22586330, 0.22392515, 0.22198915,
+    0.22005691, 0.21812995, 0.21620971,
+    0.21429757, 0.21239477, 0.21050310,
+    0.20862342, 0.20675628, 0.20490257,
+    0.20306309, 0.20123854, 0.19942950,
+    0.19763650, 0.19585993, 0.19410009,
+    0.19235719, 0.19063135, 0.18892259,
+    0.18723083, 0.18555593, 0.18389763,
+    0.18225561, 0.18062949, 0.17901879,
+    0.17742298, 0.17584148, 0.17427363,
+    0.17271876, 0.17117615, 0.16964573,
+    0.16812641, 0.16661710, 0.16511703,
+    0.16362543, 0.16214155, 0.16066467,
+    0.15919413, 0.15772933, 0.15626973,
+    0.15481488, 0.15336445, 0.15191820,
+    0.15047605, 0.14903918, 0.14760731,
+    0.14618026, 0.14475863, 0.14334327,
+    0.14193527, 0.14053599, 0.13914708,
+    0.13777048, 0.13640850, 0.13506561,
+    0.13374299, 0.13244401, 0.13117249,
+    0.12993270, 0.12872938, 0.12756771,
+    0.12645338, 0.12539383, 0.12439474,
+    0.12346281, 0.12260562, 0.12183122,
+    0.12114807, 0.12056501, 0.12009154,
+    0.11973756, 0.11951163, 0.11942341,
+    0.11948255, 0.11969858, 0.12008079,
+    0.12063824, 0.12137972, 0.12231244,
+    0.12344358, 0.12477953, 0.12632581,
+    0.12808703, 0.13006688, 0.13226797,
+    0.13469183, 0.13733921, 0.14020991,
+    0.14330291, 0.14661640, 0.15014782,
+    0.15389405, 0.15785146, 0.16201598,
+    0.16638320, 0.17094840, 0.17570671,
+    0.18065314, 0.18578266, 0.19109018,
+    0.19657063, 0.20221902, 0.20803045,
+    0.21400015, 0.22012381, 0.22639690,
+    0.23281498, 0.23937390, 0.24606968,
+    0.25289851, 0.25985676, 0.26694127,
+    0.27414922, 0.28147681, 0.28892102,
+    0.29647899, 0.30414796, 0.31192534,
+    0.31980860, 0.32779580, 0.33588539,
+    0.34407411, 0.35235985, 0.36074053,
+    0.36921420, 0.37777892, 0.38643282,
+    0.39517408, 0.40400101, 0.41291350,
+    0.42190813, 0.43098317, 0.44013691,
+    0.44936763, 0.45867362, 0.46805314,
+    0.47750446, 0.48702580, 0.49661536,
+    0.50627130, 0.51599182, 0.52577622,
+    0.53562110, 0.54552440, 0.55548397,
+    0.56549760, 0.57556297, 0.58567772,
+    0.59583934, 0.60604528, 0.61629283,
+    0.62657923, 0.63690157, 0.64725685,
+    0.65764197, 0.66805369, 0.67848868,
+    0.68894351, 0.69941463, 0.70989842,
+    0.72039115, 0.73088902, 0.74138803,
+    0.75188414, 0.76237342, 0.77285183,
+    0.78331535, 0.79375994, 0.80418159,
+    0.81457634, 0.82494028, 0.83526959,
+    0.84556056, 0.85580960, 0.86601325,
+    0.87616824, 0.88627146, 0.89632002,
+    0.90631121, 0.91624212, 0.92610579,
+    0.93590444, 0.94563626, 0.95529972,
+    0.96489353, 0.97441665, 0.98386829,
+    0.99324789, 0.00487433, 0.00960483,
+    0.01462494, 0.01994186, 0.02556309,
+    0.03149748, 0.03775181, 0.04416723,
+    0.05034437, 0.05632444, 0.06214536,
+    0.06783587, 0.07341724, 0.07890703,
+    0.08431970, 0.08966622, 0.09495545,
+    0.10019576, 0.10539345, 0.11055307,
+    0.11567966, 0.12077701, 0.12584799,
+    0.13089477, 0.13592005, 0.14092556,
+    0.14591233, 0.15088147, 0.15583425,
+    0.16077132, 0.16569272, 0.17059884,
+    0.17549020, 0.18036684, 0.18522836,
+    0.19007447, 0.19490540, 0.19972086,
+    0.20452049, 0.20930306, 0.21406899,
+    0.21881782, 0.22354911, 0.22826210,
+    0.23295593, 0.23763078, 0.24228619,
+    0.24692170, 0.25153685, 0.25613040,
+    0.26070284, 0.26525384, 0.26978306,
+    0.27429024, 0.27877509, 0.28323662,
+    0.28767547, 0.29209154, 0.29648471,
+    0.30085494, 0.30520222, 0.30952657,
+    0.31382773, 0.31810580, 0.32236127,
+    0.32659432, 0.33080515, 0.33499400,
+    0.33916114, 0.34330688, 0.34743154,
+    0.35153548, 0.35561907, 0.35968273,
+    0.36372671, 0.36775151, 0.37175775,
+    0.37574589, 0.37971644, 0.38366989,
+    0.38760678, 0.39152762, 0.39543297,
+    0.39932336, 0.40319934, 0.40706148,
+    0.41091033, 0.41474645, 0.41857040,
+    0.42238275, 0.42618405, 0.42997486,
+    0.43375572, 0.43752720, 0.44128981,
+    0.44504410, 0.44879060, 0.45252980,
+    0.45626209, 0.45998802, 0.46370813,
+    0.46742290, 0.47113278, 0.47483821,
+    0.47853961, 0.48223740, 0.48593197,
+    0.48962370, 0.49331293, 0.49700003,
+    0.50068529, 0.50436904, 0.50805136,
+    0.51173263, 0.51541316, 0.51909319,
+    0.52277292, 0.52645254, 0.53013219,
+    0.53381201, 0.53749213, 0.54117264,
+    0.54485335, 0.54853458, 0.55221637,
+    0.55589872, 0.55958162, 0.56326503,
+    0.56694891, 0.57063316, 0.57431754,
+    0.57800205, 0.58168661, 0.58537105,
+    0.58905521, 0.59273889, 0.59642187,
+    0.60010387, 0.60378459, 0.60746388,
+    0.61114146, 0.61481702, 0.61849025,
+    0.62216081, 0.62582833, 0.62949242,
+    0.63315277, 0.63680899, 0.64046069,
+    0.64410744, 0.64774881, 0.65138436,
+    0.65501363, 0.65863619, 0.66225157,
+    0.66585927, 0.66945881, 0.67304968,
+    0.67663139, 0.68020343, 0.68376525,
+    0.68731632, 0.69085611, 0.69438405,
+    0.69789960, 0.70140222, 0.70489133,
+    0.70836635, 0.71182668, 0.71527175,
+    0.71870095, 0.72211371, 0.72550945,
+    0.72888753, 0.73224735, 0.73558828,
+    0.73890972, 0.74221104, 0.74549162,
+    0.74875084, 0.75198807, 0.75520266,
+    0.75839399, 0.76156142, 0.76470433,
+    0.76782207, 0.77091403, 0.77397953,
+    0.77701790, 0.78002855, 0.78301086,
+    0.78596419, 0.78888793, 0.79178146,
+    0.79464415, 0.79747541, 0.80027461,
+    0.80304099, 0.80577412, 0.80847343,
+    0.81113836, 0.81376835, 0.81636288,
+    0.81892143, 0.82144351, 0.82392862,
+    0.82637633, 0.82878621, 0.83115784,
+    0.83349064, 0.83578452, 0.83803918,
+    0.84025437, 0.84242990, 0.84456561,
+    0.84666139, 0.84871722, 0.85073310,
+    0.85270912, 0.85464543, 0.85654226,
+    0.85839991, 0.86021878, 0.86199932,
+    0.86374211, 0.86544779, 0.86711711,
+    0.86875092, 0.87035015, 0.87191584,
+    0.87344918, 0.87495143, 0.87642392,
+    0.87786808, 0.87928545, 0.88067763,
+    0.88204632, 0.88339329, 0.88472036,
+    0.88602943, 0.88732243, 0.88860134,
+    0.88986815, 0.89112487, 0.89237353,
+    0.89361614, 0.89485467, 0.89609127,
+    0.89732977, 0.89857040, 0.89981500,
+    0.90106534, 0.90232311, 0.90358991,
+    0.90486726, 0.90615657, 0.32941519,
+    0.33542652, 0.34137895, 0.34726862,
+    0.35309303, 0.35885256, 0.36454323,
+    0.37016418, 0.37571452, 0.38119074,
+    0.38659204, 0.39191723, 0.39716349,
+    0.40232944, 0.40741404, 0.41241521,
+    0.41733086, 0.42216032, 0.42690202,
+    0.43155375, 0.43611482, 0.44058404,
+    0.44496000, 0.44924127, 0.45342734,
+    0.45751726, 0.46150995, 0.46540474,
+    0.46920128, 0.47289909, 0.47649762,
+    0.47999675, 0.48339654, 0.48669702,
+    0.48989831, 0.49300074, 0.49600488,
+    0.49891131, 0.50172076, 0.50443413,
+    0.50705243, 0.50957678, 0.51200840,
+    0.51434870, 0.51659930, 0.51876163,
+    0.52083736, 0.52282822, 0.52473609,
+    0.52656332, 0.52831152, 0.52998273,
+    0.53157905, 0.53310261, 0.53455561,
+    0.53594093, 0.53726018, 0.53851561,
+    0.53970946, 0.54084398, 0.54192140,
+    0.54294396, 0.54391424, 0.54483444,
+    0.54570633, 0.54653200, 0.54731353,
+    0.54805291, 0.54875211, 0.54941304,
+    0.55003755, 0.55062743, 0.55118440,
+    0.55171011, 0.55220646, 0.55267486,
+    0.55311653, 0.55353282, 0.55392505,
+    0.55429441, 0.55464205, 0.55496905,
+    0.55527637, 0.55556494, 0.55583559,
+    0.55608907, 0.55632606, 0.55654717,
+    0.55675292, 0.55694377, 0.55712010,
+    0.55728221, 0.55743035, 0.55756466,
+    0.55768526, 0.55779216, 0.55788532,
+    0.55796464, 0.55803034, 0.55808199,
+    0.55811913, 0.55814141, 0.55814842,
+    0.55813967, 0.55811466, 0.55807280,
+    0.55801347, 0.55793600, 0.55783967,
+    0.55772371, 0.55758733, 0.55742968,
+    0.55725050, 0.55704861, 0.55682271,
+    0.55657181, 0.55629491, 0.55599097,
+    0.55565893, 0.55529773, 0.55490625,
+    0.55448339, 0.55402906, 0.55354108,
+    0.55301828, 0.55245948, 0.55186354,
+    0.55122927, 0.55055551, 0.54984110,
+    0.54908564, 0.54828740, 0.54744498,
+    0.54655722, 0.54562298, 0.54464114,
+    0.54361058, 0.54253043, 0.54139999,
+    0.54021751, 0.53898192, 0.53769219,
+    0.53634733, 0.53494633, 0.53348834,
+    0.53197275, 0.53039808, 0.52876343,
+    0.52706792, 0.52531069, 0.52349092,
+    0.52160791, 0.51966086, 0.51764880,
+    0.51557101, 0.51342680, 0.51121549,
+    0.50893644, 0.50658890, 0.50417217,
+    0.50168574, 0.49912906, 0.49650163,
+    0.49380294, 0.49103252, 0.48818938,
+    0.48527326, 0.48228395, 0.47922108,
+    0.47608431, 0.47287330, 0.46958774,
+    0.46622638, 0.46278934, 0.45927675,
+    0.45568838, 0.45202405, 0.44828355,
+    0.44446673, 0.44057284, 0.43660090,
+    0.43255207, 0.42842626, 0.42422341,
+    0.41994346, 0.41558638, 0.41115215,
+    0.40664011, 0.40204917, 0.39738103,
+    0.39263579, 0.38781353, 0.38291438,
+    0.37793850, 0.37288606, 0.36775726,
+    0.36255223, 0.35726893, 0.35191009,
+    0.34647607, 0.34096730, 0.33538426,
+    0.32972749, 0.32399761, 0.31819529,
+    0.31232133, 0.30637661, 0.30036211,
+    0.29427888, 0.28812650, 0.28190832,
+    0.27562602, 0.26928147, 0.26287683,
+    0.25641457, 0.24989748, 0.24332878,
+    0.23671214, 0.23005179, 0.22335258,
+    0.21662012, 0.20986086, 0.20308229,
+    0.19629307, 0.18950326, 0.18272455,
+    0.17597055, 0.16925712, 0.16260273,
+    0.15602894, 0.14956101, 0.14322828,
+    0.13706449, 0.13110864, 0.12540538,
+    0.12000532, 0.11496505, 0.11034678,
+    0.10621724, 0.10264590, 0.09970219,
+    0.09745186, 0.09595277, 0.09525046,
+    0.09537439, 0.09633538, 0.09812496,
+    0.10071680, 0.10407067, 0.10813094,
+    0.11283773, 0.11812832, 0.12394051,
+    0.13021494, 0.13689671, 0.14393620,
   };
 
   // It would be nice if Matrix had a ctor allowing to do the
   // following without a copy
-  Matrix cmap (64, 3, 0.0);
-  std::copy (cmapv, cmapv + (64*3), cmap.fortran_vec ());
+  Matrix cmap (256, 3, 0.0);
+  std::copy (cmapv, cmapv + (256*3), cmap.rwdata ());
   return cmap;
 }
 
+/*
+## Test default colormap returns a 256-color viridis map
+%!test
+%! hf = figure ("visible", "off");
+%! unwind_protect
+%!   hax = axes ("parent", hf);
+%!   assert (get (hax, "colormap"), viridis (256));
+%! unwind_protect_cleanup
+%!   delete (hf);
+%! end_unwind_protect
+*/
+
 static double
 default_screendepth ()
 {
@@ -1030,7 +1234,7 @@
   octave_idx_type lda = a.numel () / static_cast<octave_idx_type> (3);
   octave_idx_type nc = cmap.rows ();
 
-  double *av = a.fortran_vec ();
+  double *av = a.rwdata ();
   const double *cmapv = cmap.data ();
 
   double clim_0 = clim(0);
@@ -1588,7 +1792,7 @@
 
   if (xok && m_size_constraints.size () > 0)
     {
-      dim_vector vdims = v.dims ();
+      const dim_vector& vdims = v.dims ();
       int vlen = vdims.ndims ();
 
       xok = false;
@@ -1986,7 +2190,7 @@
   // their handlevisibility property set to "callback" to be visible.
 
   octave::unwind_action executing_callbacks_cleanup
-  ([=] () { executing_callbacks.erase (this); });
+  ([this] () { executing_callbacks.erase (this); });
 
   if (! executing_callbacks.contains (this))
     {
@@ -5577,7 +5781,7 @@
   };
   Matrix m (4, 8);
 
-  memcpy (m.fortran_vec (), data, sizeof (double)*32);
+  memcpy (m.rwdata (), data, sizeof (double)*32);
 
   return m;
 }
@@ -5587,7 +5791,7 @@
 {
   ColumnVector retval (4, 1.0);
 
-  memcpy (retval.fortran_vec (), m.data (), sizeof (double)*3);
+  memcpy (retval.rwdata (), m.data (), sizeof (double)*3);
 
   return retval;
 }
@@ -5994,7 +6198,7 @@
   else if (tickdir == "out")
     ticksign = 1;
   else if (tickdir == "both")
-    ticksign = 2;
+    ticksign = 1;
   else  // tickdir == "none"
     ticksign = 0;
 
@@ -7373,20 +7577,20 @@
 
   magform ((hi - lo) / ticint, a, b);
 
-  static const double sqrt_2 = sqrt (2.0);
-  static const double sqrt_10 = sqrt (10.0);
-  static const double sqrt_50 = sqrt (50.0);
-
-  if (a < sqrt_2)
+  static const double SQRT_2 = sqrt (2.0);
+  static const double SQRT_10 = sqrt (10.0);
+  static const double SQRT_50 = sqrt (50.0);
+
+  if (a < SQRT_2)
     x = 1;
-  else if (a < sqrt_10)
+  else if (a < SQRT_10)
     x = 2;
-  else if (a < sqrt_50)
+  else if (a < SQRT_50)
     x = 5;
   else
     x = 10;
 
-  return x * std::pow (10., b);
+  return x * std::pow (10.0, b);
 }
 
 // Attempt to make "nice" limits from the actual max and min of the data.
@@ -11600,8 +11804,7 @@
   return parent_go.get_factory_default (type () + name);
 }
 
-class
-callback_event : public base_graphics_event
+class callback_event : public base_graphics_event
 {
 public:
   callback_event (const graphics_handle& h, const std::string& name,
@@ -11637,8 +11840,7 @@
   octave_value m_callback_data;
 };
 
-class
-mcode_event : public base_graphics_event
+class mcode_event : public base_graphics_event
 {
 public:
   mcode_event (const graphics_handle& h, const std::string& cmd,
@@ -11671,8 +11873,7 @@
   std::string m_mcode;
 };
 
-class
-function_event : public base_graphics_event
+class function_event : public base_graphics_event
 {
 public:
 
@@ -11696,8 +11897,7 @@
   void *m_function_data;
 };
 
-class
-set_event : public base_graphics_event
+class set_event : public base_graphics_event
 {
 public:
   set_event (const graphics_handle& h, const std::string& name,
--- a/libinterp/corefcn/graphics.in.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/graphics.in.h	Mon Feb 26 23:30:33 2024 -0500
@@ -127,7 +127,7 @@
   {
     Matrix retval (m.rows (), m.cols ());
 
-    do_scale (m.data (), retval.fortran_vec (), m.numel ());
+    do_scale (m.data (), retval.rwdata (), m.numel ());
 
     return retval;
   }
@@ -136,7 +136,7 @@
   {
     NDArray retval (m.dims ());
 
-    do_scale (m.data (), retval.fortran_vec (), m.numel ());
+    do_scale (m.data (), retval.rwdata (), m.numel ());
 
     return retval;
   }
@@ -168,7 +168,7 @@
   {
     Matrix retval (m.rows (), m.cols ());
 
-    do_scale (m.data (), retval.fortran_vec (), m.numel ());
+    do_scale (m.data (), retval.rwdata (), m.numel ());
 
     return retval;
   }
@@ -177,7 +177,7 @@
   {
     NDArray retval (m.dims ());
 
-    do_scale (m.data (), retval.fortran_vec (), m.numel ());
+    do_scale (m.data (), retval.rwdata (), m.numel ());
 
     return retval;
   }
@@ -4891,7 +4891,7 @@
 
     Matrix get_auto_xdata ()
     {
-      dim_vector dv = get_cdata ().dims ();
+      const dim_vector& dv = get_cdata ().dims ();
       Matrix data;
       if (dv(1) > 0.)
         {
@@ -4903,7 +4903,7 @@
 
     Matrix get_auto_ydata ()
     {
-      dim_vector dv = get_cdata ().dims ();
+      const dim_vector& dv = get_cdata ().dims ();
       Matrix data;
       if (dv(0) > 0.)
         {
@@ -6673,9 +6673,7 @@
 
 class graphics_event;
 
-class
-OCTINTERP_API
-base_graphics_event
+class OCTINTERP_API base_graphics_event
 {
 public:
   enum priority { INTERRUPT, QUEUE, CANCEL };
@@ -6702,9 +6700,7 @@
   int m_busyaction;
 };
 
-class
-OCTINTERP_API
-graphics_event
+class OCTINTERP_API graphics_event
 {
 public:
 
--- a/libinterp/corefcn/input.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/input.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -261,13 +261,13 @@
 is_completing_dirfns ()
 {
   static std::string dirfns_commands[] = {"cd", "isfile", "isfolder", "ls"};
-  static const std::size_t dirfns_commands_length = 4;
+  static const std::size_t DIRFNS_COMMANDS_LENGTH = 4;
 
   bool retval = false;
 
   std::string line = command_editor::get_line_buffer ();
 
-  for (std::size_t i = 0; i < dirfns_commands_length; i++)
+  for (std::size_t i = 0; i < DIRFNS_COMMANDS_LENGTH; i++)
     {
       int index = line.find (dirfns_commands[i] + ' ');
 
@@ -889,8 +889,7 @@
   return retval;
 }
 
-class
-terminal_reader : public base_reader
+class terminal_reader : public base_reader
 {
 public:
 
@@ -912,8 +911,7 @@
   static const std::string s_in_src;
 };
 
-class
-file_reader : public base_reader
+class file_reader : public base_reader
 {
 public:
 
@@ -942,8 +940,7 @@
   static const std::string s_in_src;
 };
 
-class
-eval_string_reader : public base_reader
+class eval_string_reader : public base_reader
 {
 public:
 
@@ -1110,7 +1107,7 @@
                "converting from codepage '%s' to UTF-8: %s",
                encoding.c_str (), std::strerror (errno));
 
-      unwind_action free_utf8_str ([=] () { ::free (utf8_str); });
+      unwind_action free_utf8_str ([utf8_str] () { ::free (utf8_str); });
 
       src_str = std::string (reinterpret_cast<char *> (utf8_str), length);
     }
--- a/libinterp/corefcn/interpreter.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/interpreter.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -455,8 +455,8 @@
     m_gh_manager (nullptr),
     m_interactive (false),
     m_read_site_files (true),
-    m_read_init_files (m_app_context != nullptr),
-    m_verbose (false),
+    m_read_user_files (m_app_context != nullptr),
+    m_init_trace (false),
     m_traditional (false),
     m_inhibit_startup_message (false),
     m_load_path_initialized (false),
@@ -705,8 +705,7 @@
       unwind_action restore_add_hook (&load_path::set_add_hook, &m_load_path,
                                       m_load_path.get_add_hook ());
 
-      m_load_path.set_add_hook ([=] (const std::string& dir)
-      { this->execute_pkg_add (dir); });
+      m_load_path.set_add_hook ([this] (const std::string& dir) { this->execute_pkg_add (dir); });
 
       m_load_path.initialize (set_initial_path);
 
@@ -1100,8 +1099,8 @@
 interpreter::execute_startup_files ()
 {
   bool read_site_files = m_read_site_files;
-  bool read_init_files = m_read_init_files;
-  bool verbose = m_verbose;
+  bool read_user_files = m_read_user_files;
+  bool trace = m_init_trace;
   bool inhibit_startup_message = m_inhibit_startup_message;
 
   if (m_app_context)
@@ -1109,12 +1108,12 @@
       const cmdline_options& options = m_app_context->options ();
 
       read_site_files = options.read_site_files ();
-      read_init_files = options.read_init_files ();
-      verbose = options.verbose_flag ();
+      read_user_files = options.read_user_files ();
+      trace = options.init_trace ();
       inhibit_startup_message = options.inhibit_startup_message ();
     }
 
-  verbose = (verbose && ! inhibit_startup_message);
+  trace = (trace && ! inhibit_startup_message);
 
   bool require_file = false;
 
@@ -1130,19 +1129,19 @@
       // $(prefix)/share/octave/$(version)/m/octaverc (if it exists).
 
       int status = safe_source_file (config::local_site_defaults_file (),
-                                     context, verbose, require_file);
+                                     context, trace, require_file);
 
       if (status)
         exit_status = status;
 
       status = safe_source_file (config::site_defaults_file (),
-                                 context, verbose, require_file);
+                                 context, trace, require_file);
 
       if (status)
         exit_status = status;
     }
 
-  if (read_init_files)
+  if (read_user_files)
     {
       // Try to execute commands from the Matlab compatible startup.m file
       // if it exists anywhere in the load path when starting Octave.
@@ -1179,7 +1178,7 @@
 
       if (! cfg_rc.empty ())
         {
-          int status = safe_source_file (cfg_rc, context, verbose,
+          int status = safe_source_file (cfg_rc, context, trace,
                                          require_file);
 
           if (status)
@@ -1205,7 +1204,7 @@
 
       if (! home_rc.empty ())
         {
-          int status = safe_source_file (home_rc, context, verbose,
+          int status = safe_source_file (home_rc, context, trace,
                                          require_file);
 
           if (status)
@@ -1229,7 +1228,7 @@
           if (local_rc.empty ())
             local_rc = sys::env::make_absolute (initfile);
 
-          int status = safe_source_file (local_rc, context, verbose,
+          int status = safe_source_file (local_rc, context, trace,
                                          require_file);
 
           if (status)
@@ -1237,8 +1236,8 @@
         }
     }
 
-  if (m_interactive && verbose)
-    std::cout << std::endl;
+  if (m_interactive && trace)
+    octave_stdout << std::endl;
 
   return exit_status;
 }
@@ -1655,6 +1654,12 @@
   return feval (f_arg, tmp_args, nargout);
 }
 
+std::string
+interpreter::inputname (int n, bool ids_only) const
+{
+  return m_evaluator.inputname (n, ids_only);
+}
+
 octave_value
 interpreter::make_function_handle (const std::string& name)
 {
--- a/libinterp/corefcn/interpreter.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/interpreter.h	Mon Feb 26 23:30:33 2024 -0500
@@ -177,14 +177,26 @@
     m_read_site_files = flag;
   }
 
+  void read_user_files (bool flag)
+  {
+    m_read_user_files = flag;
+  }
+
+  OCTAVE_DEPRECATED (10, "interpreter::read_init_files is deprecated, use read_user_files")
   void read_init_files (bool flag)
   {
-    m_read_init_files = flag;
+    read_user_files (flag);
   }
 
+  void init_trace (bool flag)
+  {
+    m_init_trace = flag;
+  }
+
+  OCTAVE_DEPRECATED (10, "interpreter::verbose is deprecated, use init_trace")
   void verbose (bool flag)
   {
-    m_verbose = flag;
+    init_trace (flag);
   }
 
   void traditional (bool flag)
@@ -399,6 +411,8 @@
 
   octave_value_list feval (const octave_value_list& args, int nargout = 0);
 
+  std::string inputname (int n, bool ids_only = true) const;
+
   octave_value make_function_handle (const std::string& name);
 
   void install_variable (const std::string& name, const octave_value& value,
@@ -644,9 +658,9 @@
 
   bool m_read_site_files;
 
-  bool m_read_init_files;
+  bool m_read_user_files;
 
-  bool m_verbose;
+  bool m_init_trace;
 
   bool m_traditional;
 
--- a/libinterp/corefcn/jsondecode.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/jsondecode.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -241,7 +241,7 @@
   if (same_field_names)
     {
       octave_map struct_array;
-      dim_vector struct_array_dims = dim_vector (struct_cell.numel (), 1);
+      const dim_vector& struct_array_dims = dim_vector (struct_cell.numel (), 1);
 
       if (field_names.numel ())
         {
@@ -300,7 +300,7 @@
   bool is_struct = cell(0).isstruct ();
   string_vector field_names = is_struct ? cell(0).map_value ().fieldnames ()
                               : string_vector ();
-  dim_vector sub_array_dims = cell(0).dims ();
+  const dim_vector& sub_array_dims = cell(0).dims ();
   octave_idx_type sub_array_ndims = cell(0).ndims ();
   octave_idx_type cell_numel = cell.numel ();
   for (octave_idx_type i = 0; i < cell_numel; ++i)
--- a/libinterp/corefcn/jsonencode.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/jsonencode.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -61,22 +61,26 @@
 encode_numeric (T& writer, const octave_value& obj,
                 const bool& ConvertInfAndNaN)
 {
-  double value = obj.scalar_value ();
+  if (obj.isfloat ())
+    {
+      double value = obj.scalar_value ();
 
-  if (obj.is_bool_scalar ())
+      // Any numeric input from the interpreter will be in double type so in
+      // order to detect ints, we will check if the floor of the input and the
+      // input are equal using fabs (A - B) < epsilon method as it is more
+      // accurate.  If value > 999999, MATLAB will encode it in scientific
+      // notation (double).
+      if (fabs (floor (value) - value) < std::numeric_limits<double>::epsilon ()
+          && fabs (value) <= 999999)
+        writer.Int64 (value);
+      // Possibly write NULL for non-finite values (-Inf, Inf, NaN, NA)
+      else if (ConvertInfAndNaN && ! octave::math::isfinite (value))
+        writer.Null ();
+      else
+        writer.Double (value);
+    }
+  else if (obj.is_bool_scalar ())
     writer.Bool (obj.bool_value ());
-  // Any numeric input from the interpreter will be in double type so in order
-  // to detect ints, we will check if the floor of the input and the input are
-  // equal using fabs (A - B) < epsilon method as it is more accurate.
-  // If value > 999999, MATLAB will encode it in scientific notation (double)
-  else if (fabs (floor (value) - value) < std::numeric_limits<double>::epsilon ()
-           && value <= 999999 && value >= -999999)
-    writer.Int64 (value);
-  // Possibly write NULL for non-finite values (-Inf, Inf, NaN, NA)
-  else if (ConvertInfAndNaN && ! octave::math::isfinite (value))
-    writer.Null ();
-  else if (obj.is_double_type ())
-    writer.Double (value);
   else
     error ("jsonencode: unsupported type");
 }
@@ -313,7 +317,7 @@
     {
       octave_idx_type idx;
       octave_idx_type ndims = array.ndims ();
-      dim_vector dims = array.dims ();
+      const dim_vector& dims = array.dims ();
 
       // In this case, we already have a vector. So,  we transform it to 2-D
       // vector in order to be detected by "isvector" in the recursive call
--- a/libinterp/corefcn/kron.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/kron.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -64,7 +64,7 @@
   octave_idx_type ncb = b.cols ();
 
   MArray<T> c (dim_vector (nra*nrb, nca*ncb));
-  T *cv = c.fortran_vec ();
+  T *cv = c.rwdata ();
 
   for (octave_idx_type ja = 0; ja < nca; ja++)
     {
--- a/libinterp/corefcn/latex-text-renderer.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/latex-text-renderer.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -49,9 +49,7 @@
   return ('"' + str + '"');
 }
 
-class
-OCTINTERP_API
-latex_renderer : public base_text_renderer
+class OCTINTERP_API latex_renderer : public base_text_renderer
 {
 public:
 
--- a/libinterp/corefcn/load-path.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/load-path.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -250,8 +250,8 @@
 load_path::abs_dir_cache_type load_path::s_abs_dir_cache;
 
 load_path::load_path (interpreter& interp)
-  : m_add_hook ([=] (const std::string& dir) { this->execute_pkg_add (dir); }),
-m_remove_hook ([=] (const std::string& dir) { this->execute_pkg_del (dir); }),
+  : m_add_hook ([this] (const std::string& dir) { this->execute_pkg_add (dir); }),
+m_remove_hook ([this] (const std::string& dir) { this->execute_pkg_del (dir); }),
 m_interpreter (interp), m_package_map (), m_top_level_package (),
 m_dir_info_list (), m_init_dirs (), m_command_line_path ()
 { }
--- a/libinterp/corefcn/load-path.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/load-path.h	Mon Feb 26 23:30:33 2024 -0500
@@ -41,9 +41,7 @@
 
 OCTAVE_BEGIN_NAMESPACE(octave)
 
-class
-OCTINTERP_API
-load_path
+class OCTINTERP_API load_path
 {
 public:
 
--- a/libinterp/corefcn/ls-mat4.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/ls-mat4.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -340,7 +340,7 @@
             for (octave_idx_type i = 0; i < nr - 1; i++)
               c.xelem (i) = dtmp[i] - 1;
             nc_new = dtmp[nr - 1];
-            read_mat_binary_data (is, data.fortran_vec (), prec, nr - 1,
+            read_mat_binary_data (is, data.rwdata (), prec, nr - 1,
                                   swap, flt_fmt);
             read_mat_binary_data (is, dtmp, prec, 1, swap, flt_fmt);
 
@@ -353,7 +353,7 @@
       {
         Matrix re (nr, nc);
 
-        read_mat_binary_data (is, re.fortran_vec (), prec, dlen, swap, flt_fmt);
+        read_mat_binary_data (is, re.rwdata (), prec, dlen, swap, flt_fmt);
 
         if (! is)
           error ("load: reading matrix data for '%s'", name);
@@ -362,7 +362,7 @@
           {
             Matrix im (nr, nc);
 
-            read_mat_binary_data (is, im.fortran_vec (), prec, dlen, swap,
+            read_mat_binary_data (is, im.rwdata (), prec, dlen, swap,
                                   flt_fmt);
 
             if (! is)
--- a/libinterp/corefcn/ls-mat5.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/ls-mat5.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -382,7 +382,7 @@
                                                                         \
     octave_idx_type n = re.numel ();                                    \
     tmp_pos = is.tellg ();                                              \
-    read_mat5_integer_data (is, re.fortran_vec (), n, swap,             \
+    read_mat5_integer_data (is, re.rwdata (), n, swap,             \
                             static_cast<enum mat5_data_type> (type));   \
                                                                         \
     if (! is)                                                           \
@@ -401,7 +401,7 @@
                  retval.c_str ());                                      \
                                                                         \
         n = im.numel ();                                                \
-        read_mat5_binary_data (is, im.fortran_vec (), n, swap,          \
+        read_mat5_binary_data (is, im.rwdata (), n, swap,          \
                                static_cast<enum mat5_data_type> (type), flt_fmt); \
                                                                         \
         if (! is)                                                       \
@@ -808,7 +808,7 @@
         if (imag)
           {
             re = NDArray (dim_vector (nnz, 1));
-            data = re.fortran_vec ();
+            data = re.rwdata ();
           }
 
         tmp_pos = is.tellg ();
@@ -832,7 +832,7 @@
               error ("load: reading sparse matrix data for '%s'",
                      retval.c_str ());
 
-            read_mat5_binary_data (is, im.fortran_vec (), nnz, swap,
+            read_mat5_binary_data (is, im.rwdata (), nnz, swap,
                                    static_cast<enum mat5_data_type> (type),
                                    flt_fmt);
 
@@ -1325,7 +1325,7 @@
 
         octave_idx_type n = re.numel ();
         tmp_pos = is.tellg ();
-        read_mat5_binary_data (is, re.fortran_vec (), n, swap,
+        read_mat5_binary_data (is, re.rwdata (), n, swap,
                                static_cast<enum mat5_data_type> (type),
                                flt_fmt);
 
@@ -1345,7 +1345,7 @@
               error ("load: reading matrix data for '%s'", retval.c_str ());
 
             n = im.numel ();
-            read_mat5_binary_data (is, im.fortran_vec (), n, swap,
+            read_mat5_binary_data (is, im.rwdata (), n, swap,
                                    static_cast<enum mat5_data_type> (type),
                                    flt_fmt);
 
@@ -1382,7 +1382,7 @@
 
         octave_idx_type n = re.numel ();
         tmp_pos = is.tellg ();
-        read_mat5_binary_data (is, re.fortran_vec (), n, swap,
+        read_mat5_binary_data (is, re.rwdata (), n, swap,
                                static_cast<enum mat5_data_type> (type),
                                flt_fmt);
 
@@ -1415,7 +1415,7 @@
               error ("load: reading matrix data for '%s'", retval.c_str ());
 
             n = im.numel ();
-            read_mat5_binary_data (is, im.fortran_vec (), n, swap,
+            read_mat5_binary_data (is, im.rwdata (), n, swap,
                                    static_cast<enum mat5_data_type> (type),
                                    flt_fmt);
 
@@ -2114,7 +2114,7 @@
 maybe_convert_to_u16 (const charNDArray& chm, std::size_t& n16_str)
 {
   uint16_t *u16_str;
-  dim_vector dv = chm.dims ();
+  const dim_vector& dv = chm.dims ();
 
   if (chm.ndims () == 2 && dv(0) == 1)
     {
@@ -2328,7 +2328,7 @@
   std::string cname = tc.class_name ();
   std::size_t max_namelen = 63;
 
-  dim_vector dv = tc.dims ();
+  const dim_vector& dv = tc.dims ();
   int nd = tc.ndims ();
   int dim_len = 4*nd;
 
--- a/libinterp/corefcn/matrix_type.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/matrix_type.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -274,7 +274,7 @@
               const ColumnVector perm = args(2).xvector_value ("matrix_type: Invalid permutation vector PERM");
 
               octave_idx_type len = perm.numel ();
-              dim_vector dv = args(0).dims ();
+              const dim_vector& dv = args(0).dims ();
 
               if (len != dv(0))
                 error ("matrix_type: Invalid permutation vector PERM");
@@ -411,7 +411,7 @@
               const ColumnVector perm = args(2).xvector_value ("matrix_type: Invalid permutation vector PERM");
 
               octave_idx_type len = perm.numel ();
-              dim_vector dv = args(0).dims ();
+              const dim_vector& dv = args(0).dims ();
 
               if (len != dv(0))
                 error ("matrix_type: Invalid permutation vector PERM");
--- a/libinterp/corefcn/mex.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/mex.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -47,7 +47,6 @@
 #include <string>
 
 #include "f77-fcn.h"
-#include "lo-ieee.h"
 #include "oct-locbuf.h"
 #include "quit.h"
 
@@ -442,7 +441,7 @@
   RET_TYPE FCN_NAME ARG_LIST const { request_mutation (); return RET_VAL; }
 
 #define GET_DATA_METHOD(RT, FCN_NAME, ID, COMPLEXITY)                   \
-  RT * FCN_NAME (void) const { return get_data<RT> (ID, COMPLEXITY); }
+  RT * FCN_NAME () const { return get_data<RT> (ID, COMPLEXITY); }
 
 class mxArray_octave_value : public mxArray_base
 {
@@ -461,9 +460,9 @@
 
   mxArray_octave_value& operator = (const mxArray_octave_value&) = delete;
 
-  mxArray_base * dup (void) const { return new mxArray_octave_value (*this); }
-
-  mxArray * as_mxArray (void) const
+  mxArray_base * dup () const { return new mxArray_octave_value (*this); }
+
+  mxArray * as_mxArray () const
   {
     mxArray *retval = m_val.as_mxArray (m_interleaved);
 
@@ -500,62 +499,62 @@
     return retval;
   }
 
-  ~mxArray_octave_value (void)
+  ~mxArray_octave_value ()
   {
     mxFree (m_class_name);
     mxFree (m_dims);
   }
 
-  bool is_octave_value (void) const { return true; }
-
-  int iscell (void) const { return m_val.iscell (); }
-
-  int is_char (void) const { return m_val.is_string (); }
-
-  int is_complex (void) const { return m_val.iscomplex (); }
-
-  int is_double (void) const { return m_val.is_double_type (); }
-
-  int is_function_handle (void) const { return m_val.is_function_handle (); }
-
-  int is_int16 (void) const { return m_val.is_int16_type (); }
-
-  int is_int32 (void) const { return m_val.is_int32_type (); }
-
-  int is_int64 (void) const { return m_val.is_int64_type (); }
-
-  int is_int8 (void) const { return m_val.is_int8_type (); }
-
-  int is_logical (void) const { return m_val.islogical (); }
-
-  int is_numeric (void) const { return m_val.isnumeric (); }
-
-  int is_single (void) const { return m_val.is_single_type (); }
-
-  int is_sparse (void) const { return m_val.issparse (); }
-
-  int is_struct (void) const { return m_val.isstruct (); }
-
-  int is_uint16 (void) const { return m_val.is_uint16_type (); }
-
-  int is_uint32 (void) const { return m_val.is_uint32_type (); }
-
-  int is_uint64 (void) const { return m_val.is_uint64_type (); }
-
-  int is_uint8 (void) const { return m_val.is_uint8_type (); }
-
-  int is_range (void) const { return m_val.is_range (); }
-
-  int isreal (void) const { return m_val.isreal (); }
-
-  int is_logical_scalar_true (void) const
+  bool is_octave_value () const { return true; }
+
+  int iscell () const { return m_val.iscell (); }
+
+  int is_char () const { return m_val.is_string (); }
+
+  int is_complex () const { return m_val.iscomplex (); }
+
+  int is_double () const { return m_val.is_double_type (); }
+
+  int is_function_handle () const { return m_val.is_function_handle (); }
+
+  int is_int16 () const { return m_val.is_int16_type (); }
+
+  int is_int32 () const { return m_val.is_int32_type (); }
+
+  int is_int64 () const { return m_val.is_int64_type (); }
+
+  int is_int8 () const { return m_val.is_int8_type (); }
+
+  int is_logical () const { return m_val.islogical (); }
+
+  int is_numeric () const { return m_val.isnumeric (); }
+
+  int is_single () const { return m_val.is_single_type (); }
+
+  int is_sparse () const { return m_val.issparse (); }
+
+  int is_struct () const { return m_val.isstruct (); }
+
+  int is_uint16 () const { return m_val.is_uint16_type (); }
+
+  int is_uint32 () const { return m_val.is_uint32_type (); }
+
+  int is_uint64 () const { return m_val.is_uint64_type (); }
+
+  int is_uint8 () const { return m_val.is_uint8_type (); }
+
+  int is_range () const { return m_val.is_range (); }
+
+  int isreal () const { return m_val.isreal (); }
+
+  int is_logical_scalar_true () const
   {
     return (is_logical_scalar () && m_val.is_true ());
   }
 
-  mwSize get_m (void) const { return m_val.rows (); }
-
-  mwSize get_n (void) const
+  mwSize get_m () const { return m_val.rows (); }
+
+  mwSize get_n () const
   {
     mwSize n = 1;
 
@@ -568,7 +567,7 @@
     return n;
   }
 
-  mwSize * get_dimensions (void) const
+  mwSize * get_dimensions () const
   {
     if (! m_dims)
       {
@@ -577,7 +576,7 @@
         m_dims = static_cast<mwSize *> (mxArray::malloc (m_ndims
                                         * sizeof (mwSize)));
 
-        dim_vector dv = m_val.dims ();
+        const dim_vector& dv = m_val.dims ();
 
         for (mwIndex i = 0; i < m_ndims; i++)
           m_dims[i] = dv(i);
@@ -586,7 +585,7 @@
     return m_dims;
   }
 
-  mwSize get_number_of_dimensions (void) const
+  mwSize get_number_of_dimensions () const
   {
     // Force m_dims and m_ndims to be cached.
     get_dimensions ();
@@ -599,11 +598,11 @@
 
   MUTATION_METHOD (int, set_dimensions, (mwSize *, mwSize), 0)
 
-  mwSize get_number_of_elements (void) const { return m_val.numel (); }
-
-  int isempty (void) const { return m_val.isempty (); }
-
-  bool is_scalar (void) const
+  mwSize get_number_of_elements () const { return m_val.numel (); }
+
+  int isempty () const { return m_val.isempty (); }
+
+  bool is_scalar () const
   {
     // Force m_dims and m_ndims to be cached.
     get_dimensions ();
@@ -611,7 +610,7 @@
     return m_ndims == 2 && m_dims[0] == 1 && m_dims[1] == 1;
   }
 
-  mxClassID get_class_id (void) const
+  mxClassID get_class_id () const
   {
     m_id = mxUNKNOWN_CLASS;
 
@@ -651,7 +650,7 @@
     return m_id;
   }
 
-  const char * get_class_name (void) const
+  const char * get_class_name () const
   {
     if (! m_class_name)
       {
@@ -703,7 +702,7 @@
   // Not allowed.
   VOID_MUTATION_METHOD (set_cell, (mwIndex, mxArray *))
 
-  double get_scalar (void) const
+  double get_scalar () const
   {
     if (m_val.issparse ())
       {
@@ -723,7 +722,7 @@
       return m_val.scalar_value (true);
   }
 
-  void * get_data (void) const
+  void * get_data () const
   {
     // Casting away const required for MEX interface.
 
@@ -784,7 +783,7 @@
   GET_DATA_METHOD (mxComplexSingle, get_complex_singles,
                    mxDOUBLE_CLASS, mxCOMPLEX);
 
-  void * get_imag_data (void) const
+  void * get_imag_data () const
   {
     void *retval = nullptr;
 
@@ -816,7 +815,7 @@
   // Not allowed.
   VOID_MUTATION_METHOD (set_imag_data, (void *))
 
-  mwIndex * get_ir (void) const
+  mwIndex * get_ir () const
   {
     // Casting away const required for MEX interface.
 
@@ -824,7 +823,7 @@
     return static_cast<mwIndex *> (maybe_mark_foreign (ptr));
   }
 
-  mwIndex * get_jc (void) const
+  mwIndex * get_jc () const
   {
     // Casting away const required for MEX interface.
 
@@ -832,7 +831,7 @@
     return static_cast<mwIndex *> (maybe_mark_foreign (ptr));
   }
 
-  mwSize get_nzmax (void) const { return m_val.nzmax (); }
+  mwSize get_nzmax () const { return m_val.nzmax (); }
 
   // Not allowed.
   VOID_MUTATION_METHOD (set_ir, (mwIndex *))
@@ -854,7 +853,7 @@
   // Not allowed.
   VOID_MUTATION_METHOD (set_field_by_number, (mwIndex, int, mxArray *))
 
-  int get_number_of_fields (void) const { return m_val.nfields (); }
+  int get_number_of_fields () const { return m_val.nfields (); }
 
   CONST_MUTATION_METHOD (const char *, get_field_name_by_number, (int), nullptr)
 
@@ -883,7 +882,7 @@
     return retval;
   }
 
-  char * array_to_string (void) const
+  char * array_to_string () const
   {
     // FIXME: this is supposed to handle multi-byte character strings.
 
@@ -919,7 +918,7 @@
     return calc_single_subscript_internal (m_ndims, m_dims, nsubs, subs);
   }
 
-  std::size_t get_element_size (void) const
+  std::size_t get_element_size () const
   {
     // Force m_id to be cached.
     get_class_id ();
@@ -947,9 +946,9 @@
       }
   }
 
-  bool mutation_needed (void) const { return m_mutate_flag; }
-
-  void request_mutation (void) const
+  bool mutation_needed () const { return m_mutate_flag; }
+
+  void request_mutation () const
   {
     if (m_mutate_flag)
       panic_impossible ();
@@ -957,9 +956,9 @@
     m_mutate_flag = true;
   }
 
-  mxArray * mutate (void) const { return as_mxArray (); }
-
-  octave_value as_octave_value (void) const { return m_val; }
+  mxArray * mutate () const { return as_mxArray (); }
+
+  octave_value as_octave_value () const { return m_val; }
 
 protected:
 
@@ -1009,33 +1008,33 @@
 
   mxArray_matlab& operator = (const mxArray_matlab&) = delete;
 
-  ~mxArray_matlab (void)
+  ~mxArray_matlab ()
   {
     mxFree (m_class_name);
     mxFree (m_dims);
   }
 
-  int iscell (void) const { return m_id == mxCELL_CLASS; }
-
-  int is_char (void) const { return m_id == mxCHAR_CLASS; }
-
-  int is_complex (void) const { return m_is_complex; }
-
-  int is_double (void) const { return m_id == mxDOUBLE_CLASS; }
-
-  int is_function_handle (void) const { return m_id == mxFUNCTION_CLASS; }
-
-  int is_int16 (void) const { return m_id == mxINT16_CLASS; }
-
-  int is_int32 (void) const { return m_id == mxINT32_CLASS; }
-
-  int is_int64 (void) const { return m_id == mxINT64_CLASS; }
-
-  int is_int8 (void) const { return m_id == mxINT8_CLASS; }
-
-  int is_logical (void) const { return m_id == mxLOGICAL_CLASS; }
-
-  int is_numeric (void) const
+  int iscell () const { return m_id == mxCELL_CLASS; }
+
+  int is_char () const { return m_id == mxCHAR_CLASS; }
+
+  int is_complex () const { return m_is_complex; }
+
+  int is_double () const { return m_id == mxDOUBLE_CLASS; }
+
+  int is_function_handle () const { return m_id == mxFUNCTION_CLASS; }
+
+  int is_int16 () const { return m_id == mxINT16_CLASS; }
+
+  int is_int32 () const { return m_id == mxINT32_CLASS; }
+
+  int is_int64 () const { return m_id == mxINT64_CLASS; }
+
+  int is_int8 () const { return m_id == mxINT8_CLASS; }
+
+  int is_logical () const { return m_id == mxLOGICAL_CLASS; }
+
+  int is_numeric () const
   {
     return (m_id == mxDOUBLE_CLASS || m_id == mxSINGLE_CLASS
             || m_id == mxINT8_CLASS || m_id == mxUINT8_CLASS
@@ -1044,29 +1043,29 @@
             || m_id == mxINT64_CLASS || m_id == mxUINT64_CLASS);
   }
 
-  int is_single (void) const { return m_id == mxSINGLE_CLASS; }
-
-  int is_sparse (void) const { return 0; }
-
-  int is_struct (void) const { return m_id == mxSTRUCT_CLASS; }
-
-  int is_uint16 (void) const { return m_id == mxUINT16_CLASS; }
-
-  int is_uint32 (void) const { return m_id == mxUINT32_CLASS; }
-
-  int is_uint64 (void) const { return m_id == mxUINT64_CLASS; }
-
-  int is_uint8 (void) const { return m_id == mxUINT8_CLASS; }
-
-  int is_logical_scalar_true (void) const
+  int is_single () const { return m_id == mxSINGLE_CLASS; }
+
+  int is_sparse () const { return 0; }
+
+  int is_struct () const { return m_id == mxSTRUCT_CLASS; }
+
+  int is_uint16 () const { return m_id == mxUINT16_CLASS; }
+
+  int is_uint32 () const { return m_id == mxUINT32_CLASS; }
+
+  int is_uint64 () const { return m_id == mxUINT64_CLASS; }
+
+  int is_uint8 () const { return m_id == mxUINT8_CLASS; }
+
+  int is_logical_scalar_true () const
   {
     return (is_logical_scalar ()
             && static_cast<mxLogical *> (get_data ())[0] != 0);
   }
 
-  mwSize get_m (void) const { return m_dims[0]; }
-
-  mwSize get_n (void) const
+  mwSize get_m () const { return m_dims[0]; }
+
+  mwSize get_n () const
   {
     mwSize n = 1;
 
@@ -1076,9 +1075,9 @@
     return n;
   }
 
-  mwSize * get_dimensions (void) const { return m_dims; }
-
-  mwSize get_number_of_dimensions (void) const { return m_ndims; }
+  mwSize * get_dimensions () const { return m_dims; }
+
+  mwSize get_number_of_dimensions () const { return m_ndims; }
 
   void set_m (mwSize m) { m_dims[0] = m; }
 
@@ -1110,7 +1109,7 @@
       }
   }
 
-  mwSize get_number_of_elements (void) const
+  mwSize get_number_of_elements () const
   {
     mwSize retval = m_dims[0];
 
@@ -1120,16 +1119,16 @@
     return retval;
   }
 
-  int isempty (void) const { return get_number_of_elements () == 0; }
-
-  bool is_scalar (void) const
+  int isempty () const { return get_number_of_elements () == 0; }
+
+  bool is_scalar () const
   {
     return m_ndims == 2 && m_dims[0] == 1 && m_dims[1] == 1;
   }
 
-  mxClassID get_class_id (void) const { return m_id; }
-
-  const char * get_class_name (void) const
+  mxClassID get_class_id () const { return m_id; }
+
+  const char * get_class_name () const
   {
     switch (m_id)
       {
@@ -1171,77 +1170,77 @@
     err_invalid_type ("set_cell");
   }
 
-  double get_scalar (void) const
+  double get_scalar () const
   {
     err_invalid_type ("get_scalar");
   }
 
-  void * get_data (void) const
+  void * get_data () const
   {
     err_invalid_type ("get_data");
   }
 
-  mxDouble * get_doubles (void) const
+  mxDouble * get_doubles () const
   {
     err_invalid_type ("get_doubles");
   }
 
-  mxSingle * get_singles (void) const
+  mxSingle * get_singles () const
   {
     err_invalid_type ("get_singles");
   }
 
-  mxInt8 * get_int8s (void) const
+  mxInt8 * get_int8s () const
   {
     err_invalid_type ("get_int8s");
   }
 
-  mxInt16 * get_int16s (void) const
+  mxInt16 * get_int16s () const
   {
     err_invalid_type ("get_int16s");
   }
 
-  mxInt32 * get_int32s (void) const
+  mxInt32 * get_int32s () const
   {
     err_invalid_type ("get_int32s");
   }
 
-  mxInt64 * get_int64s (void) const
+  mxInt64 * get_int64s () const
   {
     err_invalid_type ("get_int64s");
   }
 
-  mxUint8 * get_uint8s (void) const
+  mxUint8 * get_uint8s () const
   {
     err_invalid_type ("get_uint8s");
   }
 
-  mxUint16 * get_uint16s (void) const
+  mxUint16 * get_uint16s () const
   {
     err_invalid_type ("get_uint16s");
   }
 
-  mxUint32 * get_uint32s (void) const
+  mxUint32 * get_uint32s () const
   {
     err_invalid_type ("get_uint32s");
   }
 
-  mxUint64 * get_uint64s (void) const
+  mxUint64 * get_uint64s () const
   {
     err_invalid_type ("get_uint64s");
   }
 
-  mxComplexDouble * get_complex_doubles (void) const
+  mxComplexDouble * get_complex_doubles () const
   {
     err_invalid_type ("get_complex_doubles");
   }
 
-  mxComplexSingle * get_complex_singles (void) const
+  mxComplexSingle * get_complex_singles () const
   {
     err_invalid_type ("get_complex_singles");
   }
 
-  void * get_imag_data (void) const
+  void * get_imag_data () const
   {
     err_invalid_type ("get_imag_data");
   }
@@ -1316,17 +1315,17 @@
     err_invalid_type ("set_imag_data");
   }
 
-  mwIndex * get_ir (void) const
+  mwIndex * get_ir () const
   {
     err_invalid_type ("get_ir");
   }
 
-  mwIndex * get_jc (void) const
+  mwIndex * get_jc () const
   {
     err_invalid_type ("get_jc");
   }
 
-  mwSize get_nzmax (void) const
+  mwSize get_nzmax () const
   {
     err_invalid_type ("get_nzmax");
   }
@@ -1367,7 +1366,7 @@
     err_invalid_type ("set_field_by_number");
   }
 
-  int get_number_of_fields (void) const
+  int get_number_of_fields () const
   {
     err_invalid_type ("get_number_of_fields");
   }
@@ -1387,7 +1386,7 @@
     err_invalid_type ("get_string");
   }
 
-  char * array_to_string (void) const
+  char * array_to_string () const
   {
     err_invalid_type ("array_to_string");
   }
@@ -1397,7 +1396,7 @@
     return calc_single_subscript_internal (m_ndims, m_dims, nsubs, subs);
   }
 
-  std::size_t get_element_size (void) const
+  std::size_t get_element_size () const
   {
     switch (m_id)
       {
@@ -1493,7 +1492,7 @@
   void set_complexity (bool is_complex) { m_is_complex = is_complex; }
 
   dim_vector
-  dims_to_dim_vector (void) const
+  dims_to_dim_vector () const
   {
     mwSize nd = get_number_of_dimensions ();
 
@@ -1605,17 +1604,17 @@
 
   mxArray_base_full& operator = (const mxArray_base_full&) = delete;
 
-  mxArray_base * dup (void) const
+  mxArray_base * dup () const
   {
     return new mxArray_base_full (*this);
   }
 
-  ~mxArray_base_full (void)
+  ~mxArray_base_full ()
   {
     mxFree (m_pr);
   }
 
-  double get_scalar (void) const
+  double get_scalar () const
   {
     // FIXME: how does this work for interleaved complex arrays?
 
@@ -1678,7 +1677,7 @@
     return retval;
   }
 
-  void * get_data (void) const { return m_pr; }
+  void * get_data () const { return m_pr; }
 
   void set_data (void *pr) { m_pr = pr; }
 
@@ -1687,62 +1686,62 @@
   // definitions in the mxArray_separate_full class that override these
   // functions.
 
-  mxDouble * get_doubles (void) const
+  mxDouble * get_doubles () const
   {
     return static_cast<mxDouble *> (m_pr);
   }
 
-  mxSingle * get_singles (void) const
+  mxSingle * get_singles () const
   {
     return static_cast<mxSingle *> (m_pr);
   }
 
-  mxInt8 * get_int8s (void) const
+  mxInt8 * get_int8s () const
   {
     return static_cast<mxInt8 *> (m_pr);
   }
 
-  mxInt16 * get_int16s (void) const
+  mxInt16 * get_int16s () const
   {
     return static_cast<mxInt16 *> (m_pr);
   }
 
-  mxInt32 * get_int32s (void) const
+  mxInt32 * get_int32s () const
   {
     return static_cast<mxInt32 *> (m_pr);
   }
 
-  mxInt64 * get_int64s (void) const
+  mxInt64 * get_int64s () const
   {
     return static_cast<mxInt64 *> (m_pr);
   }
 
-  mxUint8 * get_uint8s (void) const
+  mxUint8 * get_uint8s () const
   {
     return static_cast<mxUint8 *> (m_pr);
   }
 
-  mxUint16 * get_uint16s (void) const
+  mxUint16 * get_uint16s () const
   {
     return static_cast<mxUint16 *> (m_pr);
   }
 
-  mxUint32 * get_uint32s (void) const
+  mxUint32 * get_uint32s () const
   {
     return static_cast<mxUint32 *> (m_pr);
   }
 
-  mxUint64 * get_uint64s (void) const
+  mxUint64 * get_uint64s () const
   {
     return static_cast<mxUint64 *> (m_pr);
   }
 
-  mxComplexDouble * get_complex_doubles (void) const
+  mxComplexDouble * get_complex_doubles () const
   {
     return static_cast<mxComplexDouble *> (m_pr);
   }
 
-  mxComplexSingle * get_complex_singles (void) const
+  mxComplexSingle * get_complex_singles () const
   {
     return static_cast<mxComplexSingle *> (m_pr);
   }
@@ -1845,7 +1844,7 @@
     return retval;
   }
 
-  char * array_to_string (void) const
+  char * array_to_string () const
   {
     // FIXME: this is supposed to handle multi-byte character strings.
 
@@ -1866,11 +1865,11 @@
     return buf;
   }
 
-  octave_value as_octave_value (void) const
+  octave_value as_octave_value () const
   {
     octave_value retval;
 
-    dim_vector dv = dims_to_dim_vector ();
+    const dim_vector& dv = dims_to_dim_vector ();
 
     switch (get_class_id ())
       {
@@ -1941,7 +1940,7 @@
 
     if (current_mx_memory_resource == &the_mx_deleting_memory_resource)
       {
-        octave::unwind_action act ([=] () { maybe_disown_ptr (m_pr); });
+        octave::unwind_action act ([this] () { maybe_disown_ptr (m_pr); });
 
         return octave_value (Array<ELT_T> (ppr, dv, current_mx_memory_resource));
       }
@@ -1955,7 +1954,7 @@
 
     Array<ELT_T> val (dv);
 
-    ELT_T *ptr = val.fortran_vec ();
+    ELT_T *ptr = val.rwdata ();
 
     mwSize nel = get_number_of_elements ();
 
@@ -1981,7 +1980,7 @@
 
     ARRAY_T val (dv);
 
-    ARRAY_ELT_T *ptr = val.fortran_vec ();
+    ARRAY_ELT_T *ptr = val.rwdata ();
 
     mwSize nel = get_number_of_elements ();
 
@@ -2043,14 +2042,14 @@
 
   mxArray_interleaved_full& operator = (const mxArray_interleaved_full&) = delete;
 
-  mxArray_base * dup (void) const
+  mxArray_base * dup () const
   {
     return new mxArray_interleaved_full (*this);
   }
 
-  ~mxArray_interleaved_full (void) = default;
-
-  void * get_imag_data (void) const { panic_impossible (); }
+  ~mxArray_interleaved_full () = default;
+
+  void * get_imag_data () const { panic_impossible (); }
 
   void set_imag_data (void */*pi*/) { panic_impossible (); }
 
@@ -2113,17 +2112,17 @@
 
   mxArray_separate_full& operator = (const mxArray_separate_full&) = delete;
 
-  mxArray_base * dup (void) const
+  mxArray_base * dup () const
   {
     return new mxArray_separate_full (*this);
   }
 
-  ~mxArray_separate_full (void)
+  ~mxArray_separate_full ()
   {
     mxFree (m_pi);
   }
 
-  void * get_imag_data (void) const { return m_pi; }
+  void * get_imag_data () const { return m_pi; }
 
   void set_imag_data (void *pi)
   {
@@ -2132,30 +2131,30 @@
     set_complexity (m_pi != nullptr);
   }
 
-  mxDouble * get_doubles (void) const { panic_impossible (); }
-  mxSingle * get_singles (void) const { panic_impossible (); }
-  mxInt8 * get_int8s (void) const { panic_impossible (); }
-  mxInt16 * get_int16s (void) const { panic_impossible (); }
-  mxInt32 * get_int32s (void) const { panic_impossible (); }
-  mxInt64 * get_int64s (void) const { panic_impossible (); }
-  mxUint8 * get_uint8s (void) const { panic_impossible (); }
-  mxUint16 * get_uint16s (void) const { panic_impossible (); }
-  mxUint32 * get_uint32s (void) const { panic_impossible (); }
-  mxUint64 * get_uint64s (void) const { panic_impossible (); }
-
-  mxComplexDouble * get_complex_doubles (void) const { panic_impossible (); }
-  mxComplexSingle * get_complex_singles (void) const { panic_impossible (); }
+  mxDouble * get_doubles () const { panic_impossible (); }
+  mxSingle * get_singles () const { panic_impossible (); }
+  mxInt8 * get_int8s () const { panic_impossible (); }
+  mxInt16 * get_int16s () const { panic_impossible (); }
+  mxInt32 * get_int32s () const { panic_impossible (); }
+  mxInt64 * get_int64s () const { panic_impossible (); }
+  mxUint8 * get_uint8s () const { panic_impossible (); }
+  mxUint16 * get_uint16s () const { panic_impossible (); }
+  mxUint32 * get_uint32s () const { panic_impossible (); }
+  mxUint64 * get_uint64s () const { panic_impossible (); }
+
+  mxComplexDouble * get_complex_doubles () const { panic_impossible (); }
+  mxComplexSingle * get_complex_singles () const { panic_impossible (); }
 
   // We don't have complex integer types, but for separate storage they
   // still would not work.
-  mxComplexInt8 * get_complex_int8s (void) const { panic_impossible (); }
-  mxComplexInt16 * get_complex_int16s (void) const { panic_impossible (); }
-  mxComplexInt32 * get_complex_int32s (void) const { panic_impossible (); }
-  mxComplexInt64 * get_complex_int64s (void) const { panic_impossible (); }
-  mxComplexUint8 * get_complex_uint8s (void) const { panic_impossible (); }
-  mxComplexUint16 * get_complex_uint16s (void) const { panic_impossible (); }
-  mxComplexUint32 * get_complex_uint32s (void) const { panic_impossible (); }
-  mxComplexUint64 * get_complex_uint64s (void) const { panic_impossible (); }
+  mxComplexInt8 * get_complex_int8s () const { panic_impossible (); }
+  mxComplexInt16 * get_complex_int16s () const { panic_impossible (); }
+  mxComplexInt32 * get_complex_int32s () const { panic_impossible (); }
+  mxComplexInt64 * get_complex_int64s () const { panic_impossible (); }
+  mxComplexUint8 * get_complex_uint8s () const { panic_impossible (); }
+  mxComplexUint16 * get_complex_uint16s () const { panic_impossible (); }
+  mxComplexUint32 * get_complex_uint32s () const { panic_impossible (); }
+  mxComplexUint64 * get_complex_uint64s () const { panic_impossible (); }
 
   int set_doubles (mxDouble *) { panic_impossible (); }
   int set_singles (mxSingle *) { panic_impossible (); }
@@ -2182,14 +2181,14 @@
   int set_complex_uint32s (mxComplexUint32 *) { panic_impossible (); }
   int set_complex_uint64s (mxComplexUint64 *) { panic_impossible (); }
 
-  octave_value as_octave_value (void) const
+  octave_value as_octave_value () const
   {
     if (! is_complex ())
       return mxArray_base_full::as_octave_value ();
 
     octave_value retval;
 
-    dim_vector dv = dims_to_dim_vector ();
+    const dim_vector& dv = dims_to_dim_vector ();
 
     switch (get_class_id ())
       {
@@ -2244,7 +2243,7 @@
 
     Array<std::complex<T>> val (dv);
 
-    std::complex<T> *ptr = val.fortran_vec ();
+    std::complex<T> *ptr = val.rwdata ();
 
     T *ppi = static_cast<T *> (m_pi);
 
@@ -2301,30 +2300,30 @@
 
   mxArray_base_sparse& operator = (const mxArray_base_sparse&) = delete;
 
-  mxArray_base * dup (void) const
+  mxArray_base * dup () const
   {
     return new mxArray_base_sparse (*this);
   }
 
-  ~mxArray_base_sparse (void)
+  ~mxArray_base_sparse ()
   {
     mxFree (m_ir);
     mxFree (m_jc);
     mxFree (m_pr);
   }
 
-  int is_sparse (void) const { return 1; }
-
-  void * get_data (void) const { return m_pr; }
+  int is_sparse () const { return 1; }
+
+  void * get_data () const { return m_pr; }
 
   void set_data (void *pr) { m_pr = pr; }
 
-  mxDouble * get_doubles (void) const
+  mxDouble * get_doubles () const
   {
     return static_cast<mxDouble *> (m_pr);
   }
 
-  mxComplexDouble * get_complex_doubles (void) const
+  mxComplexDouble * get_complex_doubles () const
   {
     return static_cast<mxComplexDouble *> (m_pr);
   }
@@ -2341,11 +2340,11 @@
     return 0;
   }
 
-  mwIndex * get_ir (void) const { return m_ir; }
-
-  mwIndex * get_jc (void) const { return m_jc; }
-
-  mwSize get_nzmax (void) const { return m_nzmax; }
+  mwIndex * get_ir () const { return m_ir; }
+
+  mwIndex * get_jc () const { return m_jc; }
+
+  mwSize get_nzmax () const { return m_nzmax; }
 
   void set_ir (mwIndex *ir) { m_ir = ir; }
 
@@ -2357,11 +2356,11 @@
     m_nzmax = (nzmax > 0 ? nzmax : 1);
   }
 
-  octave_value as_octave_value (void) const
+  octave_value as_octave_value () const
   {
     octave_value retval;
 
-    dim_vector dv = dims_to_dim_vector ();
+    const dim_vector& dv = dims_to_dim_vector ();
 
     switch (get_class_id ())
       {
@@ -2393,7 +2392,7 @@
 
     if (current_mx_memory_resource == &the_mx_deleting_memory_resource)
       {
-        octave::unwind_action act ([=] ()
+        octave::unwind_action act ([this] ()
         {
           maybe_disown_ptr (m_pr);
           maybe_disown_ptr (m_ir);
@@ -2469,14 +2468,14 @@
 
   mxArray_interleaved_sparse& operator = (const mxArray_interleaved_sparse&) = delete;
 
-  mxArray_base * dup (void) const
+  mxArray_base * dup () const
   {
     return new mxArray_interleaved_sparse (*this);
   }
 
-  ~mxArray_interleaved_sparse (void) = default;
-
-  void * get_imag_data (void) const { panic_impossible (); }
+  ~mxArray_interleaved_sparse () = default;
+
+  void * get_imag_data () const { panic_impossible (); }
 
   void set_imag_data (void */*pi*/) { panic_impossible (); }
 };
@@ -2514,17 +2513,17 @@
 
   mxArray_separate_sparse& operator = (const mxArray_separate_sparse&) = delete;
 
-  mxArray_base * dup (void) const
+  mxArray_base * dup () const
   {
     return new mxArray_separate_sparse (*this);
   }
 
-  ~mxArray_separate_sparse (void)
+  ~mxArray_separate_sparse ()
   {
     mxFree (m_pi);
   }
 
-  void * get_imag_data (void) const { return m_pi; }
+  void * get_imag_data () const { return m_pi; }
 
   void set_imag_data (void *pi)
   {
@@ -2532,20 +2531,20 @@
     set_complexity (m_pi != nullptr);
   }
 
-  mxDouble * get_doubles (void) const { panic_impossible (); }
-  mxComplexDouble * get_complex_doubles (void) const { panic_impossible (); }
+  mxDouble * get_doubles () const { panic_impossible (); }
+  mxComplexDouble * get_complex_doubles () const { panic_impossible (); }
 
   int set_doubles (mxDouble *) { panic_impossible (); }
   int set_complex_doubles (mxComplexDouble *) { panic_impossible (); }
 
-  octave_value as_octave_value (void) const
+  octave_value as_octave_value () const
   {
     if (! is_complex ())
       return mxArray_base_sparse::as_octave_value ();
 
     octave_value retval;
 
-    dim_vector dv = dims_to_dim_vector ();
+    const dim_vector& dv = dims_to_dim_vector ();
 
     switch (get_class_id ())
       {
@@ -2668,9 +2667,9 @@
       m_fields[i] = mxArray::strsave (keys[i]);
   }
 
-  mxArray_base * dup (void) const { return new mxArray_struct (*this); }
-
-  ~mxArray_struct (void)
+  mxArray_base * dup () const { return new mxArray_struct (*this); }
+
+  ~mxArray_struct ()
   {
     for (int i = 0; i < m_nfields; i++)
       mxFree (m_fields[i]);
@@ -2793,7 +2792,7 @@
 
   void set_field_by_number (mwIndex index, int key_num, mxArray *val);
 
-  int get_number_of_fields (void) const { return m_nfields; }
+  int get_number_of_fields () const { return m_nfields; }
 
   const char * get_field_name_by_number (int key_num) const
   {
@@ -2816,13 +2815,13 @@
     return retval;
   }
 
-  void * get_data (void) const { return m_data; }
+  void * get_data () const { return m_data; }
 
   void set_data (void *data) { m_data = static_cast<mxArray **> (data); }
 
-  octave_value as_octave_value (void) const
+  octave_value as_octave_value () const
   {
-    dim_vector dv = dims_to_dim_vector ();
+    const dim_vector& dv = dims_to_dim_vector ();
 
     string_vector keys (m_fields, m_nfields);
 
@@ -2834,7 +2833,7 @@
       {
         Cell c (dv);
 
-        octave_value *p = c.fortran_vec ();
+        octave_value *p = c.rwdata ();
 
         mwIndex k = 0;
         for (mwIndex j = i; j < ntot; j += m_nfields)
@@ -2900,9 +2899,9 @@
 
   mxArray_cell& operator = (const mxArray_cell&) = delete;
 
-  mxArray_base * dup (void) const { return new mxArray_cell (*this); }
-
-  ~mxArray_cell (void)
+  mxArray_base * dup () const { return new mxArray_cell (*this); }
+
+  ~mxArray_cell ()
   {
     mwSize nel = get_number_of_elements ();
 
@@ -2919,19 +2918,19 @@
 
   void set_cell (mwIndex idx, mxArray *val);
 
-  void * get_data (void) const { return m_data; }
+  void * get_data () const { return m_data; }
 
   void set_data (void *data) { m_data = static_cast<mxArray **> (data); }
 
-  octave_value as_octave_value (void) const
+  octave_value as_octave_value () const
   {
-    dim_vector dv = dims_to_dim_vector ();
+    const dim_vector& dv = dims_to_dim_vector ();
 
     Cell c (dv);
 
     mwSize nel = get_number_of_elements ();
 
-    octave_value *p = c.fortran_vec ();
+    octave_value *p = c.rwdata ();
 
     for (mwIndex i = 0; i < nel; i++)
       p[i] = mxArray::as_octave_value (m_data[i]);
@@ -3018,7 +3017,7 @@
   : m_rep (new mxArray_cell (interleaved, m, n)), m_name (nullptr)
 { }
 
-mxArray::~mxArray (void)
+mxArray::~mxArray ()
 {
   mxFree (m_name);
 
@@ -3043,7 +3042,7 @@
 }
 
 octave_value
-mxArray::as_octave_value (void) const
+mxArray::as_octave_value () const
 {
   return m_rep->as_octave_value ();
 }
@@ -3131,7 +3130,7 @@
 }
 
 void
-mxArray::maybe_mutate (void) const
+mxArray::maybe_mutate () const
 {
   if (m_rep->is_octave_value ())
     {
@@ -3165,7 +3164,7 @@
 
   OCTAVE_DISABLE_CONSTRUCT_COPY_MOVE (mex)
 
-  ~mex (void)
+  ~mex ()
   {
     // We can't use mex::free here because it modifies memlist.
     while (! m_memlist.empty ())
@@ -3189,7 +3188,7 @@
     mxFree (m_fname);
   }
 
-  const char * function_name (void) const
+  const char * function_name () const
   {
     if (! m_fname)
       {
@@ -3414,7 +3413,7 @@
     return inlist;
   }
 
-  octave_mex_function& current_mex_function (void) const
+  octave_mex_function& current_mex_function () const
   {
     return m_curr_mex_fcn;
   }
@@ -3559,35 +3558,35 @@
 bool
 mxIsFinite (const double v)
 {
-  return lo_ieee_isfinite (v) != 0;
+  return octave::math::isfinite (v) != 0;
 }
 
 bool
 mxIsInf (const double v)
 {
-  return lo_ieee_isinf (v) != 0;
+  return octave::math::isinf (v) != 0;
 }
 
 bool
 mxIsNaN (const double v)
 {
-  return lo_ieee_isnan (v) != 0;
+  return octave::math::isnan (v) != 0;
 }
 
 double
-mxGetEps (void)
+mxGetEps ()
 {
   return std::numeric_limits<double>::epsilon ();
 }
 
 double
-mxGetInf (void)
+mxGetInf ()
 {
   return lo_ieee_inf_value ();
 }
 
 double
-mxGetNaN (void)
+mxGetNaN ()
 {
   return lo_ieee_nan_value ();
 }
@@ -4474,7 +4473,7 @@
   // Use at least 1 for nargout since even for zero specified args,
   // still want to be able to return an ans.
 
-  volatile int nargout = nargout_arg;
+  int nargout = nargout_arg;
 
   int nargin = args.length ();
   OCTAVE_LOCAL_BUFFER (mxArray *, argin, nargin);
@@ -4541,7 +4540,7 @@
 // C interface to mex functions:
 
 const char *
-mexFunctionName (void)
+mexFunctionName ()
 {
   return mex_context ? mex_context->function_name () : "unknown";
 }
@@ -4985,7 +4984,7 @@
 }
 
 int
-mexAtExit (void (*f) (void))
+mexAtExit (void (*f) ())
 {
   if (mex_context)
     {
@@ -5032,7 +5031,7 @@
 }
 
 int
-mexIsLocked (void)
+mexIsLocked ()
 {
   int retval = 0;
 
@@ -5051,7 +5050,7 @@
 std::map<std::string, int> mex_lock_count;
 
 void
-mexLock (void)
+mexLock ()
 {
   if (mex_context)
     {
@@ -5090,7 +5089,7 @@
 }
 
 void
-mexUnlock (void)
+mexUnlock ()
 {
   if (mex_context)
     {
--- a/libinterp/corefcn/mx-type-traits.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/mx-type-traits.h	Mon Feb 26 23:30:33 2024 -0500
@@ -32,8 +32,7 @@
 #include "oct-inttypes-fwd.h"
 
 template <typename T>
-class
-mx_type_traits
+class mx_type_traits
 {
 public:
   static const mxClassID mx_class;
@@ -41,8 +40,7 @@
 };
 
 template <>
-class
-mx_type_traits<bool>
+class mx_type_traits<bool>
 {
 public:
   static const mxClassID mx_class = mxLOGICAL_CLASS;
@@ -50,8 +48,7 @@
 };
 
 template <>
-class
-mx_type_traits<char>
+class mx_type_traits<char>
 {
 public:
   static const mxClassID mx_class = mxCHAR_CLASS;
@@ -59,8 +56,7 @@
 };
 
 template <>
-class
-mx_type_traits<double>
+class mx_type_traits<double>
 {
 public:
   static const mxClassID mx_class = mxDOUBLE_CLASS;
@@ -68,8 +64,7 @@
 };
 
 template <>
-class
-mx_type_traits<float>
+class mx_type_traits<float>
 {
 public:
   static const mxClassID mx_class = mxSINGLE_CLASS;
@@ -77,8 +72,7 @@
 };
 
 template <>
-class
-mx_type_traits<octave_int8>
+class mx_type_traits<octave_int8>
 {
 public:
   static const mxClassID mx_class = mxINT8_CLASS;
@@ -86,8 +80,7 @@
 };
 
 template <>
-class
-mx_type_traits<octave_uint8>
+class mx_type_traits<octave_uint8>
 {
 public:
   static const mxClassID mx_class = mxUINT8_CLASS;
@@ -95,8 +88,7 @@
 };
 
 template <>
-class
-mx_type_traits<octave_int16>
+class mx_type_traits<octave_int16>
 {
 public:
   static const mxClassID mx_class = mxINT16_CLASS;
@@ -104,8 +96,7 @@
 };
 
 template <>
-class
-mx_type_traits<octave_uint16>
+class mx_type_traits<octave_uint16>
 {
 public:
   static const mxClassID mx_class = mxUINT16_CLASS;
@@ -113,8 +104,7 @@
 };
 
 template <>
-class
-mx_type_traits<octave_int32>
+class mx_type_traits<octave_int32>
 {
 public:
   static const mxClassID mx_class = mxINT32_CLASS;
@@ -122,8 +112,7 @@
 };
 
 template <>
-class
-mx_type_traits<octave_uint32>
+class mx_type_traits<octave_uint32>
 {
 public:
   static const mxClassID mx_class = mxUINT32_CLASS;
@@ -131,8 +120,7 @@
 };
 
 template <>
-class
-mx_type_traits<octave_int64>
+class mx_type_traits<octave_int64>
 {
 public:
   static const mxClassID mx_class = mxINT64_CLASS;
@@ -140,8 +128,7 @@
 };
 
 template <>
-class
-mx_type_traits<octave_uint64>
+class mx_type_traits<octave_uint64>
 {
 public:
   static const mxClassID mx_class = mxUINT64_CLASS;
--- a/libinterp/corefcn/oct-errno.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/oct-errno.h	Mon Feb 26 23:30:33 2024 -0500
@@ -34,8 +34,7 @@
 
 #include "oct-map.h"
 
-class
-octave_errno
+class octave_errno
 {
 protected:
 
--- a/libinterp/corefcn/oct-fstrm.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/oct-fstrm.h	Mon Feb 26 23:30:33 2024 -0500
@@ -35,8 +35,7 @@
 
 OCTAVE_BEGIN_NAMESPACE(octave)
 
-class
-fstream : public base_stream
+class fstream : public base_stream
 {
 public:
 
--- a/libinterp/corefcn/oct-hist.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/oct-hist.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -463,8 +463,7 @@
   // Ignore interrupts while we are off editing commands.  Should we
   // maybe avoid using system()?
 
-  volatile interrupt_handler old_interrupt_handler
-    = ignore_interrupts ();
+  interrupt_handler old_interrupt_handler = ignore_interrupts ();
 
   int status = sys::system (cmd);
 
--- a/libinterp/corefcn/oct-iostrm.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/oct-iostrm.h	Mon Feb 26 23:30:33 2024 -0500
@@ -34,8 +34,7 @@
 
 OCTAVE_BEGIN_NAMESPACE(octave)
 
-class
-base_iostream : public base_stream
+class base_iostream : public base_stream
 {
 public:
 
@@ -79,8 +78,7 @@
   virtual const char * stream_type () const = 0;
 };
 
-class
-istream : public base_iostream
+class istream : public base_iostream
 {
 public:
 
@@ -113,8 +111,7 @@
   const char * stream_type () const { return "istream"; }
 };
 
-class
-ostream : public base_iostream
+class ostream : public base_iostream
 {
 public:
 
--- a/libinterp/corefcn/oct-map.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/oct-map.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -151,7 +151,7 @@
   if (perm.numel () != n)
     perm.clear (1, n);
 
-  return equal_up_to_order (other, perm.fortran_vec ());
+  return equal_up_to_order (other, perm.rwdata ());
 }
 
 string_vector
@@ -1334,7 +1334,7 @@
     }
   else
     {
-      dim_vector dv = dims ();
+      const dim_vector& dv = dims ();
 
       if (dv.all_zero ())
         *this = rb;
--- a/libinterp/corefcn/oct-prcstrm.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/oct-prcstrm.h	Mon Feb 26 23:30:33 2024 -0500
@@ -40,8 +40,7 @@
 
 OCTAVE_BEGIN_NAMESPACE(octave)
 
-class
-octave_iprocstream : public octave::stdiostream
+class octave_iprocstream : public octave::stdiostream
 {
 public:
 
@@ -64,8 +63,7 @@
   ~octave_iprocstream ();
 };
 
-class
-octave_oprocstream : public octave::stdiostream
+class octave_oprocstream : public octave::stdiostream
 {
 public:
 
--- a/libinterp/corefcn/oct-procbuf.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/oct-procbuf.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -103,9 +103,9 @@
 
   int pipe_fds[2];
 
-  volatile int child_std_end = (mode & std::ios::in) ? 1 : 0;
+  int child_std_end = (mode & std::ios::in) ? 1 : 0;
 
-  volatile int parent_end, child_end;
+  int parent_end, child_end;
 
   if (is_open ())
     return nullptr;
--- a/libinterp/corefcn/oct-procbuf.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/oct-procbuf.h	Mon Feb 26 23:30:33 2024 -0500
@@ -37,8 +37,7 @@
 
 OCTAVE_BEGIN_NAMESPACE(octave)
 
-class
-procbuf : public c_file_ptr_buf
+class procbuf : public c_file_ptr_buf
 {
 public:
 
--- a/libinterp/corefcn/oct-process.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/oct-process.h	Mon Feb 26 23:30:33 2024 -0500
@@ -32,8 +32,7 @@
 
 OCTAVE_BEGIN_NAMESPACE(octave)
 
-class
-process_execution_result
+class process_execution_result
 {
 public:
 
--- a/libinterp/corefcn/oct-stdstrm.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/oct-stdstrm.h	Mon Feb 26 23:30:33 2024 -0500
@@ -36,8 +36,7 @@
 OCTAVE_BEGIN_NAMESPACE(octave)
 
 template <typename BUF_T, typename STREAM_T, typename FILE_T>
-class
-tstdiostream : public base_stream
+class tstdiostream : public base_stream
 {
 public:
 
@@ -119,8 +118,7 @@
   int m_fnum;
 };
 
-class
-stdiostream
+class stdiostream
   : public tstdiostream<c_file_ptr_buf, io_c_file_ptr_stream, FILE *>
 {
 public:
@@ -152,8 +150,7 @@
 
 #if defined (HAVE_ZLIB)
 
-class
-zstdiostream
+class zstdiostream
   : public tstdiostream<c_zfile_ptr_buf, io_c_zfile_ptr_stream, gzFile>
 {
 public:
--- a/libinterp/corefcn/oct-stream.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/oct-stream.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -110,7 +110,7 @@
 
   if (! conv_err)
     {
-      if (! lo_ieee_isnan (dval))
+      if (! math::isnan (dval))
         {
           int ival = math::nint (dval);
 
@@ -131,7 +131,7 @@
 {
   octave_idx_type retval = -1;
 
-  if (lo_ieee_isnan (d))
+  if (math::isnan (d))
     ::error ("%s: NaN invalid as size specification", who.c_str ());
 
   if (math::isinf (d))
@@ -142,9 +142,8 @@
         ::error ("%s: negative value invalid as size specification",
                  who.c_str ());
 
-      static const double out_of_range_top
-        = static_cast<double> (std::numeric_limits<octave_idx_type>::max ())
-          + 1.;
+      static constexpr double out_of_range_top
+        = static_cast<double> (std::numeric_limits<octave_idx_type>::max ()) + 1.0;
       if (d >= out_of_range_top)
         ::error ("%s: dimension too large for Octave's index type",
                  who.c_str ());
@@ -240,8 +239,7 @@
   return retval;
 }
 
-class
-scanf_format_elt
+class scanf_format_elt
 {
 public:
 
@@ -285,8 +283,7 @@
   std::string char_class;
 };
 
-class
-scanf_format_list
+class scanf_format_list
 {
 public:
 
@@ -748,8 +745,7 @@
     return false;
 }
 
-class
-printf_format_elt
+class printf_format_elt
 {
 public:
 
@@ -789,8 +785,7 @@
   char modifier;
 };
 
-class
-printf_format_list
+class printf_format_list
 {
 public:
 
@@ -1214,8 +1209,7 @@
 // of the buffer and the buffer is refilled.  This also allows cheap
 // seek and tell operations within a "fast read" block.
 
-class
-delimited_stream
+class delimited_stream
 {
 public:
 
@@ -1637,8 +1631,7 @@
 
 // A single conversion specifier, such as %f or %c.
 
-class
-textscan_format_elt
+class textscan_format_elt
 {
 public:
 
@@ -1692,8 +1685,7 @@
 
 class textscan;
 
-class
-textscan_format_list
+class textscan_format_list
 {
 public:
 
@@ -1803,9 +1795,7 @@
 //   textscan scanner ();
 //   scanner.scan (...);
 
-class
-OCTINTERP_API
-textscan
+class OCTINTERP_API textscan
 {
 public:
 
@@ -4457,7 +4447,7 @@
       else
         mval.resize (max_size, 1, 0.0);
 
-      data = mval.fortran_vec ();
+      data = mval.rwdata ();
     }
 
   if (! discard)
@@ -4697,7 +4687,7 @@
                       else                                              \
                         mval.resize (max_size, 1, 0.0);                 \
                                                                         \
-                      data = mval.fortran_vec ();                       \
+                      data = mval.rwdata ();                       \
                     }                                                   \
                                                                         \
                   data[data_index++] = static_cast<unsigned char>       \
@@ -4799,7 +4789,7 @@
       max_size = 32;
     }
 
-  double *data = mval.fortran_vec ();
+  double *data = mval.rwdata ();
 
   if (isp)
     {
@@ -4861,7 +4851,7 @@
                   else
                     mval.resize (max_size, 1, 0.0);
 
-                  data = mval.fortran_vec ();
+                  data = mval.rwdata ();
                 }
 
               std::string fmt = elt->text;
@@ -5482,8 +5472,7 @@
   return retval;
 }
 
-class
-printf_value_cache
+class printf_value_cache
 {
 public:
 
@@ -5828,7 +5817,7 @@
         }
 
       const char *tval;
-      if (lo_ieee_isinf (dval))
+      if (math::isinf (dval))
         {
           if (elt->flags.find ('+') != std::string::npos)
             tval = (dval < 0 ? "-Inf" : "+Inf");
@@ -6411,7 +6400,7 @@
 
   DST_T conv (dim_vector (nr, nc));
 
-  dst_elt_type *conv_data = conv.fortran_vec ();
+  dst_elt_type *conv_data = conv.rwdata ();
 
   octave_idx_type j = 0;
 
--- a/libinterp/corefcn/oct-stream.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/oct-stream.h	Mon Feb 26 23:30:33 2024 -0500
@@ -63,9 +63,7 @@
 
 // Provide an interface for Octave streams.
 
-class
-OCTINTERP_API
-base_stream
+class OCTINTERP_API base_stream
 {
   friend class stream;
 
@@ -297,9 +295,7 @@
   invalid_operation (const std::string& who, const char *rw);
 };
 
-class
-OCTINTERP_API
-stream
+class OCTINTERP_API stream
 {
 public:
 
@@ -499,9 +495,7 @@
                  mach_info::float_format ffmt);
 };
 
-class
-OCTINTERP_API
-stream_list
+class OCTINTERP_API stream_list
 {
 public:
 
--- a/libinterp/corefcn/oct-strstrm.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/oct-strstrm.h	Mon Feb 26 23:30:33 2024 -0500
@@ -35,8 +35,7 @@
 
 OCTAVE_BEGIN_NAMESPACE(octave)
 
-class
-base_strstream : public base_stream
+class base_strstream : public base_stream
 {
 public:
 
@@ -73,8 +72,7 @@
   virtual void clear () = 0;
 };
 
-class
-istrstream : public base_strstream
+class istrstream : public base_strstream
 {
 public:
 
@@ -133,8 +131,7 @@
   std::istringstream m_istream;
 };
 
-class
-ostrstream : public base_strstream
+class ostrstream : public base_strstream
 {
 public:
 
--- a/libinterp/corefcn/ordqz.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/ordqz.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -345,18 +345,18 @@
 
       F77_XFCN (ztgsen, ZTGSEN,
                 (ijob, wantq, wantz,
-                 select.fortran_vec (), nn,
-                 F77_DBLE_CMPLX_ARG (caa.fortran_vec ()), nn,
-                 F77_DBLE_CMPLX_ARG (cbb.fortran_vec ()), nn,
-                 F77_DBLE_CMPLX_ARG (alpha.fortran_vec ()),
-                 F77_DBLE_CMPLX_ARG (beta.fortran_vec ()),
-                 F77_DBLE_CMPLX_ARG (cqq.fortran_vec ()), nn,
-                 F77_DBLE_CMPLX_ARG (czz.fortran_vec ()), nn,
+                 select.rwdata (), nn,
+                 F77_DBLE_CMPLX_ARG (caa.rwdata ()), nn,
+                 F77_DBLE_CMPLX_ARG (cbb.rwdata ()), nn,
+                 F77_DBLE_CMPLX_ARG (alpha.rwdata ()),
+                 F77_DBLE_CMPLX_ARG (beta.rwdata ()),
+                 F77_DBLE_CMPLX_ARG (cqq.rwdata ()), nn,
+                 F77_DBLE_CMPLX_ARG (czz.rwdata ()), nn,
                  mm,
                  pl, pr,
                  nullptr,
-                 F77_DBLE_CMPLX_ARG (work3.fortran_vec ()), lrwork3,
-                 iwork.fortran_vec (), liwork,
+                 F77_DBLE_CMPLX_ARG (work3.rwdata ()), lrwork3,
+                 iwork.rwdata (), liwork,
                  info));
       if (info != 0)
         error_with_id ("Octave:ordqz:ztgsen_failed",
@@ -395,8 +395,8 @@
               F77_INT ihi = 2;
               F77_INT lwork = 4;
               F77_INT info = 0;
-              double *aa_vec = aa.fortran_vec ();
-              double *bb_vec = bb.fortran_vec ();
+              double *aa_vec = aa.rwdata ();
+              double *bb_vec = bb.rwdata ();
 
               F77_XFCN (dhgeqz, DHGEQZ,
                         (F77_CONST_CHAR_ARG2 (&qz_job, 1),
@@ -466,19 +466,19 @@
 
       F77_XFCN (dtgsen, DTGSEN,
                 (ijob, wantq, wantz,
-                 select.fortran_vec (), nn,
-                 aa.fortran_vec (), nn,
-                 bb.fortran_vec (), nn,
-                 alphar.fortran_vec (),
-                 alphai.fortran_vec (),
-                 beta.fortran_vec (),
-                 qq.fortran_vec (), nn,
-                 zz.fortran_vec (), nn,
+                 select.rwdata (), nn,
+                 aa.rwdata (), nn,
+                 bb.rwdata (), nn,
+                 alphar.rwdata (),
+                 alphai.rwdata (),
+                 beta.rwdata (),
+                 qq.rwdata (), nn,
+                 zz.rwdata (), nn,
                  mm,
                  pl, pr,
                  nullptr,
-                 rwork3.fortran_vec (), lrwork3,
-                 iwork.fortran_vec (), liwork,
+                 rwork3.rwdata (), lrwork3,
+                 iwork.rwdata (), liwork,
                  info));
       if (info != 0)
         error("ordqz: failed to reorder eigenvalues");
--- a/libinterp/corefcn/ordschur.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/ordschur.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -130,10 +130,10 @@
 
           F77_XFCN (ztrsen, ztrsen,
                     (F77_CONST_CHAR_ARG ("N"), F77_CONST_CHAR_ARG ("V"),
-                     sel.data (), n, F77_DBLE_CMPLX_ARG (S.fortran_vec ()), n,
-                     F77_DBLE_CMPLX_ARG (U.fortran_vec ()), n,
-                     F77_DBLE_CMPLX_ARG (w.fortran_vec ()), m, cond1, cond2,
-                     F77_DBLE_CMPLX_ARG (work.fortran_vec ()), n,
+                     sel.data (), n, F77_DBLE_CMPLX_ARG (S.rwdata ()), n,
+                     F77_DBLE_CMPLX_ARG (U.rwdata ()), n,
+                     F77_DBLE_CMPLX_ARG (w.rwdata ()), m, cond1, cond2,
+                     F77_DBLE_CMPLX_ARG (work.rwdata ()), n,
                      info));
 
           PREPARE_OUTPUT()
@@ -146,9 +146,9 @@
 
           F77_XFCN (dtrsen, dtrsen,
                     (F77_CONST_CHAR_ARG ("N"), F77_CONST_CHAR_ARG ("V"),
-                     sel.data (), n, S.fortran_vec (), n, U.fortran_vec (), n,
-                     w.fortran_vec (), wi.fortran_vec (), m, cond1, cond2,
-                     work.fortran_vec (), n, iwork.fortran_vec (), n, info));
+                     sel.data (), n, S.rwdata (), n, U.rwdata (), n,
+                     w.rwdata (), wi.rwdata (), m, cond1, cond2,
+                     work.rwdata (), n, iwork.rwdata (), n, info));
 
           PREPARE_OUTPUT ()
         }
@@ -161,10 +161,10 @@
 
           F77_XFCN (ctrsen, ctrsen,
                     (F77_CONST_CHAR_ARG ("N"), F77_CONST_CHAR_ARG ("V"),
-                     sel.data (), n, F77_CMPLX_ARG (S.fortran_vec ()), n,
-                     F77_CMPLX_ARG (U.fortran_vec ()), n,
-                     F77_CMPLX_ARG (w.fortran_vec ()), m, cond1, cond2,
-                     F77_CMPLX_ARG (work.fortran_vec ()), n,
+                     sel.data (), n, F77_CMPLX_ARG (S.rwdata ()), n,
+                     F77_CMPLX_ARG (U.rwdata ()), n,
+                     F77_CMPLX_ARG (w.rwdata ()), m, cond1, cond2,
+                     F77_CMPLX_ARG (work.rwdata ()), n,
                      info));
 
           PREPARE_OUTPUT ()
@@ -177,9 +177,9 @@
 
           F77_XFCN (strsen, strsen,
                     (F77_CONST_CHAR_ARG ("N"), F77_CONST_CHAR_ARG ("V"),
-                     sel.data (), n, S.fortran_vec (), n, U.fortran_vec (), n,
-                     w.fortran_vec (), wi.fortran_vec (), m, cond1, cond2,
-                     work.fortran_vec (), n, iwork.fortran_vec (), n, info));
+                     sel.data (), n, S.rwdata (), n, U.rwdata (), n,
+                     w.rwdata (), wi.rwdata (), m, cond1, cond2,
+                     work.rwdata (), n, iwork.rwdata (), n, info));
 
           PREPARE_OUTPUT ()
         }
--- a/libinterp/corefcn/pager.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/pager.h	Mon Feb 26 23:30:33 2024 -0500
@@ -41,9 +41,7 @@
 class interpreter;
 class oprocstream;
 
-class
-OCTINTERP_API
-pager_buf : public std::stringbuf
+class OCTINTERP_API pager_buf : public std::stringbuf
 {
 public:
 
@@ -66,9 +64,7 @@
   std::size_t m_diary_skip;
 };
 
-class
-OCTINTERP_API
-pager_stream : public std::ostream
+class OCTINTERP_API pager_stream : public std::ostream
 {
 public:
 
@@ -91,9 +87,7 @@
   pager_buf *m_pb;
 };
 
-class
-OCTINTERP_API
-diary_buf : public std::stringbuf
+class OCTINTERP_API diary_buf : public std::stringbuf
 {
 public:
 
@@ -105,9 +99,7 @@
   int sync ();
 };
 
-class
-OCTINTERP_API
-diary_stream : public std::ostream
+class OCTINTERP_API diary_stream : public std::ostream
 {
 public:
 
--- a/libinterp/corefcn/perms.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/perms.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -28,6 +28,7 @@
 #endif
 
 #include <algorithm>
+#include <numeric>
 
 #include "defun.h"
 #include "error.h"
@@ -48,124 +49,88 @@
 //
 // Use C++ template to cater for the different octave array classes.
 //
-template <typename T>
-static inline Array<T>
-GetPerms (const Array<T>& ar_in, bool uniq_v, bool do_sort = false)
-{
-  octave_idx_type m = ar_in.numel ();
-  double nr = Factorial (m);
-
-  // Setup index vector filled from 0..m-1
-  OCTAVE_LOCAL_BUFFER (int, myvidx, m);
-  for (int i = 0; i < m; i++)
-    myvidx[i] = i;
-
-  // Interim array to sort ar_in for octave sort order and to implement
-  // "unique".
-  Array<T> ar (ar_in);
-
-  if (uniq_v)
-    {
-      ar = ar.sort (ar.dims () (1) > ar.dims () (0) ? 1 : 0, ASCENDING);
-      const T *Ar = ar.data ();
-      int ctr = 0;
-      int N_el = 1;
 
-      // Number of same elements where we need to remove permutations
-      // Number of unique permutations is n! / (n_el1! * n_el2! * ...)
-      for (octave_idx_type i = 0; i < m - 1; i++)
-        {
-          myvidx[i] = ctr;
-          if (Ar[i + 1] != Ar[i])
-            {
-              nr /= Factorial (N_el);
-              ctr = i + 1;  // index of next different element
-              N_el = 1;
-            }
-          else
-            N_el++;
-        }
-      myvidx[m - 1] = ctr;
-      nr /= Factorial (N_el);
-    }
-  else if (do_sort)
-    {
-      ar = ar.sort (ar.dims () (1) > ar.dims () (0) ? 1 : 0, ASCENDING);
-    }
+// FIXME: To allow comparison between all supported template types, we need
+// to use either "if constexpr" (supported in C++17) or template specialisation
+// (supported in C++11).  Currently (2024), Octave stipulates the usage of
+// C++11, so the (slightly more complex) template specialization is used.
+// Once Octave moves to C++17 or beyond, the following code snippet is
+// preferrable and the comparison templates can be removed:
+// bool isequal;
+// if constexpr (std::is_same<T, octave_value>::value)
+//   isequal = Ar[i].is_equal (Ar[j]);
+// else
+//   isequal = (Ar[i] == Ar[j]);
 
-  // Sort vector indices for inverse lexicographic order later.
-  std::sort (myvidx, myvidx + m, std::greater<int> ());
-
-  const T *Ar = ar.data ();
-
-  // Set up result array
-  octave_idx_type n = static_cast<octave_idx_type> (nr);
-  Array<T> res (dim_vector (n, m));
-  T *Res = res.fortran_vec ();
-
-  // Do the actual job
-  octave_idx_type i = 0;
-  std::sort (myvidx, myvidx + m, std::greater<int> ());
-  do
-    {
-      for (octave_idx_type j = 0; j < m; j++)
-        Res[i + j * n] = Ar[myvidx[j]];
-      i++;
-    }
-  while (std::next_permutation (myvidx, myvidx + m, std::greater<int> ()));
-
-  return res;
+template <typename T>
+bool is_equal_T (T a, T b)
+{
+  return a == b;
 }
 
-// Template for non-numerical types (e.g. Cell) without sorting.
-// The C++ compiler complains as the provided type octave_value does not
-// support the test of equality via '==' in the above template.
+template <>
+bool is_equal_T<octave_value> (octave_value a, octave_value b)
+{
+  return a.is_equal (b);
+}
 
 template <typename T>
 static inline Array<T>
-GetPermsNoSort (const Array<T>& ar_in, bool uniq_v = false)
+GetPerms (const Array<T>& ar_in, bool uniq_v = false)
 {
   octave_idx_type m = ar_in.numel ();
-  double nr = Factorial (m);
+  double nr;  // number of rows of resulting array
 
   // Setup index vector filled from 0..m-1
-  OCTAVE_LOCAL_BUFFER (int, myvidx, m);
-  for (int i = 0; i < m; i++)
-    myvidx[i] = i;
+  OCTAVE_LOCAL_BUFFER (octave_idx_type, myvidx, m);
+  std::iota (&myvidx[0], &myvidx[m], 0);
 
   const T *Ar = ar_in.data ();
 
   if (uniq_v)
     {
-      // Mutual Comparison using is_equal to detect duplicated values
-      int N_el = 1;
+      // Mutual Comparison is used to detect duplicated values.
+      // Using sort would be possible for numerical values and be of
+      // O(n*log (n)) complexity instead of O(n*(n -1) / 2).  But sort
+      // is not supported for the octave_value container (structs/cells).
+      // Moreover, sort requires overhead for creating, filling, and sorting
+      // the intermediate array which would need to be post-processed.
+      // In practice, and because n must be very small, mutual comparison is
+      // typically faster and consumes less memory.
+
+      octave_idx_type N_el = 1;
+      double denom = 1.0;
       // Number of unique permutations is n! / (n_el1! * n_el2! * ...)
       for (octave_idx_type i = 0; i < m - 1; i++)
         {
           for (octave_idx_type j = i + 1; j < m; j++)
             {
-              if (myvidx[j] > myvidx[i] && Ar[i].is_equal (Ar[j]))
+              bool isequal = is_equal_T<T> (Ar[i], Ar[j]);
+              if (myvidx[j] > myvidx[i] && isequal)
                 {
                   myvidx[j] = myvidx[i];  // not yet processed...
                   N_el++;
                 }
               else
                 {
-                  nr /= Factorial (N_el);
+                  denom *= Factorial (N_el);
                   N_el = 1;
                 }
             }
         }
-      nr /= Factorial (N_el);
+      denom *= Factorial (N_el);
+      nr = Factorial (m) / denom;
     }
+  else
+    nr = Factorial (m);
 
   // Sort vector indices for inverse lexicographic order later.
-  std::sort (myvidx, myvidx + m, std::greater<int> ());
+  std::sort (myvidx, myvidx + m, std::greater<octave_idx_type> ());
 
   // Set up result array
   octave_idx_type n = static_cast<octave_idx_type> (nr);
   Array<T> res (dim_vector (n, m));
-  T *Res = res.fortran_vec ();
+  T *Res = res.rwdata ();
 
   // Do the actual job
   octave_idx_type i = 0;
@@ -259,8 +224,8 @@
          || args (0).iscell () || args (0).is_scalar_type ()
          || args (0).isstruct ()))
     {
-      error ("perms: INPUT must be a matrix, a range, a cell array, "
-             "a struct or a scalar.");
+      error ("perms: V must be a matrix, range, cell array, "
+             "struct, or a scalar.");
     }
 
   std::string clname = args (0).class_name ();
@@ -291,7 +256,7 @@
   else if (clname == "uint64")
     retval = GetPerms<octave_uint64> (args (0).uint64_array_value (), uniq_v);
   else if (clname == "cell")
-    retval = GetPermsNoSort<octave_value> (args (0).cell_value (), uniq_v);
+    retval = GetPerms<octave_value> (args (0).cell_value (), uniq_v);
   else if (clname == "struct")
     {
       const octave_map map_in (args (0).map_value ());
@@ -312,7 +277,7 @@
             {
               for (octave_idx_type i = 0; i < fn.numel (); i++)
                 {
-                  out.assign (fn (i), GetPermsNoSort<octave_value>
+                  out.assign (fn (i), GetPerms<octave_value>
                                       (map_in.contents (fn (i)), uniq_v));
                 }
             }
--- a/libinterp/corefcn/pr-flt-fmt.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/pr-flt-fmt.h	Mon Feb 26 23:30:33 2024 -0500
@@ -44,9 +44,7 @@
 
 extern OCTINTERP_API void set_output_prec (int prec);
 
-class
-OCTINTERP_API
-float_format
+class OCTINTERP_API float_format
 {
 public:
 
@@ -205,9 +203,7 @@
   int m_sp;
 };
 
-class
-OCTINTERP_API
-float_display_format
+class OCTINTERP_API float_display_format
 {
 public:
 
--- a/libinterp/corefcn/pr-output.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/pr-output.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -1546,7 +1546,7 @@
   if (! bank_format)
     {
       T i = cval.imag ();
-      if (! (hex_format || bit_format) && lo_ieee_signbit (i))
+      if (! (hex_format || bit_format) && std::signbit (i))
         {
           os << " - ";
           i = -i;
@@ -2124,7 +2124,7 @@
 
       int ndims = nda.ndims ();
 
-      dim_vector dims = nda.dims ();
+      const dim_vector& dims = nda.dims ();
 
       Array<octave_idx_type> ra_idx (dim_vector (ndims, 1), 0);
 
@@ -2712,7 +2712,7 @@
     {
       int ndims = nda.ndims ();
 
-      dim_vector dims = nda.dims ();
+      const dim_vector& dims = nda.dims ();
 
       Array<octave_idx_type> ra_idx (dim_vector (ndims, 1), 0);
 
@@ -2784,8 +2784,7 @@
 }
 
 template <typename T>
-class
-octave_print_conv
+class octave_print_conv
 {
 public:
   typedef T print_conv_type;
@@ -2954,7 +2953,7 @@
 
       Array<octave_idx_type> ra_idx (dim_vector (ndims, 1), 0);
 
-      dim_vector dims = nda.dims ();
+      const dim_vector& dims = nda.dims ();
 
       octave_idx_type m = 1;
 
@@ -3023,7 +3022,7 @@
     {
       int ndims = nda.ndims ();
 
-      dim_vector dims = nda.dims ();
+      const dim_vector& dims = nda.dims ();
 
       Array<octave_idx_type> ra_idx (dim_vector (ndims, 1), 0);
 
@@ -3606,7 +3605,7 @@
   frame.protect_var (Vcompact_format);
   frame.protect_var (uppercase_format);
   int prec = output_precision ();
-  frame.add ([=] () { set_output_prec (prec); });
+  frame.add ([prec] () { set_output_prec (prec); });
 
   format = format_string;   // Initialize with existing value
   while (argc-- > 0)
--- a/libinterp/corefcn/pr-output.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/pr-output.h	Mon Feb 26 23:30:33 2024 -0500
@@ -508,8 +508,7 @@
                        bool pr_as_read_syntax = false);
 
 template <typename T>
-class
-pr_engineering_float
+class pr_engineering_float
 {
 public:
 
@@ -529,8 +528,7 @@
 };
 
 template <typename T>
-class
-pr_formatted_float
+class pr_formatted_float
 {
 public:
 
@@ -546,8 +544,7 @@
 };
 
 template <typename T>
-class
-pr_rational_float
+class pr_rational_float
 {
 public:
 
--- a/libinterp/corefcn/procstream.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/procstream.h	Mon Feb 26 23:30:33 2024 -0500
@@ -37,9 +37,7 @@
 
 OCTAVE_BEGIN_NAMESPACE(octave)
 
-class
-OCTINTERP_API
-procstreambase : virtual public std::ios
+class OCTINTERP_API procstreambase : virtual public std::ios
 {
 public:
 
@@ -80,9 +78,7 @@
   }
 };
 
-class
-OCTINTERP_API
-iprocstream : public std::istream, public procstreambase
+class OCTINTERP_API iprocstream : public std::istream, public procstreambase
 {
 public:
 
@@ -111,9 +107,7 @@
   }
 };
 
-class
-OCTINTERP_API
-oprocstream : public std::ostream, public procstreambase
+class OCTINTERP_API oprocstream : public std::ostream, public procstreambase
 {
 public:
 
@@ -140,9 +134,7 @@
   }
 };
 
-class
-OCTINTERP_API
-procstream : public std::iostream, public procstreambase
+class OCTINTERP_API procstream : public std::iostream, public procstreambase
 {
 public:
 
--- a/libinterp/corefcn/psi.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/psi.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -93,7 +93,7 @@
           A ## NDArray psi_z (z.dims ());                       \
                                                                 \
           const E *zv = z.data ();                              \
-          E *psi_zv = psi_z.fortran_vec ();                     \
+          E *psi_zv = psi_z.rwdata ();                     \
           const octave_idx_type n = z.numel ();                 \
           for (octave_idx_type i = 0; i < n; i++)               \
             *psi_zv++ = math::psi (*zv++);              \
@@ -130,7 +130,7 @@
           A ## NDArray psi_z (z.dims ());                               \
                                                                         \
           const E *zv = z.data ();                                      \
-          E *psi_zv = psi_z.fortran_vec ();                             \
+          E *psi_zv = psi_z.rwdata ();                             \
           const octave_idx_type n = z.numel ();                         \
           for (octave_idx_type i = 0; i < n; i++)                       \
             {                                                           \
--- a/libinterp/corefcn/qr.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/qr.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -1925,9 +1925,9 @@
 @w{@var{A} = @var{Q}*@var{R}}, @var{Q}@tie{}unitary and
 @var{R}@tie{}upper trapezoidal, return the QR@tie{}factorization
 of @w{@var{A}(:,p)}, where @w{p} is the permutation @*
-@code{p = [1:i-1, shift(i:j, 1), j+1:n]} if @w{@var{i} < @var{j}} @*
+@code{p = [1:i-1, circshift(i:j, 1), j+1:n]} if @w{@var{i} < @var{j}} @*
  or @*
-@code{p = [1:j-1, shift(j:i,-1), i+1:n]} if @w{@var{j} < @var{i}}.  @*
+@code{p = [1:j-1, circshift(j:i,-1), i+1:n]} if @w{@var{j} < @var{i}}.  @*
 
 @seealso{qr, qrupdate, qrinsert, qrdelete}
 @end deftypefn */)
@@ -2011,7 +2011,7 @@
 /*
 %!test
 %! AA = A.';
-%! i = 2;  j = 4;  p = [1:i-1, shift(i:j,-1), j+1:5];
+%! i = 2;  j = 4;  p = [1:i-1, circshift(i:j,-1), j+1:5];
 %!
 %! [Q,R] = qr (AA);
 %! [Q,R] = qrshift (Q, R, i, j);
@@ -2019,7 +2019,7 @@
 %! assert (norm (vec (triu (R) - R), Inf), 0);
 %! assert (norm (vec (Q*R - AA(:,p)), Inf), 0, norm (AA)*1e1*eps);
 %!
-%! j = 2;  i = 4;  p = [1:j-1, shift(j:i,+1), i+1:5];
+%! j = 2;  i = 4;  p = [1:j-1, circshift(j:i,+1), i+1:5];
 %!
 %! [Q,R] = qr (AA);
 %! [Q,R] = qrshift (Q, R, i, j);
@@ -2029,7 +2029,7 @@
 %!
 %!test
 %! AA = Ac.';
-%! i = 2;  j = 4;  p = [1:i-1, shift(i:j,-1), j+1:5];
+%! i = 2;  j = 4;  p = [1:i-1, circshift(i:j,-1), j+1:5];
 %!
 %! [Q,R] = qr (AA);
 %! [Q,R] = qrshift (Q, R, i, j);
@@ -2037,7 +2037,7 @@
 %! assert (norm (vec (triu (R) - R), Inf), 0);
 %! assert (norm (vec (Q*R - AA(:,p)), Inf), 0, norm (AA)*1e1*eps);
 %!
-%! j = 2;  i = 4;  p = [1:j-1, shift(j:i,+1), i+1:5];
+%! j = 2;  i = 4;  p = [1:j-1, circshift(j:i,+1), i+1:5];
 %!
 %! [Q,R] = qr (AA);
 %! [Q,R] = qrshift (Q, R, i, j);
@@ -2047,7 +2047,7 @@
 
 %!test
 %! AA = single (A).';
-%! i = 2;  j = 4;  p = [1:i-1, shift(i:j,-1), j+1:5];
+%! i = 2;  j = 4;  p = [1:i-1, circshift(i:j,-1), j+1:5];
 %!
 %! [Q,R] = qr (AA);
 %! [Q,R] = qrshift (Q, R, i, j);
@@ -2057,7 +2057,7 @@
 %! assert (norm (vec (Q*R - AA(:,p)), Inf), single (0), ...
 %!         norm (AA)*1e1 * eps ("single"));
 %!
-%! j = 2;  i = 4;  p = [1:j-1, shift(j:i,+1), i+1:5];
+%! j = 2;  i = 4;  p = [1:j-1, circshift(j:i,+1), i+1:5];
 %!
 %! [Q,R] = qr (AA);
 %! [Q,R] = qrshift (Q, R, i, j);
@@ -2069,7 +2069,7 @@
 %!
 %!test
 %! AA = single (Ac).';
-%! i = 2;  j = 4;  p = [1:i-1, shift(i:j,-1), j+1:5];
+%! i = 2;  j = 4;  p = [1:i-1, circshift(i:j,-1), j+1:5];
 %!
 %! [Q,R] = qr (AA);
 %! [Q,R] = qrshift (Q, R, i, j);
@@ -2079,7 +2079,7 @@
 %! assert (norm (vec (Q*R - AA(:,p)), Inf), single (0), ...
 %!         norm (AA)*1e1 * eps ("single"));
 %!
-%! j = 2;  i = 4;  p = [1:j-1, shift(j:i,+1), i+1:5];
+%! j = 2;  i = 4;  p = [1:j-1, circshift(j:i,+1), i+1:5];
 %!
 %! [Q,R] = qr (AA);
 %! [Q,R] = qrshift (Q, R, i, j);
--- a/libinterp/corefcn/quadcc.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/quadcc.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -61,7 +61,7 @@
 };
 
 // Define relative tolerance used when deciding to drop an interval.
-static const double DROP_RELTOL = std::numeric_limits<double>::epsilon () * 10;
+static constexpr double DROP_RELTOL = std::numeric_limits<double>::epsilon () * 10;
 
 // Some constants and matrices that we'll need.
 
@@ -1672,7 +1672,7 @@
     {
       // Intervals around singularities.
       NDArray arr = args(4).array_value ();
-      sing = arr.fortran_vec ();
+      sing = arr.rwdata ();
       iivals[0] = a;
       std::copy_n (sing, nivals-1, iivals+1);
       iivals[nivals] = b;
--- a/libinterp/corefcn/qz.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/qz.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -219,8 +219,8 @@
   // Initialize Q, Z to identity matrix if either is needed
   if (comp_q == 'V' || comp_z == 'V')
     {
-      double *QQptr = QQ.fortran_vec ();
-      double *ZZptr = ZZ.fortran_vec ();
+      double *QQptr = QQ.rwdata ();
+      double *ZZptr = ZZ.rwdata ();
       std::fill_n (QQptr, QQ.numel (), 0.0);
       std::fill_n (ZZptr, ZZ.numel (), 0.0);
       for (F77_INT i = 0; i < nn; i++)
@@ -254,10 +254,10 @@
 
       F77_XFCN (zggbal, ZGGBAL,
                 (F77_CONST_CHAR_ARG2 (&bal_job, 1),
-                 nn, F77_DBLE_CMPLX_ARG (caa.fortran_vec ()), nn,
-                 F77_DBLE_CMPLX_ARG (cbb.fortran_vec ()),
-                 nn, ilo, ihi, lscale.fortran_vec (),
-                 rscale.fortran_vec (), work.fortran_vec (), info
+                 nn, F77_DBLE_CMPLX_ARG (caa.rwdata ()), nn,
+                 F77_DBLE_CMPLX_ARG (cbb.rwdata ()),
+                 nn, ilo, ihi, lscale.rwdata (),
+                 rscale.rwdata (), work.rwdata (), info
                  F77_CHAR_ARG_LEN (1)));
     }
   else
@@ -269,9 +269,9 @@
 
       F77_XFCN (dggbal, DGGBAL,
                 (F77_CONST_CHAR_ARG2 (&bal_job, 1),
-                 nn, aa.fortran_vec (), nn, bb.fortran_vec (),
-                 nn, ilo, ihi, lscale.fortran_vec (),
-                 rscale.fortran_vec (), work.fortran_vec (), info
+                 nn, aa.rwdata (), nn, bb.rwdata (),
+                 nn, ilo, ihi, lscale.rwdata (),
+                 rscale.rwdata (), work.rwdata (), info
                  F77_CHAR_ARG_LEN (1)));
     }
 
@@ -294,10 +294,10 @@
       F77_XFCN (zgghrd, ZGGHRD,
                 (F77_CONST_CHAR_ARG2 (&comp_q, 1),
                  F77_CONST_CHAR_ARG2 (&comp_z, 1),
-                 nn, ilo, ihi, F77_DBLE_CMPLX_ARG (caa.fortran_vec ()),
-                 nn, F77_DBLE_CMPLX_ARG (cbb.fortran_vec ()), nn,
-                 F77_DBLE_CMPLX_ARG (CQ.fortran_vec ()), nn,
-                 F77_DBLE_CMPLX_ARG (CZ.fortran_vec ()), nn, info
+                 nn, ilo, ihi, F77_DBLE_CMPLX_ARG (caa.rwdata ()),
+                 nn, F77_DBLE_CMPLX_ARG (cbb.rwdata ()), nn,
+                 F77_DBLE_CMPLX_ARG (CQ.rwdata ()), nn,
+                 F77_DBLE_CMPLX_ARG (CZ.rwdata ()), nn, info
                  F77_CHAR_ARG_LEN (1)
                  F77_CHAR_ARG_LEN (1)));
 
@@ -308,14 +308,14 @@
                  F77_CONST_CHAR_ARG2 (&comp_q, 1),
                  F77_CONST_CHAR_ARG2 (&comp_z, 1),
                  nn, ilo, ihi,
-                 F77_DBLE_CMPLX_ARG (caa.fortran_vec ()), nn,
-                 F77_DBLE_CMPLX_ARG (cbb.fortran_vec ()), nn,
-                 F77_DBLE_CMPLX_ARG (xalpha.fortran_vec ()),
-                 F77_DBLE_CMPLX_ARG (xbeta.fortran_vec ()),
-                 F77_DBLE_CMPLX_ARG (CQ.fortran_vec ()), nn,
-                 F77_DBLE_CMPLX_ARG (CZ.fortran_vec ()), nn,
-                 F77_DBLE_CMPLX_ARG (cwork.fortran_vec ()), nn,
-                 rwork.fortran_vec (), info
+                 F77_DBLE_CMPLX_ARG (caa.rwdata ()), nn,
+                 F77_DBLE_CMPLX_ARG (cbb.rwdata ()), nn,
+                 F77_DBLE_CMPLX_ARG (xalpha.rwdata ()),
+                 F77_DBLE_CMPLX_ARG (xbeta.rwdata ()),
+                 F77_DBLE_CMPLX_ARG (CQ.rwdata ()), nn,
+                 F77_DBLE_CMPLX_ARG (CZ.rwdata ()), nn,
+                 F77_DBLE_CMPLX_ARG (cwork.rwdata ()), nn,
+                 rwork.rwdata (), info
                  F77_CHAR_ARG_LEN (1)
                  F77_CHAR_ARG_LEN (1)
                  F77_CHAR_ARG_LEN (1)));
@@ -327,7 +327,7 @@
                     (F77_CONST_CHAR_ARG2 (&bal_job, 1),
                      F77_CONST_CHAR_ARG2 ("L", 1),
                      nn, ilo, ihi, lscale.data (), rscale.data (),
-                     nn, F77_DBLE_CMPLX_ARG (CQ.fortran_vec ()), nn, info
+                     nn, F77_DBLE_CMPLX_ARG (CQ.rwdata ()), nn, info
                      F77_CHAR_ARG_LEN (1)
                      F77_CHAR_ARG_LEN (1)));
         }
@@ -339,7 +339,7 @@
                     (F77_CONST_CHAR_ARG2 (&bal_job, 1),
                      F77_CONST_CHAR_ARG2 ("R", 1),
                      nn, ilo, ihi, lscale.data (), rscale.data (),
-                     nn, F77_DBLE_CMPLX_ARG (CZ.fortran_vec ()), nn, info
+                     nn, F77_DBLE_CMPLX_ARG (CZ.rwdata ()), nn, info
                      F77_CHAR_ARG_LEN (1)
                      F77_CHAR_ARG_LEN (1)));
         }
@@ -391,9 +391,9 @@
       F77_XFCN (dgghrd, DGGHRD,
                 (F77_CONST_CHAR_ARG2 (&comp_q, 1),
                  F77_CONST_CHAR_ARG2 (&comp_z, 1),
-                 nn, ilo, ihi, aa.fortran_vec (),
-                 nn, bb.fortran_vec (), nn, QQ.fortran_vec (), nn,
-                 ZZ.fortran_vec (), nn, info
+                 nn, ilo, ihi, aa.rwdata (),
+                 nn, bb.rwdata (), nn, QQ.rwdata (), nn,
+                 ZZ.rwdata (), nn, info
                  F77_CHAR_ARG_LEN (1)
                  F77_CHAR_ARG_LEN (1)));
 
@@ -405,10 +405,10 @@
                 (F77_CONST_CHAR_ARG2 (&qz_job, 1),
                  F77_CONST_CHAR_ARG2 (&comp_q, 1),
                  F77_CONST_CHAR_ARG2 (&comp_z, 1),
-                 nn, ilo, ihi, aa.fortran_vec (), nn, bb.fortran_vec (),
-                 nn, alphar.fortran_vec (), alphai.fortran_vec (),
-                 betar.fortran_vec (), QQ.fortran_vec (), nn,
-                 ZZ.fortran_vec (), nn, work.fortran_vec (), nn, info
+                 nn, ilo, ihi, aa.rwdata (), nn, bb.rwdata (),
+                 nn, alphar.rwdata (), alphai.rwdata (),
+                 betar.rwdata (), QQ.rwdata (), nn,
+                 ZZ.rwdata (), nn, work.rwdata (), nn, info
                  F77_CHAR_ARG_LEN (1)
                  F77_CHAR_ARG_LEN (1)
                  F77_CHAR_ARG_LEN (1)));
@@ -419,7 +419,7 @@
                     (F77_CONST_CHAR_ARG2 (&bal_job, 1),
                      F77_CONST_CHAR_ARG2 ("L", 1),
                      nn, ilo, ihi, lscale.data (), rscale.data (),
-                     nn, QQ.fortran_vec (), nn, info
+                     nn, QQ.rwdata (), nn, info
                      F77_CHAR_ARG_LEN (1)
                      F77_CHAR_ARG_LEN (1)));
 
@@ -436,7 +436,7 @@
                     (F77_CONST_CHAR_ARG2 (&bal_job, 1),
                      F77_CONST_CHAR_ARG2 ("R", 1),
                      nn, ilo, ihi, lscale.data (), rscale.data (),
-                     nn, ZZ.fortran_vec (), nn, info
+                     nn, ZZ.rwdata (), nn, info
                      F77_CHAR_ARG_LEN (1)
                      F77_CHAR_ARG_LEN (1)));
 
@@ -469,12 +469,12 @@
           F77_XFCN (ztgevc, ZTGEVC,
                     (F77_CONST_CHAR_ARG2 (&side, 1),
                      F77_CONST_CHAR_ARG2 (&howmany, 1),
-                     select, nn, F77_DBLE_CMPLX_ARG (caa.fortran_vec ()), nn,
-                     F77_DBLE_CMPLX_ARG (cbb.fortran_vec ()),
-                     nn, F77_DBLE_CMPLX_ARG (CVL.fortran_vec ()), nn,
-                     F77_DBLE_CMPLX_ARG (CVR.fortran_vec ()), nn, nn,
-                     m, F77_DBLE_CMPLX_ARG (cwork2.fortran_vec ()),
-                     rwork2.fortran_vec (), info
+                     select, nn, F77_DBLE_CMPLX_ARG (caa.rwdata ()), nn,
+                     F77_DBLE_CMPLX_ARG (cbb.rwdata ()),
+                     nn, F77_DBLE_CMPLX_ARG (CVL.rwdata ()), nn,
+                     F77_DBLE_CMPLX_ARG (CVR.rwdata ()), nn, nn,
+                     m, F77_DBLE_CMPLX_ARG (cwork2.rwdata ()),
+                     rwork2.rwdata (), info
                      F77_CHAR_ARG_LEN (1)
                      F77_CHAR_ARG_LEN (1)));
         }
@@ -491,9 +491,9 @@
           F77_XFCN (dtgevc, DTGEVC,
                     (F77_CONST_CHAR_ARG2 (&side, 1),
                      F77_CONST_CHAR_ARG2 (&howmany, 1),
-                     select, nn, aa.fortran_vec (), nn, bb.fortran_vec (),
-                     nn, VL.fortran_vec (), nn, VR.fortran_vec (), nn, nn,
-                     m, work.fortran_vec (), info
+                     select, nn, aa.rwdata (), nn, bb.rwdata (),
+                     nn, VL.rwdata (), nn, VR.rwdata (), nn, nn,
+                     m, work.rwdata (), info
                      F77_CHAR_ARG_LEN (1)
                      F77_CHAR_ARG_LEN (1)));
         }
--- a/libinterp/corefcn/rand.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/rand.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -318,7 +318,7 @@
 
               octave_idx_type len = a.numel ();
               FloatNDArray m (dims);
-              float *v = m.fortran_vec ();
+              float *v = m.rwdata ();
 
               for (octave_idx_type i = 0; i < len; i++)
                 v[i] = rand::float_scalar (a(i));
@@ -342,7 +342,7 @@
 
               octave_idx_type len = a.numel ();
               NDArray m (dims);
-              double *v = m.fortran_vec ();
+              double *v = m.rwdata ();
 
               for (octave_idx_type i = 0; i < len; i++)
                 v[i] = rand::scalar (a(i));
@@ -1144,7 +1144,7 @@
 
   // Generate random numbers.
   NDArray r = rand::nd_array (dim_vector (1, m));
-  double *rvec = r.fortran_vec ();
+  double *rvec = r.rwdata ();
 
   octave_idx_type idx_len = (short_shuffle ? m : n);
   Array<octave_idx_type> idx;
@@ -1161,7 +1161,7 @@
       idx = Array<octave_idx_type> (dim_vector (1, idx_len));
     }
 
-  octave_idx_type *ivec = idx.fortran_vec ();
+  octave_idx_type *ivec = idx.rwdata ();
 
   for (octave_idx_type i = 0; i < idx_len; i++)
     ivec[i] = i;
--- a/libinterp/corefcn/regexp.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/regexp.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -30,7 +30,6 @@
 #include <list>
 #include <sstream>
 
-#include "base-list.h"
 #include "oct-locbuf.h"
 #include "quit.h"
 #include "lo-regexp.h"
--- a/libinterp/corefcn/sighandlers.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/sighandlers.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -203,8 +203,7 @@
               || (have_sigcld && sig == sigcld))
             {
               // FIXME: should we block or ignore?
-              volatile interrupt_handler saved_interrupt_handler
-                = ignore_interrupts ();
+              interrupt_handler saved_interrupt_handler = ignore_interrupts ();
 
               void *context = octave_block_child ();
 
@@ -346,8 +345,7 @@
 }
 
 interrupt_handler
-set_interrupt_handler (const volatile interrupt_handler& h,
-                       bool restart_syscalls)
+set_interrupt_handler (const interrupt_handler& h, bool restart_syscalls)
 {
   interrupt_handler retval;
 
--- a/libinterp/corefcn/sighandlers.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/sighandlers.h	Mon Feb 26 23:30:33 2024 -0500
@@ -77,7 +77,7 @@
 extern OCTINTERP_API interrupt_handler ignore_interrupts ();
 
 extern OCTINTERP_API interrupt_handler
-set_interrupt_handler (const volatile interrupt_handler& h,
+set_interrupt_handler (const interrupt_handler& h,
                        bool restart_syscalls = true);
 
 // TRUE means we should try to enter the debugger on SIGINT.
--- a/libinterp/corefcn/sqrtm.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/sqrtm.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -40,51 +40,94 @@
 
 OCTAVE_BEGIN_NAMESPACE(octave)
 
-template <typename Matrix>
+template <typename T>
 static void
-sqrtm_utri_inplace (Matrix& T)
+sqrtm_utri_inplace (T& m)
 {
-  typedef typename Matrix::element_type element_type;
+  typedef typename T::element_type element_type;
+  typedef typename T::real_matrix_type real_matrix_type;
+  typedef typename T::real_elt_type real_elt_type;
 
   const element_type zero = element_type ();
 
   bool singular = false;
+  bool diagonal = true;
 
-  // The following code is equivalent to this triple loop:
-  //
-  //   n = rows (T);
-  //   for j = 1:n
-  //     T(j,j) = sqrt (T(j,j));
-  //     for i = j-1:-1:1
-  //       if T(i,j) != 0
-  //         T(i,j) /= (T(i,i) + T(j,j));
-  //       endif
-  //       k = 1:i-1;
-  //       T(k,j) -= T(k,i) * T(i,j);
-  //     endfor
-  //   endfor
-  //
-  // this is an in-place, cache-aligned variant of the code
-  // given in Higham's paper.
+  // The Schur matrix of Hermitian matrices is diagonal.
+  // check for off-diagonal elements above tolerance
+  const octave_idx_type n = m.rows ();
+  real_matrix_type abs_m = m.abs ();
+
+  real_elt_type max_abs_diag = 0;
+  for (octave_idx_type i = 0; i < n; i++)
+    max_abs_diag = std::max (max_abs_diag, abs_m(i,i));
+
+  const real_elt_type tol = n * max_abs_diag
+                            * std::numeric_limits<real_elt_type>::epsilon ();
+
+   for (octave_idx_type j = 0; j < n; j++)
+     {
+       for (octave_idx_type i = j-1; i >= 0; i--)
+         {
+          if (abs_m(i,j) > tol)
+            {
+              diagonal = false;
+              break;
+            }
+        }
+      if (! diagonal)
+        break;
+    }
 
-  const octave_idx_type n = T.rows ();
-  element_type *Tp = T.fortran_vec ();
-  for (octave_idx_type j = 0; j < n; j++)
+  element_type *mp = m.rwdata ();
+  if (diagonal)
+    {
+      // shortcut for diagonal Schur matrices
+      for (octave_idx_type i = 0; i < n; i++)
+        {
+          octave_idx_type idx_diag = i*(n+1);
+          if (mp[idx_diag] != zero)
+            mp[idx_diag] = sqrt (mp[idx_diag]);
+          else
+            singular = true;
+        }
+    }
+  else
     {
-      element_type *colj = Tp + n*j;
-      if (colj[j] != zero)
-        colj[j] = sqrt (colj[j]);
-      else
-        singular = true;
+      // The following code is equivalent to this triple loop:
+      //
+      //   n = rows (m);
+      //   for j = 1:n
+      //     m(j,j) = sqrt (m(j,j));
+      //     for i = j-1:-1:1
+      //       if m(i,j) != 0
+      //         m(i,j) /= (m(i,i) + m(j,j));
+      //       endif
+      //       k = 1:i-1;
+      //       m(k,j) -= m(k,i) * m(i,j);
+      //     endfor
+      //   endfor
+      //
+      // this is an in-place, cache-aligned variant of the code
+      // given in Higham's paper.
 
-      for (octave_idx_type i = j-1; i >= 0; i--)
+      for (octave_idx_type j = 0; j < n; j++)
         {
-          const element_type *coli = Tp + n*i;
-          if (colj[i] != zero)
-            colj[i] /= (coli[i] + colj[j]);
-          const element_type colji = colj[i];
-          for (octave_idx_type k = 0; k < i; k++)
-            colj[k] -= coli[k] * colji;
+          element_type *colj = mp + n*j;
+          if (colj[j] != zero)
+            colj[j] = sqrt (colj[j]);
+          else
+            singular = true;
+
+          for (octave_idx_type i = j-1; i >= 0; i--)
+            {
+              const element_type *coli = mp + n*i;
+              if (colj[i] != zero)
+                colj[i] /= (coli[i] + colj[j]);
+              const element_type colji = colj[i];
+              for (octave_idx_type k = 0; k < i; k++)
+                colj[k] -= coli[k] * colji;
+            }
         }
     }
 
@@ -186,11 +229,11 @@
                 x = schur_fact.schur_matrix ();
                 u = schur_fact.unitary_schur_matrix ();
               }
-            while (0); // schur no longer needed.
+            while (0);  // schur_fact no longer needed.
 
             sqrtm_utri_inplace (x);
 
-            x = u * x; // original x no longer needed.
+            x = u * x;  // original x no longer needed.
             ComplexMatrix res = xgemm (x, u, blas_no_trans, blas_conj_trans);
 
             if (cutoff > 0 && xnorm (imag (res), one) <= cutoff)
--- a/libinterp/corefcn/stack-frame.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/stack-frame.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -30,6 +30,7 @@
 #include <iostream>
 
 #include "lo-regexp.h"
+#include "lo-sysdep.h"
 #include "str-vec.h"
 
 #include "defun.h"
@@ -48,6 +49,7 @@
 #include "syminfo.h"
 #include "symrec.h"
 #include "symscope.h"
+#include "utils.h"
 #include "variables.h"
 
 OCTAVE_BEGIN_NAMESPACE(octave)
@@ -190,6 +192,14 @@
     return m_static_link->varref (sym);
   }
 
+  std::string inputname (int n, bool ids_only) const
+  {
+    // Look in closest stack frame that contains values (either the
+    // top scope, or a user-defined function or script).
+
+    return m_static_link->inputname (n, ids_only);
+  }
+
   void mark_scope (const symbol_record& sym, scope_flags flag)
   {
     // Look in closest stack frame that contains values (either the
@@ -315,6 +325,11 @@
 
   octave_value& varref (const symbol_record& sym);
 
+  std::string inputname (int n, bool ids_only) const
+  {
+    return m_access_link->inputname (n, ids_only);
+  }
+
   void mark_scope (const symbol_record& sym, scope_flags flag);
 
   void display (bool follow = true) const;
@@ -551,6 +566,8 @@
 
   octave_value& varref (const symbol_record& sym);
 
+  std::string inputname (int n, bool ids_only) const;
+
   void mark_scope (const symbol_record& sym, scope_flags flag);
 
   void display (bool follow = true) const;
@@ -621,6 +638,14 @@
 
   octave_value& varref (const symbol_record& sym);
 
+  std::string inputname (int, bool) const
+  {
+    if (m_index == 0)
+      error ("invalid call to inputname outside of a function");
+
+    return "";
+  }
+
   void mark_scope (const symbol_record& sym, scope_flags flag);
 
   void display (bool follow = true) const;
@@ -1132,7 +1157,7 @@
       symbol_info syminf (sym.name (), value, sym.is_formal (),
                           is_global (sym), is_persistent (sym));
 
-      symbol_stats.append (syminf);
+      symbol_stats.push_back (syminf);
     }
 
   return symbol_stats;
@@ -1377,6 +1402,15 @@
   panic_impossible ();
 }
 
+std::string
+stack_frame::inputname (int, bool) const
+{
+  // This function should only be called for user_fcn_stack_frame.
+  // Anything else indicates an error in the implementation.
+
+  panic_impossible ();
+}
+
 void
 stack_frame::clear_objects ()
 {
@@ -1451,6 +1485,24 @@
 }
 
 void
+stack_frame::debug_list (std::ostream& os, int num_lines) const
+{
+  std::string file_name = fcn_file_name ();
+
+  int target_line = line ();
+  int start = std::max (target_line - num_lines/2, 0);
+  int end = target_line + num_lines/2;
+
+  display_file_lines (os, fcn_file_name (), start, end, target_line, "-->", "dblist");
+}
+
+void
+stack_frame::debug_type (std::ostream& os, int start_line, int end_line) const
+{
+  display_file_lines (os, fcn_file_name (), start_line, end_line, -1, "", "dbtype");
+}
+
+void
 stack_frame::display (bool follow) const
 {
   std::ostream& os = octave_stdout;
@@ -2402,6 +2454,25 @@
   error ("internal error: invalid switch case");
 }
 
+std::string
+user_fcn_stack_frame::inputname (int n, bool ids_only) const
+{
+  std::string name;
+
+  Array<std::string> arg_names
+    = m_auto_vars.at (stack_frame::ARG_NAMES).cellstr_value ();
+
+  if (n >= 0 && n < arg_names.numel ())
+    {
+      name = arg_names(n);
+
+      if (ids_only && ! m_static_link->is_variable (name))
+        name = "";
+    }
+
+  return name;
+}
+
 void
 user_fcn_stack_frame::mark_scope (const symbol_record& sym, scope_flags flag)
 {
--- a/libinterp/corefcn/stack-frame.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/stack-frame.h	Mon Feb 26 23:30:33 2024 -0500
@@ -455,6 +455,8 @@
 
   virtual octave_value& varref (std::size_t data_offset);
 
+  virtual std::string inputname (int n, bool ids_only) const;
+
   void assign (const symbol_record& sym, const octave_value& val)
   {
     octave_value& lhs = varref (sym);
@@ -559,6 +561,15 @@
 
   void display_stopped_in_message (std::ostream& os) const;
 
+  void debug_where (std::ostream& os) const
+  {
+    display_stopped_in_message (os);
+  }
+
+  void debug_list (std::ostream& os, int num_lines) const;
+
+  void debug_type (std::ostream& os, int start_line, int end_line) const;
+
   virtual void mark_scope (const symbol_record&, scope_flags) = 0;
 
   virtual void display (bool follow = true) const;
--- a/libinterp/corefcn/strfind.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/strfind.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -365,7 +365,7 @@
               ret.clear (dim_vector (1, retsiz));
               const char *src = str.data ();
               const char *reps = rep.data ();
-              char *dest = ret.fortran_vec ();
+              char *dest = ret.rwdata ();
 
               octave_idx_type k = 0;
               for (octave_idx_type i = 0; i < nidx; i++)
--- a/libinterp/corefcn/strfns.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/strfns.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -908,7 +908,7 @@
                codepage, std::strerror (errno));
     }
 
-  unwind_action free_utf8_str ([=] () { ::free (utf8_str); });
+  unwind_action free_utf8_str ([utf8_str] () { ::free (utf8_str); });
 
   octave_idx_type len = length;
 
@@ -953,7 +953,7 @@
                codepage, std::strerror (errno));
     }
 
-  unwind_action free_native_bytes ([=] () { ::free (native_bytes); });
+  unwind_action free_native_bytes ([native_bytes] () { ::free (native_bytes); });
 
   octave_idx_type len = length;
 
--- a/libinterp/corefcn/sub2ind.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/sub2ind.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -117,7 +117,7 @@
   if (nargin < 2)
     print_usage ();
 
-  dim_vector dv = get_dim_vector (args(0), "sub2ind");
+  const dim_vector& dv = get_dim_vector (args(0), "sub2ind");
 
   Array<idx_vector> idxa (dim_vector (nargin-1, 1));
 
--- a/libinterp/corefcn/syminfo.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/syminfo.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -169,7 +169,7 @@
 octave_value
 symbol_info_list::varval (const std::string& name) const
 {
-  for (const auto& syminfo : m_lst)
+  for (const auto& syminfo : *this)
     {
       if (name == syminfo.name ())
         return syminfo.value ();
@@ -183,7 +183,7 @@
 {
   std::list<std::string> retval;
 
-  for (const auto& syminfo : m_lst)
+  for (const auto& syminfo : *this)
     retval.push_back (syminfo.name ());
 
   return retval;
@@ -193,7 +193,7 @@
 symbol_info_list::map_value (const std::string& caller_function_name,
                              int nesting_level) const
 {
-  std::size_t len = m_lst.size ();
+  std::size_t len = size ();
 
   Cell name_info (len, 1);
   Cell size_info (len, 1);
@@ -207,7 +207,7 @@
 
   std::size_t j = 0;
 
-  for (const auto& syminfo : m_lst)
+  for (const auto& syminfo : *this)
     {
       octave_scalar_map ni;
 
@@ -334,7 +334,7 @@
 symbol_info_list::display (std::ostream& os,
                            const std::string& format) const
 {
-  if (! m_lst.empty ())
+  if (! empty ())
     {
       std::size_t bytes = 0;
       std::size_t elements = 0;
@@ -345,7 +345,7 @@
 
       octave_stdout << "\n";
 
-      for (const auto& syminfo : m_lst)
+      for (const auto& syminfo : *this)
         {
           syminfo.display_line (os, params);
 
@@ -403,7 +403,7 @@
   // Calculating necessary spacing for name column,
   // bytes column, elements column and class column
 
-  for (const auto& syminfo : m_lst)
+  for (const auto& syminfo : *this)
     {
       std::stringstream ss1, ss2;
       std::string str;
@@ -511,7 +511,7 @@
               int first = param.first_parameter_length;
               int total = param.parameter_length;
 
-              for (const auto& syminfo : m_lst)
+              for (const auto& syminfo : *this)
                 {
                   octave_value val = syminfo.value ();
                   std::string dims_str = val.get_dims_str ();
--- a/libinterp/corefcn/syminfo.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/syminfo.h	Mon Feb 26 23:30:33 2024 -0500
@@ -28,10 +28,9 @@
 
 #include "octave-config.h"
 
+#include <iosfwd>
+#include <list>
 #include <string>
-#include <iosfwd>
-
-#include "base-list.h"
 
 #include "ov.h"
 
@@ -50,9 +49,7 @@
   std::string line;
 };
 
-class
-OCTINTERP_API
-symbol_info
+class OCTINTERP_API symbol_info
 {
 public:
 
@@ -90,9 +87,7 @@
   bool m_is_persistent;
 };
 
-class
-OCTINTERP_API
-symbol_info_list : public base_list<symbol_info>
+class OCTINTERP_API symbol_info_list : public std::list<symbol_info>
 {
 public:
 
--- a/libinterp/corefcn/symrcm.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/symrcm.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -206,7 +206,7 @@
 
   OCTAVE_LOCAL_BUFFER (CMK_Node, Q, N+1);
   boolNDArray btmp (dim_vector (1, N), false);
-  bool *visit = btmp.fortran_vec ();
+  bool *visit = btmp.rwdata ();
 
   octave_idx_type qh = 0;
   octave_idx_type qt = 0;
@@ -512,7 +512,7 @@
   // that have degree==0 and build a CC of the graph.
 
   boolNDArray btmp (dim_vector (1, N), false);
-  bool *visit = btmp.fortran_vec ();
+  bool *visit = btmp.rwdata ();
 
   octave_quit ();
 
--- a/libinterp/corefcn/symrec.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/symrec.h	Mon Feb 26 23:30:33 2024 -0500
@@ -125,11 +125,18 @@
                         | ADDED_STATIC);
     }
 
+    void mark_variable ()
+    {
+      m_storage_class = static_cast<symrec_t> (m_storage_class | VARIABLE);
+    }
+
+    OCTAVE_DEPRECATED (10, "symbol_record_rep::mark_as_variable is obsolete, use mark_variable")
     void mark_as_variable ()
     {
       m_storage_class = static_cast<symrec_t> (m_storage_class | VARIABLE);
     }
 
+
     void unmark_local ()
     {
       m_storage_class = static_cast<symrec_t> (m_storage_class & ~LOCAL);
@@ -146,6 +153,12 @@
                         & ~ADDED_STATIC);
     }
 
+    void unmark_variable ()
+    {
+      m_storage_class = static_cast<symrec_t> (m_storage_class & ~VARIABLE);
+    }
+
+    OCTAVE_DEPRECATED (10, "symbol_record_rep::unmark_as_variable is obsolete, use unmark_variable")
     void unmark_as_variable ()
     {
       m_storage_class = static_cast<symrec_t> (m_storage_class & ~VARIABLE);
@@ -216,12 +229,16 @@
   void mark_local () { m_rep->mark_local (); }
   void mark_formal () { m_rep->mark_formal (); }
   void mark_added_static () { m_rep->mark_added_static (); }
-  void mark_as_variable () { m_rep->mark_as_variable (); }
+  void mark_variable () { m_rep->mark_variable (); }
+  OCTAVE_DEPRECATED (10, "symbol_record::mark_as_variable is obsolete, use mark_variable")
+  void mark_as_variable () { m_rep->mark_variable (); }
 
   void unmark_local () { m_rep->unmark_local (); }
   void unmark_formal () { m_rep->unmark_formal (); }
   void unmark_added_static () { m_rep->unmark_added_static (); }
-  void unmark_as_variable () { m_rep->unmark_as_variable (); }
+  void unmark_variable () { m_rep->unmark_variable (); }
+  OCTAVE_DEPRECATED (10, "symbol_record::unmark_as_variable is obsolete, use unmark_variable")
+  void unmark_as_variable () { m_rep->unmark_variable (); }
 
   unsigned int storage_class () const { return m_rep->storage_class (); }
 
--- a/libinterp/corefcn/symscope.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/symscope.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -281,7 +281,7 @@
   table_iterator p = m_symbols.find (nm);
 
   if (p != m_symbols.end ())
-    p->second.mark_as_variable ();
+    p->second.mark_variable ();
 }
 
 void
--- a/libinterp/corefcn/sysdep.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/sysdep.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -907,7 +907,7 @@
   if (result != ERROR_SUCCESS)
     return result;
 
-  unwind_action restore_keys ([=] () { reg_close_key_wrapper (h_subkey); });
+  unwind_action restore_keys ([h_subkey] () { reg_close_key_wrapper (h_subkey); });
 
   std::wstring wname = sys::u8_to_wstring (name);
   DWORD length = 0;
--- a/libinterp/corefcn/text-engine.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/text-engine.h	Mon Feb 26 23:30:33 2024 -0500
@@ -28,10 +28,10 @@
 
 #include "octave-config.h"
 
+#include <list>
 #include <memory>
 #include <string>
 
-#include "base-list.h"
 #include "caseless-str.h"
 #include "dMatrix.h"
 
@@ -51,9 +51,7 @@
 
 class text_processor;
 
-class
-OCTINTERP_API
-text_element
+class OCTINTERP_API text_element
 {
 public:
 
@@ -64,9 +62,7 @@
   virtual void accept (text_processor& p) = 0;
 };
 
-class
-OCTINTERP_API
-text_element_string : public text_element
+class OCTINTERP_API text_element_string : public text_element
 {
 public:
 
@@ -84,9 +80,7 @@
   std::string m_str;
 };
 
-class
-OCTINTERP_API
-text_element_symbol : public text_element
+class OCTINTERP_API text_element_symbol : public text_element
 {
 public:
 
@@ -109,17 +103,15 @@
   int m_symbol;
 };
 
-class
-OCTINTERP_API
-text_element_list
-  : public text_element, public base_list<text_element *>
+class OCTINTERP_API text_element_list
+  : public text_element, public std::list<text_element *>
 {
 public:
 
   OCTAVE_DEFAULT_CONSTRUCT_COPY_MOVE (text_element_list)
 
   text_element_list (text_element *e)
-    : text_element (), base_list<text_element*> ()
+    : text_element (), std::list<text_element*> ()
   {
     push_back (e);
   }
@@ -137,9 +129,7 @@
   void accept (text_processor& p);
 };
 
-class
-OCTINTERP_API
-text_element_subscript : public text_element
+class OCTINTERP_API text_element_subscript : public text_element
 {
 public:
 
@@ -164,9 +154,7 @@
   text_element *m_elem;
 };
 
-class
-OCTINTERP_API
-text_element_superscript : public text_element
+class OCTINTERP_API text_element_superscript : public text_element
 {
 public:
 
@@ -191,9 +179,7 @@
   text_element *m_elem;
 };
 
-class
-OCTINTERP_API
-text_element_combined : public text_element_list
+class OCTINTERP_API text_element_combined : public text_element_list
 {
 public:
 
@@ -209,9 +195,7 @@
   void accept (text_processor& p);
 };
 
-class
-OCTINTERP_API
-text_element_fontstyle : public text_element
+class OCTINTERP_API text_element_fontstyle : public text_element
 {
 public:
 
@@ -239,9 +223,7 @@
   fontstyle m_style;
 };
 
-class
-OCTINTERP_API
-text_element_fontname : public text_element
+class OCTINTERP_API text_element_fontname : public text_element
 {
 public:
 
@@ -261,9 +243,7 @@
   std::string m_name;
 };
 
-class
-OCTINTERP_API
-text_element_fontsize : public text_element
+class OCTINTERP_API text_element_fontsize : public text_element
 {
 public:
 
@@ -283,9 +263,7 @@
   double m_size;
 };
 
-class
-OCTINTERP_API
-text_element_color : public text_element
+class OCTINTERP_API text_element_color : public text_element
 {
 public:
 
@@ -328,9 +306,7 @@
   Matrix m_rgb;
 };
 
-class
-OCTINTERP_API
-text_processor
+class OCTINTERP_API text_processor
 {
 public:
 
@@ -389,9 +365,7 @@
 TEXT_ELEMENT_ACCEPT(text_element_fontsize)
 TEXT_ELEMENT_ACCEPT(text_element_color)
 
-class
-OCTINTERP_API
-text_parser
+class OCTINTERP_API text_parser
 {
 public:
 
@@ -406,9 +380,7 @@
                               const caseless_str& interpreter);
 };
 
-class
-OCTINTERP_API
-text_parser_none : public text_parser
+class OCTINTERP_API text_parser_none : public text_parser
 {
 public:
 
@@ -425,9 +397,7 @@
   }
 };
 
-class
-OCTINTERP_API
-text_parser_tex : public text_parser
+class OCTINTERP_API text_parser_tex : public text_parser
 {
 public:
 
--- a/libinterp/corefcn/text-renderer.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/text-renderer.h	Mon Feb 26 23:30:33 2024 -0500
@@ -41,9 +41,7 @@
 class base_text_renderer;
 class text_element;
 
-class
-OCTINTERP_API
-text_renderer
+class OCTINTERP_API text_renderer
 {
 public:
 
--- a/libinterp/corefcn/toplev.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/toplev.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -380,12 +380,6 @@
         { "ENABLE_DOCS", false },
 #endif
 
-#if defined (OCTAVE_ENABLE_FLOAT_TRUNCATE)
-        { "ENABLE_FLOAT_TRUNCATE", true },
-#else
-        { "ENABLE_FLOAT_TRUNCATE", false },
-#endif
-
 #if defined (OCTAVE_ENABLE_OPENMP)
         { "ENABLE_OPENMP", true },
 #else
--- a/libinterp/corefcn/tril.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/tril.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -57,7 +57,7 @@
       octave_idx_type j2 = std::min (std::max (zero, nr + k), nc);
       octave_idx_type n = j1 * nr + ((j2 - j1) * (nr-(j1-k) + nr-(j2-1-k))) / 2;
       Array<T> r (dim_vector (n, 1));
-      T *rvec = r.fortran_vec ();
+      T *rvec = r.rwdata ();
       for (octave_idx_type j = 0; j < nc; j++)
         {
           octave_idx_type ii = std::min (std::max (zero, j - k), nr);
@@ -70,7 +70,7 @@
   else
     {
       Array<T> r (a.dims ());
-      T *rvec = r.fortran_vec ();
+      T *rvec = r.rwdata ();
       for (octave_idx_type j = 0; j < nc; j++)
         {
           octave_idx_type ii = std::min (std::max (zero, j - k), nr);
@@ -100,7 +100,7 @@
       octave_idx_type n
         = ((j2 - j1) * ((j1+1-k) + (j2-k))) / 2 + (nc - j2) * nr;
       Array<T> r (dim_vector (n, 1));
-      T *rvec = r.fortran_vec ();
+      T *rvec = r.rwdata ();
       for (octave_idx_type j = 0; j < nc; j++)
         {
           octave_idx_type ii = std::min (std::max (zero, j + 1 - k), nr);
@@ -113,7 +113,7 @@
   else
     {
       Array<T> r (a.dims ());
-      T *rvec = r.fortran_vec ();
+      T *rvec = r.rwdata ();
       for (octave_idx_type j = 0; j < nc; j++)
         {
           octave_idx_type ii = std::min (std::max (zero, j + 1 - k), nr);
@@ -208,7 +208,7 @@
 
   octave_value arg = args(0);
 
-  dim_vector dims = arg.dims ();
+  const dim_vector& dims = arg.dims ();
   if (dims.ndims () != 2)
     error ("%s: need a 2-D matrix", name.c_str ());
   else if (k < -dims(0))
--- a/libinterp/corefcn/typecast.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/typecast.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -81,7 +81,7 @@
     error ("typecast: incorrect number of input values to make output value");
 
   ArrayType retval (get_vec_dims (old_dims, n));
-  T *dest = retval.fortran_vec ();
+  T *dest = retval.rwdata ();
   std::memcpy (dest, data, n * sizeof (T));
 
   return retval;
@@ -100,7 +100,7 @@
     error ("typecast: incorrect number of input values to make output value");
 
   ArrayType retval (get_vec_dims (old_dims, n));
-  VT *dest = reinterpret_cast<VT *> (retval.fortran_vec ());
+  VT *dest = reinterpret_cast<VT *> (retval.rwdata ());
   std::memcpy (dest, data, n * sizeof (VT));
 
   return retval;
@@ -323,7 +323,7 @@
   ArrayType retval (get_vec_dims (bitp.dims (), n));
 
   const bool *bits = bitp.data ();
-  char *packed = reinterpret_cast<char *> (retval.fortran_vec ());
+  char *packed = reinterpret_cast<char *> (retval.rwdata ());
 
   octave_idx_type m = n * sizeof (T);
 
@@ -471,7 +471,7 @@
   boolNDArray retval (get_vec_dims (array.dims (), n));
 
   const char *packed = reinterpret_cast<const char *> (array.data ());
-  bool *bits = retval.fortran_vec ();
+  bool *bits = retval.rwdata ();
 
   octave_idx_type m = n / std::numeric_limits<unsigned char>::digits;
 
--- a/libinterp/corefcn/utils.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/utils.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -803,6 +803,35 @@
   return retval;
 }
 
+void
+display_file_lines (std::ostream& os, const std::string& file_name, int start, int end, int target_line, const std::string& marker, const std::string& who)
+{
+  std::ifstream fs = octave::sys::ifstream (file_name.c_str (), std::ios::in);
+
+  if (! fs)
+    os << who << ": unable to open '" << file_name << "' for reading!\n";
+  else
+    {
+      int line_num = 1;
+      std::string text;
+
+      while (std::getline (fs, text) && line_num <= end)
+        {
+          if (line_num >= start)
+            {
+              os << line_num;
+
+              if (line_num == target_line)
+                os << marker;
+
+              os << "\t" << text << "\n";
+            }
+
+          line_num++;
+        }
+    }
+}
+
 // Replace backslash escapes in a string with the real values.
 
 std::string
--- a/libinterp/corefcn/utils.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/utils.h	Mon Feb 26 23:30:33 2024 -0500
@@ -51,9 +51,7 @@
 //! Extracting options separately for multiple (e.g. 1000+) function calls
 //! avoids expensive repetitive parsing of the very same options.
 
-class
-OCTINTERP_API
-make_valid_name_options
+class OCTINTERP_API make_valid_name_options
 {
 public:
 
@@ -137,6 +135,9 @@
 
 extern OCTINTERP_API std::string fcn_file_in_path (const std::string&);
 
+extern OCTINTERP_API void
+display_file_lines (std::ostream& os, const std::string& file_name, int start, int end, int target_line, const std::string& marker, const std::string& who);
+
 extern OCTINTERP_API std::string do_string_escapes (const std::string& s);
 
 extern OCTINTERP_API const char * undo_string_escape (char c);
--- a/libinterp/corefcn/xdiv.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/xdiv.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -713,7 +713,7 @@
   typedef typename MT::element_type T;
   const T *aa = a.data ();
   const S *dd = d.data ();
-  T *xx = x.fortran_vec ();
+  T *xx = x.rwdata ();
 
   for (octave_idx_type j = 0; j < l; j++)
     {
@@ -797,7 +797,7 @@
   typedef typename MT::element_type T;
   const T *aa = a.data ();
   const S *dd = d.data ();
-  T *xx = x.fortran_vec ();
+  T *xx = x.rwdata ();
 
   for (octave_idx_type j = 0; j < n; j++)
     {
@@ -878,7 +878,7 @@
   typedef typename MT::element_type T;
   const T *aa = a.data ();
   const S *dd = d.data ();
-  T *xx = x.fortran_vec ();
+  T *xx = x.rwdata ();
 
   for (octave_idx_type i = 0; i < lk; i++)
     xx[i] = (dd[i] != S () ? aa[i] / dd[i] : T ());
@@ -953,7 +953,7 @@
   typedef typename MT::element_type T;
   const T *aa = a.data ();
   const S *dd = d.data ();
-  T *xx = x.fortran_vec ();
+  T *xx = x.rwdata ();
 
   for (octave_idx_type i = 0; i < lk; i++)
     xx[i] = (dd[i] != S () ? aa[i] / dd[i] : T ());
--- a/libinterp/corefcn/xpow.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/corefcn/xpow.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -83,8 +83,9 @@
 static inline bool
 xisint (float x)
 {
-  static const float out_of_range_top
-    = static_cast<float> (std::numeric_limits<int>::max ()) + 1.;
+  static constexpr float out_of_range_top
+    = static_cast<float> (std::numeric_limits<int>::max ()) + 1.0;
+
   return (octave::math::x_nint (x) == x
           && x < out_of_range_top
           && x >= std::numeric_limits<int>::min ());
@@ -1259,8 +1260,8 @@
 {
   octave_value retval;
 
-  dim_vector a_dims = a.dims ();
-  dim_vector b_dims = b.dims ();
+  const dim_vector& a_dims = a.dims ();
+  const dim_vector& b_dims = b.dims ();
 
   if (a_dims != b_dims)
     {
@@ -1342,8 +1343,8 @@
 octave_value
 elem_xpow (const NDArray& a, const ComplexNDArray& b)
 {
-  dim_vector a_dims = a.dims ();
-  dim_vector b_dims = b.dims ();
+  const dim_vector& a_dims = a.dims ();
+  const dim_vector& b_dims = b.dims ();
 
   if (a_dims != b_dims)
     {
@@ -1437,8 +1438,8 @@
 octave_value
 elem_xpow (const ComplexNDArray& a, const NDArray& b)
 {
-  dim_vector a_dims = a.dims ();
-  dim_vector b_dims = b.dims ();
+  const dim_vector& a_dims = a.dims ();
+  const dim_vector& b_dims = b.dims ();
 
   if (a_dims != b_dims)
     {
@@ -1482,8 +1483,8 @@
 octave_value
 elem_xpow (const ComplexNDArray& a, const ComplexNDArray& b)
 {
-  dim_vector a_dims = a.dims ();
-  dim_vector b_dims = b.dims ();
+  const dim_vector& a_dims = a.dims ();
+  const dim_vector& b_dims = b.dims ();
 
   if (a_dims != b_dims)
     {
@@ -2579,8 +2580,8 @@
 {
   octave_value retval;
 
-  dim_vector a_dims = a.dims ();
-  dim_vector b_dims = b.dims ();
+  const dim_vector& a_dims = a.dims ();
+  const dim_vector& b_dims = b.dims ();
 
   if (a_dims != b_dims)
     {
@@ -2662,8 +2663,8 @@
 octave_value
 elem_xpow (const FloatNDArray& a, const FloatComplexNDArray& b)
 {
-  dim_vector a_dims = a.dims ();
-  dim_vector b_dims = b.dims ();
+  const dim_vector& a_dims = a.dims ();
+  const dim_vector& b_dims = b.dims ();
 
   if (a_dims != b_dims)
     {
@@ -2757,8 +2758,8 @@
 octave_value
 elem_xpow (const FloatComplexNDArray& a, const FloatNDArray& b)
 {
-  dim_vector a_dims = a.dims ();
-  dim_vector b_dims = b.dims ();
+  const dim_vector& a_dims = a.dims ();
+  const dim_vector& b_dims = b.dims ();
 
   if (a_dims != b_dims)
     {
@@ -2802,8 +2803,8 @@
 octave_value
 elem_xpow (const FloatComplexNDArray& a, const FloatComplexNDArray& b)
 {
-  dim_vector a_dims = a.dims ();
-  dim_vector b_dims = b.dims ();
+  const dim_vector& a_dims = a.dims ();
+  const dim_vector& b_dims = b.dims ();
 
   if (a_dims != b_dims)
     {
--- a/libinterp/dldfcn/__delaunayn__.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/dldfcn/__delaunayn__.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -155,7 +155,7 @@
   if (n > dim + 1)
     {
       p = p.transpose ();
-      double *pt_array = p.fortran_vec ();
+      double *pt_array = p.rwdata ();
       boolT ismalloc = false;
 
       std::string cmd = "qhull d " + options;
@@ -174,7 +174,7 @@
       if (! errfile)
         error ("__delaunayn__: unable to redirect Qhull errors to /dev/null");
 
-      unwind_action close_errfile ([=] () { std::fclose (errfile); });
+      unwind_action close_errfile ([errfile] () { std::fclose (errfile); });
 
       qhT context = { };
       qhT *qh = &context;
--- a/libinterp/dldfcn/__glpk__.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/dldfcn/__glpk__.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -356,7 +356,7 @@
 
   Matrix C = args(0).xmatrix_value ("__glpk__: invalid value of C");
 
-  double *c = C.fortran_vec ();
+  double *c = C.rwdata ();
   Array<int> rn;
   Array<int> cn;
   ColumnVector a;
@@ -417,7 +417,7 @@
   //             for each constraint in the constraint matrix.
   Matrix B = args(2).xmatrix_value ("__glpk__: invalid value of B");
 
-  double *b = B.fortran_vec ();
+  double *b = B.rwdata ();
 
   // 4th Input.  An array of length mrowsc containing the lower
   //             bound on each of the variables.
@@ -426,7 +426,7 @@
   if (LB.numel () < mrowsc)
     error ("__glpk__: invalid dimensions for LB");
 
-  double *lb = LB.fortran_vec ();
+  double *lb = LB.rwdata ();
 
   // LB argument, default: Free
   Array<int> freeLB (dim_vector (mrowsc, 1));
@@ -448,7 +448,7 @@
   if (UB.numel () < mrowsc)
     error ("__glpk__: invalid dimensions for UB");
 
-  double *ub = UB.fortran_vec ();
+  double *ub = UB.rwdata ();
 
   Array<int> freeUB (dim_vector (mrowsc, 1));
   for (int i = 0; i < mrowsc; i++)
@@ -466,7 +466,7 @@
   //             in the constraint matrix.
   charMatrix CTYPE = args(5).xchar_matrix_value ("__glpk__: invalid value of CTYPE");
 
-  char *ctype = CTYPE.fortran_vec ();
+  char *ctype = CTYPE.rwdata ();
 
   // 7th Input.  A column array containing the types of the variables.
   charMatrix VTYPE = args(6).xchar_matrix_value ("__glpk__: invalid value of VARTYPE");
@@ -611,13 +611,13 @@
   double time = 0.0;
   int status = -1;
 
-  int errnum = glpk (sense, mrowsc, mrowsA, c, nz, rn.fortran_vec (),
-                     cn.fortran_vec (), a.fortran_vec (), b, ctype,
-                     freeLB.fortran_vec (), lb, freeUB.fortran_vec (),
-                     ub, vartype.fortran_vec (), isMIP, lpsolver,
-                     save_pb, scale, par, xmin.fortran_vec (), fmin,
-                     status, lambda.fortran_vec (),
-                     redcosts.fortran_vec (), time);
+  int errnum = glpk (sense, mrowsc, mrowsA, c, nz, rn.rwdata (),
+                     cn.rwdata (), a.rwdata (), b, ctype,
+                     freeLB.rwdata (), lb, freeUB.rwdata (),
+                     ub, vartype.rwdata (), isMIP, lpsolver,
+                     save_pb, scale, par, xmin.rwdata (), fmin,
+                     status, lambda.rwdata (),
+                     redcosts.rwdata (), time);
 
   octave_scalar_map extra;
 
--- a/libinterp/dldfcn/__ode15__.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/dldfcn/__ode15__.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -494,8 +494,8 @@
     jac = (*m_jacdcell) (m_dfdy, m_dfdyp, cj);
 
   octave_f77_int_type num_jac = to_f77_int (jac.numel ());
-  std::copy (jac.fortran_vec (),
-             jac.fortran_vec () + num_jac,
+  std::copy (jac.rwdata (),
+             jac.rwdata () + num_jac,
              SUNDenseMatrix_Data (JJ));
 }
 
--- a/libinterp/dldfcn/__voronoi__.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/dldfcn/__voronoi__.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -164,7 +164,7 @@
 
   std::string cmd = "qhull v" + options;
 
-  int exitcode = qh_new_qhull (qh, dim, num_points, points.fortran_vec (),
+  int exitcode = qh_new_qhull (qh, dim, num_points, points.rwdata (),
                                ismalloc, &cmd[0], outfile, errfile);
 
   unwind_action free_memory ([qh] () { free_qhull_memory (qh); });
--- a/libinterp/dldfcn/audiodevinfo.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/dldfcn/audiodevinfo.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -1136,7 +1136,7 @@
   start = get_sample_number ();
   end = get_end_sample ();
 
-  unwind_action stop_audioplayer ([=] () { stop (); });
+  unwind_action stop_audioplayer ([this] () { stop (); });
 
   for (unsigned int i = start; i < end; i += buffer_size)
     {
@@ -1816,7 +1816,7 @@
 
   unsigned int frames = seconds * get_fs ();
 
-  unwind_action stop_audiorecorder ([=] () { stop (); });
+  unwind_action stop_audiorecorder ([this] () { stop (); });
 
   for (unsigned int i = 0; i < frames; i += buffer_size)
     {
--- a/libinterp/dldfcn/audioread.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/dldfcn/audioread.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -90,7 +90,7 @@
     error ("audioread: failed to open input file '%s': %s",
            filename.c_str (), sf_strerror (file));
 
-  unwind_action close_open_file ([=] () { sf_close (file); });
+  unwind_action close_open_file ([file] () { sf_close (file); });
 
   // FIXME: It would be nicer to use a C++ expandable data container and
   // read a file of unknown length into memory in chunks and determine the
@@ -128,7 +128,7 @@
 
   Matrix audio (items, info.channels);
 
-  double *paudio = audio.fortran_vec ();
+  double *paudio = audio.rwdata ();
 
   data += start * info.channels;
 
@@ -441,7 +441,7 @@
     error ("audiowrite: failed to open output file '%s': %s",
            filename.c_str (), sf_strerror (file));
 
-  unwind_action close_open_file ([=] () { sf_close (file); });
+  unwind_action close_open_file ([file] () { sf_close (file); });
 
   sf_command (file, SFC_SET_NORM_DOUBLE, nullptr, SF_TRUE);
   sf_command (file, SFC_SET_CLIPPING, nullptr, SF_TRUE) ;
@@ -644,7 +644,7 @@
     error ("audioinfo: failed to open input file '%s': %s",
            filename.c_str (), sf_strerror (file));
 
-  unwind_action close_open_file ([=] () { sf_close (file); });
+  unwind_action close_open_file ([file] () { sf_close (file); });
 
   octave_scalar_map result;
 
--- a/libinterp/dldfcn/convhulln.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/dldfcn/convhulln.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -178,7 +178,7 @@
 
   std::string cmd = "qhull" + options;
 
-  int exitcode = qh_new_qhull (qh, dim, num_points, points.fortran_vec (),
+  int exitcode = qh_new_qhull (qh, dim, num_points, points.rwdata (),
                                ismalloc, &cmd[0], outfile, errfile);
 
   unwind_action free_memory ([qh] () { free_qhull_memory (qh); });
--- a/libinterp/octave-value/cdef-class.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/cdef-class.h	Mon Feb 26 23:30:33 2024 -0500
@@ -48,14 +48,11 @@
 class interpreter;
 class tree_classdef;
 
-class
-OCTINTERP_API
-cdef_class : public cdef_meta_object
+class OCTINTERP_API cdef_class : public cdef_meta_object
 {
 private:
 
-  class
-  cdef_class_rep : public cdef_meta_object_rep
+  class cdef_class_rep : public cdef_meta_object_rep
   {
   public:
     cdef_class_rep ()
--- a/libinterp/octave-value/cdef-manager.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/cdef-manager.h	Mon Feb 26 23:30:33 2024 -0500
@@ -39,9 +39,7 @@
 
 class interpreter;
 
-class
-OCTINTERP_API
-cdef_manager
+class OCTINTERP_API cdef_manager
 {
 public:
 
--- a/libinterp/octave-value/cdef-method.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/cdef-method.h	Mon Feb 26 23:30:33 2024 -0500
@@ -39,16 +39,13 @@
 
 OCTAVE_BEGIN_NAMESPACE(octave)
 
-class
-OCTINTERP_API
-cdef_method : public cdef_meta_object
+class OCTINTERP_API cdef_method : public cdef_meta_object
 {
   friend class cdef_class;
 
 private:
 
-  class
-  cdef_method_rep : public cdef_meta_object_rep
+  class cdef_method_rep : public cdef_meta_object_rep
   {
   public:
 
--- a/libinterp/octave-value/cdef-object.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/cdef-object.h	Mon Feb 26 23:30:33 2024 -0500
@@ -45,9 +45,7 @@
 // The actual base class is cdef_class_base, which is declared after
 // cdef_object, such that it can contain cdef_object objects.
 
-class
-OCTINTERP_API
-cdef_object_rep
+class OCTINTERP_API cdef_object_rep
 {
 public:
 
@@ -198,9 +196,7 @@
   }
 };
 
-class
-OCTINTERP_API
-cdef_object
+class OCTINTERP_API cdef_object
 {
 public:
 
@@ -350,9 +346,7 @@
   cdef_object_rep *m_rep;
 };
 
-class
-OCTINTERP_API
-cdef_object_base : public cdef_object_rep
+class OCTINTERP_API cdef_object_base : public cdef_object_rep
 {
 public:
 
@@ -388,9 +382,7 @@
   cdef_object m_klass;
 };
 
-class
-OCTINTERP_API
-cdef_object_array : public cdef_object_base
+class OCTINTERP_API cdef_object_array : public cdef_object_base
 {
 public:
 
@@ -456,9 +448,7 @@
   { }
 };
 
-class
-OCTINTERP_API
-cdef_object_scalar : public cdef_object_base
+class OCTINTERP_API cdef_object_scalar : public cdef_object_base
 {
 public:
 
@@ -543,9 +533,7 @@
   { }
 };
 
-class
-OCTINTERP_API
-handle_cdef_object : public cdef_object_scalar
+class OCTINTERP_API handle_cdef_object : public cdef_object_scalar
 {
 public:
 
@@ -579,9 +567,7 @@
   { }
 };
 
-class
-OCTINTERP_API
-value_cdef_object : public cdef_object_scalar
+class OCTINTERP_API value_cdef_object : public cdef_object_scalar
 {
 public:
 
@@ -610,9 +596,7 @@
   { }
 };
 
-class
-OCTINTERP_API
-cdef_meta_object_rep : public handle_cdef_object
+class OCTINTERP_API cdef_meta_object_rep : public handle_cdef_object
 {
 public:
 
@@ -664,9 +648,7 @@
   { }
 };
 
-class
-OCTINTERP_API
-cdef_meta_object : public cdef_object
+class OCTINTERP_API cdef_meta_object : public cdef_object
 {
 public:
 
--- a/libinterp/octave-value/cdef-package.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/cdef-package.h	Mon Feb 26 23:30:33 2024 -0500
@@ -42,16 +42,13 @@
 
 class interpreter;
 
-class
-OCTINTERP_API
-cdef_package : public cdef_meta_object
+class OCTINTERP_API cdef_package : public cdef_meta_object
 {
   friend class cdef_class;
 
 private:
 
-  class
-  cdef_package_rep : public cdef_meta_object_rep
+  class cdef_package_rep : public cdef_meta_object_rep
   {
   public:
 
--- a/libinterp/octave-value/cdef-property.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/cdef-property.h	Mon Feb 26 23:30:33 2024 -0500
@@ -40,16 +40,13 @@
 
 OCTAVE_BEGIN_NAMESPACE(octave)
 
-class
-OCTINTERP_API
-cdef_property : public cdef_meta_object
+class OCTINTERP_API cdef_property : public cdef_meta_object
 {
   friend class cdef_class;
 
 private:
 
-  class
-  cdef_property_rep : public cdef_meta_object_rep
+  class cdef_property_rep : public cdef_meta_object_rep
   {
   public:
 
--- a/libinterp/octave-value/ov-base-diag.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-base-diag.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -553,7 +553,7 @@
 bool
 octave_base_diag<DMT, MT>::print_as_scalar () const
 {
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
 
   return (dv.all_ones () || dv.any_zero ());
 }
--- a/libinterp/octave-value/ov-base-diag.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-base-diag.h	Mon Feb 26 23:30:33 2024 -0500
@@ -43,9 +43,7 @@
 // Real matrix values.
 
 template <typename DMT, typename MT>
-class
-OCTINTERP_API
-octave_base_diag : public octave_base_value
+class OCTINTERP_API octave_base_diag : public octave_base_value
 {
 
 public:
--- a/libinterp/octave-value/ov-base-int.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-base-int.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -160,7 +160,7 @@
 octave_base_int_matrix<T>::convert_to_str_internal (bool, bool, char type) const
 {
   octave_value retval;
-  dim_vector dv = this->dims ();
+  const dim_vector& dv = this->dims ();
   octave_idx_type nel = dv.numel ();
 
   charNDArray chm (dv);
@@ -177,8 +177,8 @@
 
       val_type ival = tmp.value ();
 
-      static const bool is_signed = std::numeric_limits<val_type>::is_signed;
-      static const bool can_be_larger_than_uchar_max
+      static constexpr bool is_signed = std::numeric_limits<val_type>::is_signed;
+      static constexpr bool can_be_larger_than_uchar_max
         = octave_base_int_helper_traits<val_type>::can_be_larger_than_uchar_max;
 
       if (octave_base_int_helper<val_type, is_signed,
@@ -288,7 +288,7 @@
 bool
 octave_base_int_matrix<T>::save_ascii (std::ostream& os)
 {
-  dim_vector dv = this->dims ();
+  const dim_vector& dv = this->dims ();
 
   os << "# ndims: " << dv.ndims () << "\n";
 
@@ -334,7 +334,7 @@
 bool
 octave_base_int_matrix<T>::save_binary (std::ostream& os, bool)
 {
-  dim_vector dv = this->dims ();
+  const dim_vector& dv = this->dims ();
   if (dv.ndims () < 1)
     return false;
 
@@ -394,7 +394,7 @@
 
   T m (dv);
 
-  if (! is.read (reinterpret_cast<char *> (m.fortran_vec ()), m.byte_size ()))
+  if (! is.read (reinterpret_cast<char *> (m.rwdata ()), m.byte_size ()))
     return false;
 
   if (swap)
@@ -434,7 +434,7 @@
 #if defined (HAVE_HDF5)
 
   hid_t save_type_hid = save_type;
-  dim_vector dv = this->dims ();
+  const dim_vector& dv = this->dims ();
   int empty = save_hdf5_empty (loc_id, name, dv);
   if (empty)
     return (empty > 0);
@@ -537,7 +537,7 @@
 
   T m (dv);
   if (H5Dread (data_hid, save_type_hid, octave_H5S_ALL, octave_H5S_ALL,
-               octave_H5P_DEFAULT, m.fortran_vec ()) >= 0)
+               octave_H5P_DEFAULT, m.rwdata ()) >= 0)
     {
       retval = true;
       this->m_matrix = m;
@@ -578,8 +578,8 @@
 
   val_type ival = tmp.value ();
 
-  static const bool is_signed = std::numeric_limits<val_type>::is_signed;
-  static const bool can_be_larger_than_uchar_max
+  static constexpr bool is_signed = std::numeric_limits<val_type>::is_signed;
+  static constexpr bool can_be_larger_than_uchar_max
     = octave_base_int_helper_traits<val_type>::can_be_larger_than_uchar_max;
 
   if (octave_base_int_helper<val_type, is_signed,
--- a/libinterp/octave-value/ov-base-int.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-base-int.h	Mon Feb 26 23:30:33 2024 -0500
@@ -45,9 +45,7 @@
 // base int matrix values.
 
 template <typename T>
-class
-OCTINTERP_API
-octave_base_int_matrix : public octave_base_matrix<T>
+class OCTINTERP_API octave_base_int_matrix : public octave_base_matrix<T>
 {
 public:
 
@@ -117,9 +115,7 @@
 // base int scalar values.
 
 template <typename T>
-class
-OCTINTERP_API
-octave_base_int_scalar : public octave_base_scalar<T>
+class OCTINTERP_API octave_base_int_scalar : public octave_base_scalar<T>
 {
 public:
 
--- a/libinterp/octave-value/ov-base-mat.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-base-mat.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -323,8 +323,6 @@
 
   int nd = m_matrix.ndims ();
 
-  MT mrhs (dim_vector (1, 1), rhs);
-
   // If we catch an indexing error in index_vector, we flag an error in
   // index k.  Ensure it is the right value before each idx_vector call.
   // Same variable as used in the for loop in the default case.
@@ -347,7 +345,10 @@
             if (i.is_scalar () && i(0) < m_matrix.numel ())
               m_matrix(i(0)) = rhs;
             else
-              m_matrix.assign (i, mrhs);
+              {
+                MT mrhs (dim_vector (1, 1), rhs);
+                m_matrix.assign (i, mrhs);
+              }
           }
           break;
 
@@ -363,7 +364,10 @@
                 && i(0) < m_matrix.rows () && j(0) < m_matrix.columns ())
               m_matrix(i(0), j(0)) = rhs;
             else
-              m_matrix.assign (i, j, mrhs);
+              {
+                MT mrhs (dim_vector (1, 1), rhs);
+                m_matrix.assign (i, j, mrhs);
+              }
           }
           break;
 
@@ -395,7 +399,10 @@
                 m_matrix(j) = rhs;
               }
             else
-              m_matrix.assign (idx_vec, mrhs);
+              {
+                MT mrhs (dim_vector (1, 1), rhs);
+                m_matrix.assign (idx_vec, mrhs);
+              }
           }
           break;
         }
@@ -446,7 +453,7 @@
 octave_base_matrix<MT>::is_true () const
 {
   bool retval = false;
-  dim_vector dv = m_matrix.dims ();
+  const dim_vector& dv = m_matrix.dims ();
   int nel = dv.numel ();
 
   if (nel > 0)
@@ -471,7 +478,7 @@
 bool
 octave_base_matrix<MT>::print_as_scalar () const
 {
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
 
   return (dv.all_ones () || dv.any_zero ());
 }
--- a/libinterp/octave-value/ov-base-mat.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-base-mat.h	Mon Feb 26 23:30:33 2024 -0500
@@ -45,9 +45,7 @@
 // Real matrix values.
 
 template <typename MT>
-class
-OCTINTERP_API
-octave_base_matrix : public octave_base_value
+class OCTINTERP_API octave_base_matrix : public octave_base_value
 {
 public:
 
--- a/libinterp/octave-value/ov-base-scalar.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-base-scalar.h	Mon Feb 26 23:30:33 2024 -0500
@@ -44,9 +44,7 @@
 // Real scalar values.
 
 template <typename ST>
-class
-OCTINTERP_API
-octave_base_scalar : public octave_base_value
+class OCTINTERP_API octave_base_scalar : public octave_base_value
 {
 public:
 
--- a/libinterp/octave-value/ov-base-sparse.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-base-sparse.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -245,7 +245,7 @@
 octave_base_sparse<T>::is_true () const
 {
   bool retval = false;
-  dim_vector dv = matrix.dims ();
+  const dim_vector& dv = matrix.dims ();
   octave_idx_type nel = dv.numel ();
   octave_idx_type nz = nnz ();
 
@@ -274,7 +274,7 @@
 bool
 octave_base_sparse<T>::print_as_scalar () const
 {
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
 
   return (dv.all_ones () || dv.any_zero ());
 }
@@ -400,7 +400,7 @@
 bool
 octave_base_sparse<T>::save_ascii (std::ostream& os)
 {
-  dim_vector dv = this->dims ();
+  const dim_vector& dv = this->dims ();
 
   // Ensure that additional memory is deallocated
   matrix.maybe_compress ();
--- a/libinterp/octave-value/ov-base-sparse.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-base-sparse.h	Mon Feb 26 23:30:33 2024 -0500
@@ -46,9 +46,7 @@
 class octave_sparse_bool_matrix;
 
 template <typename T>
-class
-OCTINTERP_API
-octave_base_sparse : public octave_base_value
+class OCTINTERP_API octave_base_sparse : public octave_base_value
 {
 public:
 
--- a/libinterp/octave-value/ov-base.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-base.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -100,9 +100,6 @@
 DEFINE_OV_TYPEID_FUNCTIONS_AND_DATA (octave_base_value,
                                      "<unknown type>", "unknown");
 
-// DEPRECATED in Octave 8.
-bool Vsparse_auto_mutate = false;
-
 #if defined (HAVE_PRAGMA_GCC_DIAGNOSTIC)
    // Disable this warning for the use of the "count" member variable in
    // the default constructor.  Push the current state so we can restore
@@ -532,8 +529,8 @@
         err_wrong_type_arg (ee, "octave_base_value::" #F "_value ()", type_name ()); \
       }                                                                 \
                                                                         \
-    static const double out_of_range_top                                \
-      = static_cast<double> (std::numeric_limits<T>::max ()) + 1.;      \
+    static constexpr double out_of_range_top                            \
+      = static_cast<double> (std::numeric_limits<T>::max ()) + 1.0;     \
     if (require_int && octave::math::x_nint (d) != d)                   \
       error_with_cfn ("conversion of %g to " #T " value failed", d);    \
     else if (d < std::numeric_limits<T>::min ())                        \
--- a/libinterp/octave-value/ov-base.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-base.h	Mon Feb 26 23:30:33 2024 -0500
@@ -239,9 +239,7 @@
 // they need (if they are derived from octave_base_value instead of
 // octave_value).
 
-class
-OCTINTERP_API
-octave_base_value
+class OCTINTERP_API octave_base_value
 {
 public:
 
@@ -954,9 +952,7 @@
   DECLARE_OV_BASE_TYPEID_FUNCTIONS_AND_DATA
 };
 
-class
-OCTINTERP_API
-octave_base_dld_value : public octave_base_value
+class OCTINTERP_API octave_base_dld_value : public octave_base_value
 {
 public:
 
@@ -974,9 +970,6 @@
   octave::auto_shlib m_containing_dynamic_library;
 };
 
-OCTAVE_DEPRECATED (8, "Vsparse_auto_mutate is obsolete and is now always false")
-extern OCTINTERP_API bool Vsparse_auto_mutate;
-
 // Utility function to convert C++ arguments used in subsref/subsasgn into an
 // octave_value_list object that can be used to call a function/method in the
 // interpreter.
--- a/libinterp/octave-value/ov-bool-mat.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-bool-mat.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -237,7 +237,7 @@
 bool
 octave_bool_matrix::save_ascii (std::ostream& os)
 {
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
   if (dv.ndims () > 2)
     {
       NDArray tmp = array_value ();
@@ -348,7 +348,7 @@
 octave_bool_matrix::save_binary (std::ostream& os, bool /* save_as_floats */)
 {
 
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
   if (dv.ndims () < 1)
     return false;
 
@@ -414,7 +414,7 @@
   if (! is.read (htmp, nel))
     return false;
   boolNDArray m(dv);
-  bool *mtmp = m.fortran_vec ();
+  bool *mtmp = m.rwdata ();
   for (octave_idx_type i = 0; i < nel; i++)
     mtmp[i] = (htmp[i] ? 1 : 0);
   m_matrix = m;
@@ -430,7 +430,7 @@
 
 #if defined (HAVE_HDF5)
 
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
   int empty = save_hdf5_empty (loc_id, name, dv);
   if (empty)
     return (empty > 0);
--- a/libinterp/octave-value/ov-bool-mat.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-bool-mat.h	Mon Feb 26 23:30:33 2024 -0500
@@ -48,8 +48,7 @@
 
 // Character matrix values.
 
-class
-octave_bool_matrix : public octave_base_matrix<boolNDArray>
+class octave_bool_matrix : public octave_base_matrix<boolNDArray>
 {
 public:
 
--- a/libinterp/octave-value/ov-bool-sparse.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-bool-sparse.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -180,7 +180,7 @@
 bool
 octave_sparse_bool_matrix::save_binary (std::ostream& os, bool)
 {
-  dim_vector dv = this->dims ();
+  const dim_vector& dv = this->dims ();
   if (dv.ndims () < 1)
     return false;
 
@@ -321,7 +321,7 @@
 
 #if defined (HAVE_HDF5)
 
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
   int empty = save_hdf5_empty (loc_id, name, dv);
   if (empty)
     return (empty > 0);
--- a/libinterp/octave-value/ov-bool-sparse.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-bool-sparse.h	Mon Feb 26 23:30:33 2024 -0500
@@ -47,9 +47,7 @@
 
 class octave_value_list;
 
-class
-OCTINTERP_API
-octave_sparse_bool_matrix : public octave_base_sparse<SparseBoolMatrix>
+class OCTINTERP_API octave_sparse_bool_matrix : public octave_base_sparse<SparseBoolMatrix>
 {
 public:
 
--- a/libinterp/octave-value/ov-bool.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-bool.h	Mon Feb 26 23:30:33 2024 -0500
@@ -48,9 +48,7 @@
 
 // Real scalar values.
 
-class
-OCTINTERP_API
-octave_bool : public octave_base_scalar<bool>
+class OCTINTERP_API octave_bool : public octave_base_scalar<bool>
 {
 public:
 
--- a/libinterp/octave-value/ov-builtin.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-builtin.h	Mon Feb 26 23:30:33 2024 -0500
@@ -47,9 +47,7 @@
 
 // Builtin functions.
 
-class
-OCTINTERP_API
-octave_builtin : public octave_function
+class OCTINTERP_API octave_builtin : public octave_function
 {
 public:
 
--- a/libinterp/octave-value/ov-cell.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-cell.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -111,7 +111,7 @@
   octave_value val = m_matrix(i, j);
 
   std::string tname = val.type_name ();
-  dim_vector dv = val.dims ();
+  const dim_vector& dv = val.dims ();
   std::string dimstr = dv.str ();
   return "[" + dimstr + " " + tname + "]";
 }
@@ -752,7 +752,7 @@
   else
     {
       indent (os);
-      dim_vector dv = m_matrix.dims ();
+      const dim_vector& dv = m_matrix.dims ();
       os << '{' << dv.str () << " Cell Array}";
       newline (os);
     }
@@ -788,7 +788,7 @@
 bool
 octave_cell::save_ascii (std::ostream& os)
 {
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
   if (dv.ndims () > 2)
     {
       os << "# ndims: " << dv.ndims () << "\n";
@@ -941,7 +941,7 @@
 bool
 octave_cell::save_binary (std::ostream& os, bool save_as_floats)
 {
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
   if (dv.ndims () < 1)
     return false;
 
@@ -1052,7 +1052,7 @@
 {
 #if defined (HAVE_HDF5)
 
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
   int empty = save_hdf5_empty (loc_id, name, dv);
   if (empty)
     return (empty > 0);
--- a/libinterp/octave-value/ov-cell.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-cell.h	Mon Feb 26 23:30:33 2024 -0500
@@ -46,8 +46,7 @@
 
 // Cells.
 
-class
-octave_cell : public octave_base_matrix<Cell>
+class octave_cell : public octave_base_matrix<Cell>
 {
 public:
 
--- a/libinterp/octave-value/ov-ch-mat.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-ch-mat.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -324,7 +324,7 @@
         std::size_t output_length = in_m.numel ();                             \
         charNDArray ch_array = charNDArray (in_m.dims ());                     \
         const uint8_t *in = reinterpret_cast<const uint8_t *> (in_m.data ());  \
-        uint8_t *buf = reinterpret_cast<uint8_t *> (ch_array.fortran_vec ());  \
+        uint8_t *buf = reinterpret_cast<uint8_t *> (ch_array.rwdata ());  \
         U8_FCN (in, m_matrix.numel (), nullptr, buf, &output_length);          \
         if (output_length != static_cast<std::size_t> (m_matrix.numel ()))     \
           {                                                                    \
--- a/libinterp/octave-value/ov-ch-mat.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-ch-mat.h	Mon Feb 26 23:30:33 2024 -0500
@@ -48,8 +48,7 @@
 
 // Character matrix values.
 
-class
-octave_char_matrix : public octave_base_matrix<charNDArray>
+class octave_char_matrix : public octave_base_matrix<charNDArray>
 {
 protected:
 
--- a/libinterp/octave-value/ov-class.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-class.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -134,7 +134,7 @@
               // distribute the elements of the parent object to
               // the elements of MAP.
 
-              dim_vector parent_dims = parent.dims ();
+              const dim_vector& parent_dims = parent.dims ();
 
               m_map.resize (parent_dims);
 
@@ -331,7 +331,7 @@
     }
   else
     {
-      dim_vector dv = dims ();
+      const dim_vector& dv = dims ();
 
       int nd = dv.ndims ();
 
@@ -2090,8 +2090,7 @@
 // The following class can be removed once the
 // octave_value::function_value method is removed.
 
-class
-octave_inline_fcn : public octave_function
+class octave_inline_fcn : public octave_function
 {
 public:
 
@@ -2129,8 +2128,7 @@
 //   return class_name () == "inline";
 // }
 
-class
-octave_inline : public octave_class
+class octave_inline : public octave_class
 {
 public:
 
--- a/libinterp/octave-value/ov-class.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-class.h	Mon Feb 26 23:30:33 2024 -0500
@@ -50,8 +50,7 @@
 
 // Data structures.
 
-class
-octave_class : public octave_base_value
+class octave_class : public octave_base_value
 {
 public:
 
@@ -139,7 +138,7 @@
   // of elements is numel () * nfields ().
   octave_idx_type numel () const
   {
-    dim_vector dv = dims ();
+    const dim_vector& dv = dims ();
     return dv.numel ();
   }
 
--- a/libinterp/octave-value/ov-classdef.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-classdef.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -396,7 +396,7 @@
           else
             {
               octave_value val = prop.get_value (m_object, false);
-              dim_vector dims = val.dims ();
+              const dim_vector& dims = val.dims ();
 
               os << std::setw (max_len+2) << nm << ": ";
               if (val.is_string ())
@@ -656,7 +656,7 @@
         {
           octave::tree_parameter_list *ret_list = uf->return_list ();
 
-          if (ret_list && ret_list->length () == 1)
+          if (ret_list && ret_list->size () == 1)
             return (ret_list->front ()->name () == nm);
         }
     }
--- a/libinterp/octave-value/ov-classdef.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-classdef.h	Mon Feb 26 23:30:33 2024 -0500
@@ -43,8 +43,7 @@
 
 OCTAVE_END_NAMESPACE(octave)
 
-class
-octave_classdef : public octave_base_value
+class octave_classdef : public octave_base_value
 {
 public:
 
--- a/libinterp/octave-value/ov-colon.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-colon.h	Mon Feb 26 23:30:33 2024 -0500
@@ -44,8 +44,7 @@
 
 // A type to represent ':' as used for indexing.
 
-class
-octave_magic_colon : public octave_base_value
+class octave_magic_colon : public octave_base_value
 {
 public:
 
--- a/libinterp/octave-value/ov-complex.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-complex.h	Mon Feb 26 23:30:33 2024 -0500
@@ -33,7 +33,6 @@
 #include <iosfwd>
 #include <string>
 
-#include "lo-ieee.h"
 #include "mx-base.h"
 #include "str-vec.h"
 
@@ -48,9 +47,7 @@
 
 // Complex scalar values.
 
-class
-OCTINTERP_API
-octave_complex : public octave_base_scalar<Complex>
+class OCTINTERP_API octave_complex : public octave_base_scalar<Complex>
 {
 public:
 
@@ -87,8 +84,8 @@
   octave_value any (int = 0) const
   {
     return (scalar != Complex (0, 0)
-            && ! (lo_ieee_isnan (scalar.real ())
-                  || lo_ieee_isnan (scalar.imag ())));
+            && ! (octave::math::isnan (scalar.real ())
+                  || octave::math::isnan (scalar.imag ())));
   }
 
   builtin_type_t builtin_type () const { return btyp_complex; }
--- a/libinterp/octave-value/ov-cs-list.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-cs-list.h	Mon Feb 26 23:30:33 2024 -0500
@@ -43,8 +43,7 @@
 
 // Lists.
 
-class
-octave_cs_list : public octave_base_value
+class octave_cs_list : public octave_base_value
 {
 public:
 
--- a/libinterp/octave-value/ov-cx-diag.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-cx-diag.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -231,7 +231,7 @@
     }
 
   ComplexDiagMatrix m (r, c);
-  Complex *im = m.fortran_vec ();
+  Complex *im = m.rwdata ();
   octave_idx_type len = m.length ();
   read_doubles (is, reinterpret_cast<double *> (im),
                 static_cast<save_type> (tmp), 2 * len, swap, fmt);
--- a/libinterp/octave-value/ov-cx-diag.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-cx-diag.h	Mon Feb 26 23:30:33 2024 -0500
@@ -35,8 +35,7 @@
 
 // Real diagonal matrix values.
 
-class
-octave_complex_diag_matrix
+class octave_complex_diag_matrix
   : public octave_base_diag<ComplexDiagMatrix, ComplexMatrix>
 {
 public:
--- a/libinterp/octave-value/ov-cx-mat.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-cx-mat.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -320,7 +320,7 @@
 bool
 octave_complex_matrix::save_ascii (std::ostream& os)
 {
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
   if (dv.ndims () > 2)
     {
       ComplexNDArray tmp = complex_array_value ();
@@ -424,7 +424,7 @@
 bool
 octave_complex_matrix::save_binary (std::ostream& os, bool save_as_floats)
 {
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
   if (dv.ndims () < 1)
     return false;
 
@@ -505,7 +505,7 @@
         return false;
 
       ComplexNDArray m(dv);
-      Complex *im = m.fortran_vec ();
+      Complex *im = m.rwdata ();
       read_doubles (is, reinterpret_cast<double *> (im),
                     static_cast<save_type> (tmp), 2 * dv.numel (), swap, fmt);
 
@@ -525,7 +525,7 @@
       if (! is.read (reinterpret_cast<char *> (&tmp), 1))
         return false;
       ComplexMatrix m (nr, nc);
-      Complex *im = m.fortran_vec ();
+      Complex *im = m.rwdata ();
       octave_idx_type len = static_cast<octave_idx_type> (nr) * nc;
       read_doubles (is, reinterpret_cast<double *> (im),
                     static_cast<save_type> (tmp), 2*len, swap, fmt);
@@ -544,7 +544,7 @@
 {
 #if defined (HAVE_HDF5)
 
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
   int empty = save_hdf5_empty (loc_id, name, dv);
   if (empty)
     return (empty > 0);
@@ -703,7 +703,7 @@
     }
 
   ComplexNDArray m (dv);
-  Complex *reim = m.fortran_vec ();
+  Complex *reim = m.rwdata ();
   if (H5Dread (data_hid, complex_type, octave_H5S_ALL, octave_H5S_ALL,
                octave_H5P_DEFAULT, reim)
       >= 0)
--- a/libinterp/octave-value/ov-cx-mat.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-cx-mat.h	Mon Feb 26 23:30:33 2024 -0500
@@ -48,9 +48,7 @@
 
 // Complex matrix values.
 
-class
-OCTINTERP_API
-octave_complex_matrix : public octave_base_matrix<ComplexNDArray>
+class OCTINTERP_API octave_complex_matrix : public octave_base_matrix<ComplexNDArray>
 {
 public:
 
--- a/libinterp/octave-value/ov-cx-sparse.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-cx-sparse.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -182,7 +182,7 @@
 octave_sparse_complex_matrix::save_binary (std::ostream& os,
     bool save_as_floats)
 {
-  dim_vector dv = this->dims ();
+  const dim_vector& dv = this->dims ();
   if (dv.ndims () < 1)
     return false;
 
@@ -327,7 +327,7 @@
 
 #if defined (HAVE_HDF5)
 
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
   int empty = save_hdf5_empty (loc_id, name, dv);
   if (empty)
     return (empty > 0);
--- a/libinterp/octave-value/ov-cx-sparse.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-cx-sparse.h	Mon Feb 26 23:30:33 2024 -0500
@@ -47,9 +47,7 @@
 
 class octave_value_list;
 
-class
-OCTINTERP_API
-octave_sparse_complex_matrix : public octave_base_sparse<SparseComplexMatrix>
+class OCTINTERP_API octave_sparse_complex_matrix : public octave_base_sparse<SparseComplexMatrix>
 {
 public:
 
--- a/libinterp/octave-value/ov-dld-fcn.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-dld-fcn.h	Mon Feb 26 23:30:33 2024 -0500
@@ -41,9 +41,7 @@
 
 // Dynamically-linked functions.
 
-class
-OCTINTERP_API
-octave_dld_function : public octave_builtin
+class OCTINTERP_API octave_dld_function : public octave_builtin
 {
 public:
 
--- a/libinterp/octave-value/ov-fcn-handle.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-fcn-handle.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -2693,7 +2693,7 @@
 
   tree_statement_list *b = f->body ();
 
-  panic_if (b->length () != 1);
+  panic_if (b->size () != 1);
 
   tree_statement *s = b->front ();
 
--- a/libinterp/octave-value/ov-fcn-handle.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-fcn-handle.h	Mon Feb 26 23:30:33 2024 -0500
@@ -182,9 +182,7 @@
 
 OCTAVE_END_NAMESPACE(octave)
 
-class
-OCTINTERP_API
-octave_fcn_handle : public octave_base_value
+class OCTINTERP_API octave_fcn_handle : public octave_base_value
 {
 public:
 
--- a/libinterp/octave-value/ov-fcn.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-fcn.h	Mon Feb 26 23:30:33 2024 -0500
@@ -48,9 +48,7 @@
 
 // Functions.
 
-class
-OCTINTERP_API
-octave_function : public octave_base_value
+class OCTINTERP_API octave_function : public octave_base_value
 {
 public:
 
--- a/libinterp/octave-value/ov-float.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-float.h	Mon Feb 26 23:30:33 2024 -0500
@@ -33,7 +33,6 @@
 #include <iosfwd>
 #include <string>
 
-#include "lo-ieee.h"
 #include "lo-mappers.h"
 #include "lo-utils.h"
 #include "mx-base.h"
@@ -50,9 +49,7 @@
 
 // Real scalar values.
 
-class
-OCTINTERP_API
-octave_float_scalar : public octave_base_scalar<float>
+class OCTINTERP_API octave_float_scalar : public octave_base_scalar<float>
 {
 public:
 
@@ -83,7 +80,7 @@
   { return octave::idx_vector (scalar); }
 
   octave_value any (int = 0) const
-  { return (scalar != 0 && ! lo_ieee_isnan (scalar)); }
+  { return (scalar != 0 && ! octave::math::isnan (scalar)); }
 
   builtin_type_t builtin_type () const { return btyp_float; }
 
--- a/libinterp/octave-value/ov-flt-complex.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-flt-complex.h	Mon Feb 26 23:30:33 2024 -0500
@@ -33,7 +33,6 @@
 #include <iosfwd>
 #include <string>
 
-#include "lo-ieee.h"
 #include "mx-base.h"
 #include "str-vec.h"
 
@@ -48,9 +47,7 @@
 
 // Complex scalar values.
 
-class
-OCTINTERP_API
-octave_float_complex : public octave_base_scalar<FloatComplex>
+class OCTINTERP_API octave_float_complex : public octave_base_scalar<FloatComplex>
 {
 public:
 
@@ -83,8 +80,8 @@
   octave_value any (int = 0) const
   {
     return (scalar != FloatComplex (0, 0)
-            && ! (lo_ieee_isnan (scalar.real ())
-                  || lo_ieee_isnan (scalar.imag ())));
+            && ! (octave::math::isnan (scalar.real ())
+                  || octave::math::isnan (scalar.imag ())));
   }
 
   builtin_type_t builtin_type () const { return btyp_float_complex; }
--- a/libinterp/octave-value/ov-flt-cx-diag.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-flt-cx-diag.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -200,7 +200,7 @@
     }
 
   FloatComplexDiagMatrix m (r, c);
-  FloatComplex *re = m.fortran_vec ();
+  FloatComplex *re = m.rwdata ();
   octave_idx_type len = m.length ();
   read_floats (is, reinterpret_cast<float *> (re),
                static_cast<save_type> (tmp), 2 * len, swap, fmt);
--- a/libinterp/octave-value/ov-flt-cx-diag.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-flt-cx-diag.h	Mon Feb 26 23:30:33 2024 -0500
@@ -35,9 +35,7 @@
 
 // Real diagonal matrix values.
 
-class
-OCTINTERP_API
-octave_float_complex_diag_matrix
+class OCTINTERP_API octave_float_complex_diag_matrix
   : public octave_base_diag<FloatComplexDiagMatrix, FloatComplexMatrix>
 {
 public:
--- a/libinterp/octave-value/ov-flt-cx-mat.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-flt-cx-mat.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -294,7 +294,7 @@
 bool
 octave_float_complex_matrix::save_ascii (std::ostream& os)
 {
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
 
   if (dv.ndims () > 2)
     {
@@ -399,7 +399,7 @@
 bool
 octave_float_complex_matrix::save_binary (std::ostream& os, bool)
 {
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
   if (dv.ndims () < 1)
     return false;
 
@@ -470,7 +470,7 @@
         return false;
 
       FloatComplexNDArray m(dv);
-      FloatComplex *im = m.fortran_vec ();
+      FloatComplex *im = m.rwdata ();
       read_floats (is, reinterpret_cast<float *> (im),
                    static_cast<save_type> (tmp), 2 * dv.numel (), swap, fmt);
 
@@ -490,7 +490,7 @@
       if (! is.read (reinterpret_cast<char *> (&tmp), 1))
         return false;
       FloatComplexMatrix m (nr, nc);
-      FloatComplex *im = m.fortran_vec ();
+      FloatComplex *im = m.rwdata ();
       octave_idx_type len = static_cast<octave_idx_type> (nr) * nc;
       read_floats (is, reinterpret_cast<float *> (im),
                    static_cast<save_type> (tmp), 2*len, swap, fmt);
@@ -511,7 +511,7 @@
 
 #if defined (HAVE_HDF5)
 
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
   int empty = save_hdf5_empty (loc_id, name, dv);
   if (empty)
     return (empty > 0);
@@ -656,7 +656,7 @@
     }
 
   FloatComplexNDArray m (dv);
-  FloatComplex *reim = m.fortran_vec ();
+  FloatComplex *reim = m.rwdata ();
   if (H5Dread (data_hid, complex_type, octave_H5S_ALL, octave_H5S_ALL,
                octave_H5P_DEFAULT, reim)
       >= 0)
--- a/libinterp/octave-value/ov-flt-cx-mat.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-flt-cx-mat.h	Mon Feb 26 23:30:33 2024 -0500
@@ -48,9 +48,7 @@
 
 // Complex matrix values.
 
-class
-OCTINTERP_API
-octave_float_complex_matrix : public octave_base_matrix<FloatComplexNDArray>
+class OCTINTERP_API octave_float_complex_matrix : public octave_base_matrix<FloatComplexNDArray>
 {
 public:
 
--- a/libinterp/octave-value/ov-flt-re-diag.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-flt-re-diag.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -218,7 +218,7 @@
     }
 
   FloatDiagMatrix m (r, c);
-  float *re = m.fortran_vec ();
+  float *re = m.rwdata ();
   octave_idx_type len = m.length ();
   read_floats (is, re, static_cast<save_type> (tmp), len, swap, fmt);
 
--- a/libinterp/octave-value/ov-flt-re-diag.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-flt-re-diag.h	Mon Feb 26 23:30:33 2024 -0500
@@ -35,9 +35,7 @@
 
 // Real diagonal matrix values.
 
-class
-OCTINTERP_API
-octave_float_diag_matrix
+class OCTINTERP_API octave_float_diag_matrix
   : public octave_base_diag<FloatDiagMatrix, FloatMatrix>
 {
 public:
--- a/libinterp/octave-value/ov-flt-re-mat.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-flt-re-mat.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -328,7 +328,7 @@
 octave_float_matrix::convert_to_str_internal (bool, bool, char type) const
 {
   octave_value retval;
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
   octave_idx_type nel = dv.numel ();
 
   charNDArray chm (dv);
@@ -370,7 +370,7 @@
 bool
 octave_float_matrix::save_ascii (std::ostream& os)
 {
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
 
   if (dv.ndims () > 2)
     {
@@ -475,7 +475,7 @@
 bool
 octave_float_matrix::save_binary (std::ostream& os, bool)
 {
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
   if (dv.ndims () < 1)
     return false;
 
@@ -545,7 +545,7 @@
         return false;
 
       FloatNDArray m(dv);
-      float *re = m.fortran_vec ();
+      float *re = m.rwdata ();
       read_floats (is, re, static_cast<save_type> (tmp), dv.numel (),
                    swap, fmt);
 
@@ -565,7 +565,7 @@
       if (! is.read (reinterpret_cast<char *> (&tmp), 1))
         return false;
       FloatMatrix m (nr, nc);
-      float *re = m.fortran_vec ();
+      float *re = m.rwdata ();
       octave_idx_type len = static_cast<octave_idx_type> (nr) * nc;
       read_floats (is, re, static_cast<save_type> (tmp), len, swap, fmt);
 
@@ -584,7 +584,7 @@
 
 #if defined (HAVE_HDF5)
 
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
   int empty = save_hdf5_empty (loc_id, name, dv);
   if (empty)
     return (empty > 0);
@@ -698,7 +698,7 @@
     }
 
   FloatNDArray m (dv);
-  float *re = m.fortran_vec ();
+  float *re = m.rwdata ();
   if (H5Dread (data_hid, H5T_NATIVE_FLOAT, octave_H5S_ALL, octave_H5S_ALL,
                octave_H5P_DEFAULT, re) >= 0)
     {
--- a/libinterp/octave-value/ov-flt-re-mat.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-flt-re-mat.h	Mon Feb 26 23:30:33 2024 -0500
@@ -48,9 +48,7 @@
 
 // Real matrix values.
 
-class
-OCTINTERP_API
-octave_float_matrix : public octave_base_matrix<FloatNDArray>
+class OCTINTERP_API octave_float_matrix : public octave_base_matrix<FloatNDArray>
 {
 public:
 
--- a/libinterp/octave-value/ov-int-traits.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-int-traits.h	Mon Feb 26 23:30:33 2024 -0500
@@ -39,8 +39,7 @@
 #include "ov-uint64.h"
 
 template <typename T>
-class
-octave_value_int_traits
+class octave_value_int_traits
 {
 public:
   typedef T scalar_type;
--- a/libinterp/octave-value/ov-intx.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-intx.h	Mon Feb 26 23:30:33 2024 -0500
@@ -49,9 +49,7 @@
 #include "ov-re-mat.h"
 #include "ov-scalar.h"
 
-class
-OCTINTERP_API
-OCTAVE_VALUE_INT_MATRIX_T
+class OCTINTERP_API OCTAVE_VALUE_INT_MATRIX_T
   : public octave_base_int_matrix<intNDArray<OCTAVE_INT_T>>
 {
 public:
@@ -146,12 +144,12 @@
   matrix_value (bool = false) const
   {
     Matrix retval;
-    dim_vector dv = dims ();
+    const dim_vector& dv = dims ();
     if (dv.ndims () > 2)
       error ("invalid conversion of %s to Matrix", type_name ().c_str ());
 
     retval = Matrix (dv(0), dv(1));
-    double *vec = retval.fortran_vec ();
+    double *vec = retval.rwdata ();
     octave_idx_type nel = m_matrix.numel ();
     for (octave_idx_type i = 0; i < nel; i++)
       vec[i] = m_matrix(i).double_value ();
@@ -163,12 +161,12 @@
   float_matrix_value (bool = false) const
   {
     FloatMatrix retval;
-    dim_vector dv = dims ();
+    const dim_vector& dv = dims ();
     if (dv.ndims () > 2)
       error ("invalid conversion of %s to FloatMatrix", type_name ().c_str ());
 
     retval = FloatMatrix (dv(0), dv(1));
-    float *vec = retval.fortran_vec ();
+    float *vec = retval.rwdata ();
     octave_idx_type nel = m_matrix.numel ();
     for (octave_idx_type i = 0; i < nel; i++)
       vec[i] = m_matrix(i).float_value ();
@@ -180,12 +178,12 @@
   complex_matrix_value (bool = false) const
   {
     ComplexMatrix retval;
-    dim_vector dv = dims ();
+    const dim_vector& dv = dims ();
     if (dv.ndims () > 2)
       error ("invalid conversion of %s to Matrix", type_name ().c_str ());
 
     retval = ComplexMatrix (dv(0), dv(1));
-    Complex *vec = retval.fortran_vec ();
+    Complex *vec = retval.rwdata ();
     octave_idx_type nel = m_matrix.numel ();
     for (octave_idx_type i = 0; i < nel; i++)
       vec[i] = Complex (m_matrix(i).double_value ());
@@ -197,12 +195,12 @@
   float_complex_matrix_value (bool = false) const
   {
     FloatComplexMatrix retval;
-    dim_vector dv = dims ();
+    const dim_vector& dv = dims ();
     if (dv.ndims () > 2)
       error ("invalid conversion of %s to FloatMatrix", type_name ().c_str ());
 
     retval = FloatComplexMatrix (dv(0), dv(1));
-    FloatComplex *vec = retval.fortran_vec ();
+    FloatComplex *vec = retval.rwdata ();
     octave_idx_type nel = m_matrix.numel ();
     for (octave_idx_type i = 0; i < nel; i++)
       vec[i] = FloatComplex (m_matrix(i).float_value ());
@@ -214,7 +212,7 @@
   array_value (bool = false) const
   {
     NDArray retval (m_matrix.dims ());
-    double *vec = retval.fortran_vec ();
+    double *vec = retval.rwdata ();
     octave_idx_type nel = m_matrix.numel ();
     for (octave_idx_type i = 0; i < nel; i++)
       vec[i] = m_matrix(i).double_value ();
@@ -225,7 +223,7 @@
   float_array_value (bool = false) const
   {
     FloatNDArray retval (m_matrix.dims ());
-    float *vec = retval.fortran_vec ();
+    float *vec = retval.rwdata ();
     octave_idx_type nel = m_matrix.numel ();
     for (octave_idx_type i = 0; i < nel; i++)
       vec[i] = m_matrix(i).float_value ();
@@ -236,7 +234,7 @@
   complex_array_value (bool = false) const
   {
     ComplexNDArray retval (m_matrix.dims ());
-    Complex *vec = retval.fortran_vec ();
+    Complex *vec = retval.rwdata ();
     octave_idx_type nel = m_matrix.numel ();
     for (octave_idx_type i = 0; i < nel; i++)
       vec[i] = Complex (m_matrix(i).double_value ());
@@ -247,7 +245,7 @@
   float_complex_array_value (bool = false) const
   {
     FloatComplexNDArray retval (m_matrix.dims ());
-    FloatComplex *vec = retval.fortran_vec ();
+    FloatComplex *vec = retval.rwdata ();
     octave_idx_type nel = m_matrix.numel ();
     for (octave_idx_type i = 0; i < nel; i++)
       vec[i] = FloatComplex (m_matrix(i).float_value ());
@@ -264,7 +262,7 @@
     if (warn && m_matrix.any_element_not_one_or_zero ())
       warn_logical_conversion ();
 
-    bool *vec = retval.fortran_vec ();
+    bool *vec = retval.rwdata ();
     for (octave_idx_type i = 0; i < nel; i++)
       vec[i] = m_matrix(i).bool_value ();
 
@@ -278,7 +276,7 @@
 
     octave_idx_type nel = numel ();
 
-    char *vec = retval.fortran_vec ();
+    char *vec = retval.rwdata ();
     for (octave_idx_type i = 0; i < nel; i++)
       vec[i] = m_matrix(i).char_value ();
 
@@ -386,9 +384,7 @@
   DECLARE_OV_TYPEID_FUNCTIONS_AND_DATA
 };
 
-class
-OCTINTERP_API
-OCTAVE_VALUE_INT_SCALAR_T
+class OCTINTERP_API OCTAVE_VALUE_INT_SCALAR_T
   : public octave_base_int_scalar<OCTAVE_INT_T>
 {
 public:
--- a/libinterp/octave-value/ov-java.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-java.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -104,7 +104,7 @@
   java_local_ref (JNIEnv *env, T obj)
     : m_jobj (obj), m_detached (false), m_env (env) { }
 
-  ~java_local_ref (void) { release (); }
+  ~java_local_ref () { release (); }
 
   T& operator = (T obj)
   {
@@ -119,7 +119,7 @@
   operator bool () const { return (m_jobj != 0); }
   operator T () { return m_jobj; }
 
-  void detach (void) { m_detached = true; }
+  void detach () { m_detached = true; }
 
 protected:
 
@@ -129,11 +129,11 @@
 
 private:
 
-  java_local_ref (void)
+  java_local_ref ()
     : m_jobj (0), m_detached (false), m_env (0)
   { }
 
-  void release (void)
+  void release ()
   {
     if (m_env && m_jobj && ! m_detached)
       m_env->DeleteLocalRef (m_jobj);
@@ -1444,7 +1444,7 @@
           const JAVA_TYPE ## Array jarr = reinterpret_cast<JAVA_TYPE ## Array> (jobj); \
           const jsize len = jni_env->GetArrayLength (jarr); \
           OCTAVE_ID ## NDArray d (dim_vector (len, 1)); \
-          JAVA_TYPE *buffer = reinterpret_cast<JAVA_TYPE *> (d.fortran_vec ()); \
+          JAVA_TYPE *buffer = reinterpret_cast<JAVA_TYPE *> (d.rwdata ()); \
           jni_env->Get ## JAVA_TYPE_CAP ## ArrayRegion (jarr, 0, len, buffer); \
           retval = d; \
           break; \
@@ -1497,7 +1497,7 @@
                                        (jni_env->CallObjectMethod (jobj,
                                            mID)));
                   jni_env->GetDoubleArrayRegion (dv, 0, m.numel (),
-                                                 m.fortran_vec ());
+                                                 m.rwdata ());
                   retval = m;
                   break;
                 }
@@ -1513,7 +1513,7 @@
                                              mID)));
                       jni_env->GetByteArrayRegion (dv, 0, m.numel (),
                                                    reinterpret_cast<jbyte *>
-                                                   (m.fortran_vec ()));
+                                                   (m.rwdata ()));
                       retval = m;
                       break;
                     }
@@ -1527,7 +1527,7 @@
                                              mID)));
                       jni_env->GetByteArrayRegion (dv, 0, m.numel (),
                                                    reinterpret_cast<jbyte *>
-                                                   (m.fortran_vec ()));
+                                                   (m.rwdata ()));
                       retval = m;
                       break;
                     }
@@ -1544,7 +1544,7 @@
                                             mID)));
                       jni_env->GetIntArrayRegion (dv, 0, m.numel (),
                                                   reinterpret_cast<jint *>
-                                                  (m.fortran_vec ()));
+                                                  (m.rwdata ()));
                       retval = m;
                       break;
                     }
@@ -1558,7 +1558,7 @@
                                             mID)));
                       jni_env->GetIntArrayRegion (dv, 0, m.numel (),
                                                   reinterpret_cast<jint *>
-                                                  (m.fortran_vec ()));
+                                                  (m.rwdata ()));
                       retval = m;
                       break;
                     }
@@ -1613,7 +1613,7 @@
                 {
                   Matrix m (1, len);
                   jni_env->GetDoubleArrayRegion (jarr, 0, len,
-                                                 m.fortran_vec ());
+                                                 m.rwdata ());
                   retval = m;
                 }
               else
@@ -1648,7 +1648,7 @@
                           m.resize (cols, rows);
                         }
                       jni_env->GetDoubleArrayRegion
-                      (row, 0, cols, m.fortran_vec () + r * cols);
+                      (row, 0, cols, m.rwdata () + r * cols);
                     }
                   retval = m.transpose ();
                 }
@@ -1826,7 +1826,7 @@
     {
       Matrix m = val.matrix_value ();
       jdoubleArray dv = jni_env->NewDoubleArray (m.numel ());
-      jni_env->SetDoubleArrayRegion (dv, 0, m.numel (), m.fortran_vec ());
+      jni_env->SetDoubleArrayRegion (dv, 0, m.numel (), m.rwdata ());
       jobj = dv;
       jcls = jni_env->GetObjectClass (jobj);
     }
@@ -1836,7 +1836,7 @@
     {
       jclass_ref mcls (jni_env, find_octave_class (jni_env,
                        "org/octave/Matrix"));
-      dim_vector dims = val.dims ();
+      const dim_vector& dims = val.dims ();
       jintArray_ref iv (jni_env, jni_env->NewIntArray (dims.ndims ()));
       jint *iv_data = jni_env->GetIntArrayElements (jintArray (iv), nullptr);
 
@@ -1850,7 +1850,7 @@
           NDArray m = val.array_value ();
           jdoubleArray_ref dv (jni_env, jni_env->NewDoubleArray (m.numel ()));
           jni_env->SetDoubleArrayRegion (jdoubleArray (dv), 0, m.numel (),
-                                         m.fortran_vec ());
+                                         m.rwdata ());
           jmethodID mID = jni_env->GetMethodID (mcls, "<init>", "([D[I)V");
           jobj = jni_env->NewObject (jclass (mcls), mID, jdoubleArray (dv),
                                      jintArray (iv));
@@ -1862,7 +1862,7 @@
           jbyteArray_ref bv (jni_env, jni_env->NewByteArray (m.numel ()));
           jni_env->SetByteArrayRegion (jbyteArray (bv), 0, m.numel (),
                                        reinterpret_cast<jbyte *>
-                                       (m.fortran_vec ()));
+                                       (m.rwdata ()));
           jmethodID mID = jni_env->GetMethodID (mcls, "<init>", "([B[I)V");
           jobj = jni_env->NewObject
                  (jclass (mcls), mID, jbyteArray (bv), jintArray (iv));
@@ -1874,7 +1874,7 @@
           jbyteArray_ref bv (jni_env, jni_env->NewByteArray (m.numel ()));
           jni_env->SetByteArrayRegion (jbyteArray (bv), 0, m.numel (),
                                        reinterpret_cast<jbyte *>
-                                       (m.fortran_vec ()));
+                                       (m.rwdata ()));
           jmethodID mID = jni_env->GetMethodID (mcls, "<init>", "([B[I)V");
           jobj = jni_env->NewObject
                  (jclass (mcls), mID, jbyteArray (bv), jintArray (iv));
@@ -1886,7 +1886,7 @@
           jintArray_ref v (jni_env, jni_env->NewIntArray (m.numel ()));
           jni_env->SetIntArrayRegion (jintArray (v), 0, m.numel (),
                                       reinterpret_cast<jint *>
-                                      (m.fortran_vec ()));
+                                      (m.rwdata ()));
           jmethodID mID = jni_env->GetMethodID (mcls, "<init>", "([I[I)V");
           jobj = jni_env->NewObject
                  (jclass (mcls), mID, jintArray (v), jintArray (iv));
--- a/libinterp/octave-value/ov-lazy-idx.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-lazy-idx.h	Mon Feb 26 23:30:33 2024 -0500
@@ -33,9 +33,7 @@
 // Lazy indices that stay in idx_vector form until the conversion to NDArray is
 // actually needed.
 
-class
-OCTINTERP_API
-octave_lazy_index : public octave_base_value
+class OCTINTERP_API octave_lazy_index : public octave_base_value
 {
 public:
 
--- a/libinterp/octave-value/ov-legacy-range.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-legacy-range.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -50,8 +50,7 @@
 #include "ls-hdf5.h"
 #include "ls-utils.h"
 
-class
-Range
+class Range
 {
 public:
 
--- a/libinterp/octave-value/ov-legacy-range.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-legacy-range.h	Mon Feb 26 23:30:33 2024 -0500
@@ -57,8 +57,7 @@
 // of this type used by the interpreter.  The action of maybe_mutate is
 // performed by octave_legacy_range::try_narrowing_conversion.
 
-class
-octave_legacy_range : public octave_base_value
+class octave_legacy_range : public octave_base_value
 {
 public:
 
--- a/libinterp/octave-value/ov-magic-int.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-magic-int.h	Mon Feb 26 23:30:33 2024 -0500
@@ -47,8 +47,7 @@
 // type conversion.
 
 template <typename T>
-class
-octave_base_magic_int : public octave_base_scalar<T>
+class octave_base_magic_int : public octave_base_scalar<T>
 {
 public:
 
@@ -275,9 +274,7 @@
   octave_value map (octave_base_value::unary_mapper_t umap) const;
 };
 
-class
-OCTINTERP_API
-octave_magic_uint : public octave_base_magic_int<octave_uint64>
+class OCTINTERP_API octave_magic_uint : public octave_base_magic_int<octave_uint64>
 {
 public:
 
@@ -301,9 +298,7 @@
   DECLARE_OV_TYPEID_FUNCTIONS_AND_DATA
 };
 
-class
-OCTINTERP_API
-octave_magic_int : public octave_base_magic_int<octave_int64>
+class OCTINTERP_API octave_magic_int : public octave_base_magic_int<octave_int64>
 {
 public:
 
--- a/libinterp/octave-value/ov-mex-fcn.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-mex-fcn.h	Mon Feb 26 23:30:33 2024 -0500
@@ -47,8 +47,7 @@
 
 // Dynamically-linked functions.
 
-class
-octave_mex_function : public octave_function
+class octave_mex_function : public octave_function
 {
 public:
 
--- a/libinterp/octave-value/ov-null-mat.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-null-mat.h	Mon Feb 26 23:30:33 2024 -0500
@@ -41,9 +41,7 @@
 
 // The special [] value.
 
-class
-OCTINTERP_API
-octave_null_matrix : public octave_matrix
+class OCTINTERP_API octave_null_matrix : public octave_matrix
 {
   octave_null_matrix () : octave_matrix () { }
 
@@ -63,9 +61,7 @@
 
 // The special "" value
 
-class
-OCTINTERP_API
-octave_null_str : public octave_char_matrix_str
+class OCTINTERP_API octave_null_str : public octave_char_matrix_str
 {
   octave_null_str () : octave_char_matrix_str () { }
 
@@ -87,9 +83,7 @@
 
 // The special '' value
 
-class
-OCTINTERP_API
-octave_null_sq_str : public octave_char_matrix_sq_str
+class OCTINTERP_API octave_null_sq_str : public octave_char_matrix_sq_str
 {
   octave_null_sq_str () : octave_char_matrix_sq_str () { }
 
--- a/libinterp/octave-value/ov-oncleanup.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-oncleanup.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -54,7 +54,7 @@
         {
           octave::tree_parameter_list *pl = uptr->parameter_list ();
 
-          if (pl != nullptr && pl->length () > 0)
+          if (pl != nullptr && pl->size () > 0)
             warning ("onCleanup: cleanup action takes parameters");
         }
     }
--- a/libinterp/octave-value/ov-perm.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-perm.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -397,7 +397,7 @@
 
   MArray<octave_idx_type> m (dim_vector (sz, 1));
 
-  if (! is.read (reinterpret_cast<char *> (m.fortran_vec ()), m.byte_size ()))
+  if (! is.read (reinterpret_cast<char *> (m.rwdata ()), m.byte_size ()))
     return false;
 
   if (swap)
@@ -442,7 +442,7 @@
 bool
 octave_perm_matrix::print_as_scalar () const
 {
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
 
   return (dv.all_ones () || dv.any_zero ());
 }
--- a/libinterp/octave-value/ov-perm.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-perm.h	Mon Feb 26 23:30:33 2024 -0500
@@ -35,9 +35,7 @@
 #include "ov-typeinfo.h"
 #include "ovl.h"
 
-class
-OCTINTERP_API
-octave_perm_matrix : public octave_base_value
+class OCTINTERP_API octave_perm_matrix : public octave_base_value
 {
 public:
   octave_perm_matrix () : m_matrix (), m_dense_cache () { }
--- a/libinterp/octave-value/ov-range-traits.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-range-traits.h	Mon Feb 26 23:30:33 2024 -0500
@@ -44,8 +44,7 @@
 #include "ov-uint8.h"
 
 template <typename T>
-class
-octave_value_range_traits
+class octave_value_range_traits
 {
 public:
   typedef T scalar_type;
@@ -53,8 +52,7 @@
 };
 
 template <>
-class
-octave_value_range_traits<bool>
+class octave_value_range_traits<bool>
 {
 public:
   typedef octave_bool scalar_type;
@@ -62,8 +60,7 @@
 };
 
 template <>
-class
-octave_value_range_traits<float>
+class octave_value_range_traits<float>
 {
 public:
   typedef octave_float_scalar scalar_type;
@@ -71,8 +68,7 @@
 };
 
 template <>
-class
-octave_value_range_traits<double>
+class octave_value_range_traits<double>
 {
 public:
   typedef octave_scalar scalar_type;
@@ -80,8 +76,7 @@
 };
 
 template <>
-class
-octave_value_range_traits<octave_int8>
+class octave_value_range_traits<octave_int8>
 {
 public:
   typedef octave_int8_scalar scalar_type;
@@ -89,8 +84,7 @@
 };
 
 template <>
-class
-octave_value_range_traits<octave_int16>
+class octave_value_range_traits<octave_int16>
 {
 public:
   typedef octave_int16_scalar scalar_type;
@@ -98,8 +92,7 @@
 };
 
 template <>
-class
-octave_value_range_traits<octave_int32>
+class octave_value_range_traits<octave_int32>
 {
 public:
   typedef octave_int32_scalar scalar_type;
@@ -107,8 +100,7 @@
 };
 
 template <>
-class
-octave_value_range_traits<octave_int64>
+class octave_value_range_traits<octave_int64>
 {
 public:
   typedef octave_int64_scalar scalar_type;
@@ -116,8 +108,7 @@
 };
 
 template <>
-class
-octave_value_range_traits<octave_uint8>
+class octave_value_range_traits<octave_uint8>
 {
 public:
   typedef octave_uint8_scalar scalar_type;
@@ -125,8 +116,7 @@
 };
 
 template <>
-class
-octave_value_range_traits<octave_uint16>
+class octave_value_range_traits<octave_uint16>
 {
 public:
   typedef octave_uint16_scalar scalar_type;
@@ -134,8 +124,7 @@
 };
 
 template <>
-class
-octave_value_range_traits<octave_uint32>
+class octave_value_range_traits<octave_uint32>
 {
 public:
   typedef octave_uint32_scalar scalar_type;
@@ -143,8 +132,7 @@
 };
 
 template <>
-class
-octave_value_range_traits<octave_uint64>
+class octave_value_range_traits<octave_uint64>
 {
 public:
   typedef octave_uint64_scalar scalar_type;
--- a/libinterp/octave-value/ov-range.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-range.h	Mon Feb 26 23:30:33 2024 -0500
@@ -93,8 +93,7 @@
 // enforce that restriction.
 
 template <typename T>
-class
-ov_range : public octave_base_value
+class ov_range : public octave_base_value
 {
 public:
 
--- a/libinterp/octave-value/ov-re-diag.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-re-diag.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -296,7 +296,7 @@
     }
 
   DiagMatrix m (r, c);
-  double *re = m.fortran_vec ();
+  double *re = m.rwdata ();
   octave_idx_type len = m.length ();
   read_doubles (is, re, static_cast<save_type> (tmp), len, swap, fmt);
 
--- a/libinterp/octave-value/ov-re-diag.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-re-diag.h	Mon Feb 26 23:30:33 2024 -0500
@@ -35,9 +35,7 @@
 
 // Real diagonal matrix values.
 
-class
-OCTINTERP_API
-octave_diag_matrix
+class OCTINTERP_API octave_diag_matrix
   : public octave_base_diag<DiagMatrix, Matrix>
 {
 public:
--- a/libinterp/octave-value/ov-re-mat.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-re-mat.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -431,7 +431,7 @@
 octave_matrix::convert_to_str_internal (bool, bool, char type) const
 {
   octave_value retval;
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
   octave_idx_type nel = dv.numel ();
 
   charNDArray chm (dv);
@@ -473,7 +473,7 @@
 bool
 octave_matrix::save_ascii (std::ostream& os)
 {
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
 
   if (dv.ndims () > 2)
     {
@@ -579,7 +579,7 @@
 octave_matrix::save_binary (std::ostream& os, bool save_as_floats)
 {
 
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
   if (dv.ndims () < 1)
     return false;
 
@@ -659,7 +659,7 @@
         return false;
 
       NDArray m(dv);
-      double *re = m.fortran_vec ();
+      double *re = m.rwdata ();
       read_doubles (is, re, static_cast<save_type> (tmp), dv.numel (),
                     swap, fmt);
 
@@ -679,7 +679,7 @@
       if (! is.read (reinterpret_cast<char *> (&tmp), 1))
         return false;
       Matrix m (nr, nc);
-      double *re = m.fortran_vec ();
+      double *re = m.rwdata ();
       octave_idx_type len = static_cast<octave_idx_type> (nr) * nc;
       read_doubles (is, re, static_cast<save_type> (tmp), len, swap, fmt);
 
@@ -699,7 +699,7 @@
 
 #if defined (HAVE_HDF5)
 
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
   int empty = save_hdf5_empty (loc_id, name, dv);
   if (empty)
     return (empty > 0);
@@ -825,7 +825,7 @@
     }
 
   NDArray m (dv);
-  double *re = m.fortran_vec ();
+  double *re = m.rwdata ();
   if (H5Dread (data_hid, H5T_NATIVE_DOUBLE, octave_H5S_ALL, octave_H5S_ALL,
                octave_H5P_DEFAULT, re) >= 0)
     {
--- a/libinterp/octave-value/ov-re-mat.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-re-mat.h	Mon Feb 26 23:30:33 2024 -0500
@@ -48,9 +48,7 @@
 
 // Real matrix values.
 
-class
-OCTINTERP_API
-octave_matrix : public octave_base_matrix<NDArray>
+class OCTINTERP_API octave_matrix : public octave_base_matrix<NDArray>
 {
 public:
 
--- a/libinterp/octave-value/ov-re-sparse.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-re-sparse.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -162,7 +162,7 @@
 octave_sparse_matrix::convert_to_str_internal (bool, bool, char type) const
 {
   octave_value retval;
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
   octave_idx_type nel = dv.numel ();
 
   if (nel == 0)
@@ -222,7 +222,7 @@
 bool
 octave_sparse_matrix::save_binary (std::ostream& os, bool save_as_floats)
 {
-  dim_vector dv = this->dims ();
+  const dim_vector& dv = this->dims ();
   if (dv.ndims () < 1)
     return false;
 
@@ -364,7 +364,7 @@
 
 #if defined (HAVE_HDF5)
 
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
   int empty = save_hdf5_empty (loc_id, name, dv);
   if (empty)
     return (empty > 0);
--- a/libinterp/octave-value/ov-re-sparse.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-re-sparse.h	Mon Feb 26 23:30:33 2024 -0500
@@ -48,9 +48,7 @@
 
 class octave_value_list;
 
-class
-OCTINTERP_API
-octave_sparse_matrix : public octave_base_sparse<SparseMatrix>
+class OCTINTERP_API octave_sparse_matrix : public octave_base_sparse<SparseMatrix>
 {
 public:
 
--- a/libinterp/octave-value/ov-scalar.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-scalar.h	Mon Feb 26 23:30:33 2024 -0500
@@ -33,7 +33,6 @@
 #include <iosfwd>
 #include <string>
 
-#include "lo-ieee.h"
 #include "lo-mappers.h"
 #include "lo-utils.h"
 #include "mx-base.h"
@@ -49,9 +48,7 @@
 
 // Real scalar values.
 
-class
-OCTINTERP_API
-octave_scalar : public octave_base_scalar<double>
+class OCTINTERP_API octave_scalar : public octave_base_scalar<double>
 {
 public:
 
@@ -82,7 +79,7 @@
   { return octave::idx_vector (scalar); }
 
   octave_value any (int = 0) const
-  { return (scalar != 0 && ! lo_ieee_isnan (scalar)); }
+  { return (scalar != 0 && ! octave::math::isnan (scalar)); }
 
   builtin_type_t builtin_type () const { return btyp_double; }
 
--- a/libinterp/octave-value/ov-str-mat.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-str-mat.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -312,7 +312,7 @@
     }
 
   std::string tname = type_name ();
-  dim_vector dv = m_matrix.dims ();
+  const dim_vector& dv = m_matrix.dims ();
   std::string dimstr = dv.str ();
   return "[" + dimstr + " " + tname + "]";
 }
@@ -320,7 +320,7 @@
 bool
 octave_char_matrix_str::save_ascii (std::ostream& os)
 {
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
   if (dv.ndims () > 2)
     {
       charNDArray tmp = char_array_value ();
@@ -391,7 +391,7 @@
         m_matrix = tmp;
       else
         {
-          char *ftmp = tmp.fortran_vec ();
+          char *ftmp = tmp.rwdata ();
 
           octave::skip_preceeding_newline (is);
 
@@ -423,7 +423,7 @@
           // buffer so that we can properly handle
           // embedded NUL characters.
           charMatrix tmp (1, len);
-          char *ptmp = tmp.fortran_vec ();
+          char *ptmp = tmp.rwdata ();
 
           if (len > 0 && ! is.read (ptmp, len))
             error ("load: failed to load string constant");
@@ -451,7 +451,7 @@
           // Use this instead of a C-style character buffer so
           // that we can properly handle embedded NUL characters.
           charMatrix tmp (1, len);
-          char *ptmp = tmp.fortran_vec ();
+          char *ptmp = tmp.rwdata ();
 
           if (len > 0 && ! is.read (ptmp, len))
             error ("load: failed to load string constant");
@@ -472,7 +472,7 @@
 octave_char_matrix_str::save_binary (std::ostream& os,
                                      bool /* save_as_floats */)
 {
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
   if (dv.ndims () < 1)
     return false;
 
@@ -529,7 +529,7 @@
         }
 
       charNDArray m(dv);
-      char *tmp = m.fortran_vec ();
+      char *tmp = m.rwdata ();
       is.read (tmp, dv.numel ());
 
       if (! is)
@@ -549,7 +549,7 @@
           if (swap)
             swap_bytes<4> (&len);
           charMatrix btmp (1, len);
-          char *pbtmp = btmp.fortran_vec ();
+          char *pbtmp = btmp.rwdata ();
           if (! is.read (pbtmp, len))
             return false;
           if (len > max_len)
@@ -572,7 +572,7 @@
 
 #if defined (HAVE_HDF5)
 
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
   int empty = save_hdf5_empty (loc_id, name, dv);
   if (empty)
     return (empty > 0);
@@ -680,7 +680,7 @@
         }
 
       charNDArray m (dv);
-      char *str = m.fortran_vec ();
+      char *str = m.rwdata ();
       if (H5Dread (data_hid, H5T_NATIVE_CHAR, octave_H5S_ALL, octave_H5S_ALL,
                    octave_H5P_DEFAULT, str) >= 0)
         {
--- a/libinterp/octave-value/ov-str-mat.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-str-mat.h	Mon Feb 26 23:30:33 2024 -0500
@@ -48,9 +48,7 @@
 // Character matrix values with special properties for use as
 // strings.
 
-class
-OCTINTERP_API
-octave_char_matrix_str : public octave_char_matrix
+class OCTINTERP_API octave_char_matrix_str : public octave_char_matrix
 {
 public:
 
@@ -186,8 +184,7 @@
 
 typedef octave_char_matrix_str octave_char_matrix_dq_str;
 
-class
-octave_char_matrix_sq_str : public octave_char_matrix_str
+class octave_char_matrix_sq_str : public octave_char_matrix_str
 {
 public:
 
--- a/libinterp/octave-value/ov-struct.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-struct.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -634,7 +634,7 @@
       increment_indent_level ();
 
       indent (os);
-      dim_vector dv = dims ();
+      const dim_vector& dv = dims ();
       os << dv.str () << " struct array containing the fields:";
       newline (os);
 
@@ -727,7 +727,7 @@
     }
 
   std::string tname = val.type_name ();
-  dim_vector dv = val.dims ();
+  const dim_vector& dv = val.dims ();
   std::string dimstr = dv.str ();
   return "[" + dimstr + " " + tname + "]";
 }
@@ -845,7 +845,7 @@
 
   octave_idx_type nf = m.nfields ();
 
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
   if (dv.ndims () < 1)
     return false;
 
@@ -1382,7 +1382,7 @@
             {
               indent (os);
               os << key;
-              dim_vector dv = val.dims ();
+              const dim_vector& dv = val.dims ();
               os << ": " << dv.str () << ' ' << val.type_name ();
               newline (os);
             }
@@ -1443,7 +1443,7 @@
   octave_value val = m_map.contents (r);
 
   std::string tname = val.type_name ();
-  dim_vector dv = val.dims ();
+  const dim_vector& dv = val.dims ();
   std::string dimstr = dv.str ();
   return "[" + dimstr + " " + tname + "]";
 }
@@ -1860,7 +1860,7 @@
     {
       if (args(i).iscell ())
         {
-          dim_vector argdims (args(i).dims ());
+          const dim_vector& argdims = args(i).dims ();
 
           if (! scalar (argdims))
             {
--- a/libinterp/octave-value/ov-struct.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-struct.h	Mon Feb 26 23:30:33 2024 -0500
@@ -45,8 +45,7 @@
 
 // Data structures.
 
-class
-octave_struct : public octave_base_value
+class octave_struct : public octave_base_value
 {
 public:
 
@@ -173,8 +172,7 @@
   DECLARE_OV_TYPEID_FUNCTIONS_AND_DATA
 };
 
-class
-octave_scalar_struct : public octave_base_value
+class octave_scalar_struct : public octave_base_value
 {
 public:
 
--- a/libinterp/octave-value/ov-typeinfo.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-typeinfo.h	Mon Feb 26 23:30:33 2024 -0500
@@ -39,9 +39,7 @@
 
 OCTAVE_BEGIN_NAMESPACE(octave)
 
-class
-OCTINTERP_API
-type_info
+class OCTINTERP_API type_info
 {
 public:
 
--- a/libinterp/octave-value/ov-usr-fcn.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-usr-fcn.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -218,7 +218,7 @@
     m_lead_comm (), m_trail_comm (),
     m_location_line (0), m_location_column (0),
     m_system_fcn_file (false),
-    m_num_named_args (m_param_list ? m_param_list->length () : 0),
+    m_num_named_args (m_param_list ? m_param_list->size () : 0),
     m_subfunction (false), m_inline_function (false),
     m_anonymous_function (false), m_nested_function (false),
     m_class_constructor (none), m_class_method (none)
@@ -504,7 +504,7 @@
 octave_user_function::special_expr ()
 {
   panic_unless (is_special_expr ());
-  panic_if (m_cmd_list->length () != 1);
+  panic_if (m_cmd_list->size () != 1);
 
   octave::tree_statement *stmt = m_cmd_list->front ();
   return stmt->expression ();
@@ -516,8 +516,8 @@
   bool retval = false;
   if (Voptimize_subsasgn_calls
       && m_param_list && m_ret_list
-      && m_param_list->length () > 0 && ! m_param_list->varargs_only ()
-      && m_ret_list->length () == 1 && ! m_ret_list->takes_varargs ())
+      && m_param_list->size () > 0 && ! m_param_list->varargs_only ()
+      && m_ret_list->size () == 1 && ! m_ret_list->takes_varargs ())
     {
       octave::tree_identifier *par1 = m_param_list->front ()->ident ();
       octave::tree_identifier *ret1 = m_ret_list->front ()->ident ();
@@ -721,7 +721,7 @@
 
       tree_parameter_list *m_param_list = ufcn->parameter_list ();
 
-      retval = (m_param_list ? m_param_list->length () : 0);
+      retval = (m_param_list ? m_param_list->size () : 0);
       if (ufcn->takes_varargs ())
         retval = -1 - retval;
     }
@@ -843,7 +843,7 @@
 
       tree_parameter_list *m_ret_list = ufcn->return_list ();
 
-      retval = (m_ret_list ? m_ret_list->length () : 0);
+      retval = (m_ret_list ? m_ret_list->size () : 0);
 
       if (ufcn->takes_var_return ())
         retval = -1 - retval;
--- a/libinterp/octave-value/ov-usr-fcn.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov-usr-fcn.h	Mon Feb 26 23:30:33 2024 -0500
@@ -53,8 +53,7 @@
 
 OCTAVE_END_NAMESPACE(octave)
 
-class
-octave_user_code : public octave_function
+class octave_user_code : public octave_function
 {
 protected:
 
@@ -146,8 +145,7 @@
 
 // Scripts.
 
-class
-octave_user_script : public octave_user_code
+class octave_user_script : public octave_user_code
 {
 public:
 
@@ -199,8 +197,7 @@
 
 // User-defined functions.
 
-class
-octave_user_function : public octave_user_code
+class octave_user_function : public octave_user_code
 {
 public:
 
--- a/libinterp/octave-value/ov.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -2957,9 +2957,8 @@
 
   double dval = val.double_value ();
   double intpart;
-  static const double out_of_range_top
-    = static_cast<double> (std::numeric_limits<typename T::val_type>::max ())
-      + 1.;
+  static constexpr double out_of_range_top
+    = static_cast<double> (std::numeric_limits<typename T::val_type>::max ()) + 1.0;
 
   if (dval >= out_of_range_top
       || dval < std::numeric_limits<typename T::val_type>::min ()
@@ -2994,8 +2993,7 @@
   // Map to unsigned.
   // Idea from https://stackoverflow.com/questions/10589559
 
-  static const UT offset
-    = UT (0) - static_cast<UT> (std::numeric_limits<ST>::min ());
+  static const UT offset = UT (0) - static_cast<UT> (std::numeric_limits<ST>::min ());
 
   UT au = static_cast<UT> (a) + offset;
   UT bu = static_cast<UT> (b) + offset;
@@ -3133,8 +3131,8 @@
       || (increment < 0 && base < limit))
     return 0;
 
-  static const double out_of_range_top
-    = static_cast<double> (std::numeric_limits<UT>::max ()) + 1.;
+  static constexpr double out_of_range_top
+    = static_cast<double> (std::numeric_limits<UT>::max ()) + 1.0;
 
   double abs_increment = std::abs (increment);
 
--- a/libinterp/octave-value/ov.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ov.h	Mon Feb 26 23:30:33 2024 -0500
@@ -69,9 +69,7 @@
 #include "oct-stream.h"
 #include "ov-base.h"
 
-class
-OCTINTERP_API
-octave_value
+class OCTINTERP_API octave_value
 {
 public:
 
--- a/libinterp/octave-value/ovl.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ovl.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -191,7 +191,7 @@
 
   for (octave_idx_type i = 0; i < n; i++)
     {
-      dim_vector dv = elem(i).dims ();
+      const dim_vector& dv = elem(i).dims ();
       if (! dv.all_ones ())
         return false;
     }
--- a/libinterp/octave-value/ovl.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave-value/ovl.h	Mon Feb 26 23:30:33 2024 -0500
@@ -38,9 +38,7 @@
 #include "ov.h"
 #include "Cell.h"
 
-class
-OCTINTERP_API
-octave_value_list
+class OCTINTERP_API octave_value_list
 {
 public:
 
--- a/libinterp/octave.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -85,6 +85,10 @@
           octave_print_terse_usage_and_exit ();
           break;
 
+        case 'G':
+          m_gui = false;
+          break;
+
         case 'H':
           m_read_history_file = false;
           break;
@@ -94,19 +98,35 @@
           break;
 
         case 'V':
-          m_verbose_flag = true;
+          m_init_trace = true;
           break;
 
-        case 'd':
-          // This is the same as yydebug in parse.y.
-          octave_debug++;
+        // FIXME: Disabled debug option for parser 2023-12-29.
+        // However, uncomment and restore option if Octave adds a debug option
+        // to immediately enter debug mode for a script.
+        // case 'd':
+        //   break;
+
+        case 'e':
+          if (octave_optarg_wrapper ())
+            {
+              if (m_code_to_eval.empty ())
+                m_code_to_eval = octave_optarg_wrapper ();
+              else
+                m_code_to_eval += (std::string (" ")
+                                   + octave_optarg_wrapper ());
+            }
           break;
 
         case 'f':
-          m_read_init_files = false;
+          m_read_user_files = false;
           m_read_site_files = false;
           break;
 
+        case 'g':
+          m_gui = true;
+          break;
+
         case 'h':
           octave_print_verbose_usage_and_exit ();
           break;
@@ -142,17 +162,6 @@
             m_doc_cache_file = octave_optarg_wrapper ();
           break;
 
-        case EVAL_OPTION:
-          if (octave_optarg_wrapper ())
-            {
-              if (m_code_to_eval.empty ())
-                m_code_to_eval = octave_optarg_wrapper ();
-              else
-                m_code_to_eval += (std::string (" ")
-                                   + octave_optarg_wrapper ());
-            }
-          break;
-
         case EXEC_PATH_OPTION:
           if (octave_optarg_wrapper ())
             m_exec_path = octave_optarg_wrapper ();
@@ -164,10 +173,6 @@
 #endif
           break;
 
-        case GUI_OPTION:
-          m_gui = true;
-          break;
-
         case IMAGE_PATH_OPTION:
           if (octave_optarg_wrapper ())
             m_image_path = octave_optarg_wrapper ();
@@ -187,12 +192,8 @@
           m_forced_line_editing = m_line_editing = true;
           break;
 
-        case NO_GUI_OPTION:
-          m_gui = false;
-          break;
-
-        case NO_INIT_FILE_OPTION:
-          m_read_init_files = false;
+        case NO_INIT_USER_OPTION:
+          m_read_user_files = false;
           break;
 
         case NO_INIT_PATH_OPTION:
@@ -203,7 +204,7 @@
           m_line_editing = false;
           break;
 
-        case NO_SITE_FILE_OPTION:
+        case NO_INIT_SITE_OPTION:
           m_read_site_files = false;
           break;
 
@@ -255,12 +256,16 @@
   m.assign ("no_window_system", no_window_system ());
   m.assign ("persist", persist ());
   m.assign ("read_history_file", read_history_file ());
-  m.assign ("read_init_files", read_init_files ());
+  // FIXME: read_init_files deprecated in Octave 10 in favor of read_user_files
+  m.assign ("read_init_files", read_user_files ());
+  m.assign ("read_user_files", read_user_files ());
   m.assign ("read_site_files", read_site_files ());
   m.assign ("server", server ());
   m.assign ("set_initial_path", set_initial_path ());
   m.assign ("traditional", traditional ());
-  m.assign ("verbose_flag", verbose_flag ());
+  m.assign ("init_trace", init_trace ());
+  // FIXME: --verbose deprecated in Octave 10.  Remove in Octave 12.
+  m.assign ("verbose", init_trace ());
   m.assign ("code_to_eval", code_to_eval ());
   m.assign ("command_line_path", string_vector (command_line_path ()));
   m.assign ("docstrings_file", docstrings_file ());
@@ -468,12 +473,12 @@
 For example, if you invoked Octave using the command
 
 @example
-octave --no-line-editing --silent
+octave --no-line-editing --quiet
 @end example
 
 @noindent
 @code{argv} would return a cell array of strings with the elements
-@option{--no-line-editing} and @option{--silent}.
+@option{--no-line-editing} and @option{--quiet}.
 
 If you write an executable Octave script, @code{argv} will return the list
 of arguments passed to the script.  @xref{Executable Octave Programs}, for
--- a/libinterp/octave.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/octave.h	Mon Feb 26 23:30:33 2024 -0500
@@ -67,12 +67,17 @@
   bool no_window_system () const { return m_no_window_system; }
   bool persist () const { return m_persist; }
   bool read_history_file () const { return m_read_history_file; }
-  bool read_init_files () const { return m_read_init_files; }
   bool read_site_files () const { return m_read_site_files; }
+  bool read_user_files () const { return m_read_user_files; }
+  OCTAVE_DEPRECATED (10, "cmdline_options::read_init_files is deprecated, use read_user_files")
+  bool read_init_files () const { return m_read_user_files; }
   bool server () const { return m_server; }
   bool set_initial_path () const { return m_set_initial_path; }
   bool traditional () const { return m_traditional; }
-  bool verbose_flag () const { return m_verbose_flag; }
+
+  OCTAVE_DEPRECATED (10, "cmdline_options::verbose is deprecated, use init_trace")
+  bool verbose () const { return m_init_trace; }
+  bool init_trace () const { return m_init_trace; }
   std::string code_to_eval () const { return m_code_to_eval; }
   std::list<std::string> command_line_path () const
   { return m_command_line_path; }
@@ -99,12 +104,18 @@
   void no_window_system (bool arg) { m_no_window_system = arg; }
   void persist (bool arg) { m_persist = arg; }
   void read_history_file (bool arg) { m_read_history_file = arg; }
-  void read_init_files (bool arg) { m_read_init_files = arg; }
+  // FIXME: Alias for read_user_files() introduced in Octave 10.
+  // Remove at some point in the future.
   void read_site_files (bool arg) { m_read_site_files = arg; }
+  void read_user_files (bool arg) { m_read_user_files = arg; }
+  OCTAVE_DEPRECATED (10, "cmdline_options::read_init_files is deprecated, use read_user_files")
+  void read_init_files (bool arg) { read_user_files (arg); }
   void server (bool arg) { m_server = arg; }
   void set_initial_path (bool arg) { m_set_initial_path = arg; }
   void traditional (bool arg) { m_traditional = arg; }
-  void verbose_flag (bool arg) { m_verbose_flag = arg; }
+  OCTAVE_DEPRECATED (10, "cmdline_options::verbose is deprecated, use init_trace")
+  void verbose (bool arg) { m_init_trace = arg; }
+  void init_trace (bool arg) { m_init_trace = arg; }
   void code_to_eval (const std::string& arg) { m_code_to_eval = arg; }
   void command_line_path (const std::list<std::string>& arg)
   { m_command_line_path = arg; }
@@ -163,11 +174,11 @@
   bool m_read_history_file = true;
 
   // TRUE means we read ~/.octaverc and ./.octaverc.
-  // (--norc; --no-init-file; -f)
-  bool m_read_init_files = true;
+  // (--no-init-user; --no-init-file; --norc; -f)
+  bool m_read_user_files = true;
 
   // TRUE means we read the site-wide octaverc files.
-  // (--norc; --no-site-file; -f)
+  // (--no-init-site; --no-site-file; --norc; -f)
   bool m_read_site_files = true;
 
   // If TRUE, start the command server.
@@ -182,9 +193,10 @@
   // (--traditional)
   bool m_traditional = false;
 
-  // If TRUE, print verbose info in some cases.
-  // (--verbose; -V)
-  bool m_verbose_flag = false;
+  // If TRUE, print trace of files read during initialization
+  // (--init-trace, --verbose; -V)
+  // FIXME: --verbose and -V will eventually be deprecated and removed.
+  bool m_init_trace = false;
 
   // The code to evaluate at startup
   // (--eval CODE)
--- a/libinterp/operators/op-int.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/operators/op-int.h	Mon Feb 26 23:30:33 2024 -0500
@@ -702,8 +702,8 @@
   static octave_value                                           \
   elem_xpow (const T1 ## NDArray& a, const T2 ## NDArray& b)    \
   {                                                             \
-    dim_vector a_dims = a.dims ();                              \
-    dim_vector b_dims = b.dims ();                              \
+    const dim_vector& a_dims = a.dims ();                       \
+    const dim_vector& b_dims = b.dims ();                       \
     if (a_dims != b_dims)                                       \
       {                                                         \
         if (! is_valid_bsxfun ("operator .^", a_dims, b_dims))  \
@@ -723,8 +723,8 @@
   static octave_value                                           \
   elem_xpow (const T1 ## NDArray& a, const NDArray& b)          \
   {                                                             \
-    dim_vector a_dims = a.dims ();                              \
-    dim_vector b_dims = b.dims ();                              \
+    const dim_vector& a_dims = a.dims ();                       \
+    const dim_vector& b_dims = b.dims ();                       \
     if (a_dims != b_dims)                                       \
       {                                                         \
         if (! is_valid_bsxfun ("operator .^", a_dims, b_dims))  \
@@ -744,8 +744,8 @@
   static octave_value                                           \
   elem_xpow (const NDArray& a, const T2 ## NDArray& b)          \
   {                                                             \
-    dim_vector a_dims = a.dims ();                              \
-    dim_vector b_dims = b.dims ();                              \
+    const dim_vector& a_dims = a.dims ();                       \
+    const dim_vector& b_dims = b.dims ();                       \
     if (a_dims != b_dims)                                       \
       {                                                         \
         if (! is_valid_bsxfun ("operator .^", a_dims, b_dims))  \
@@ -765,8 +765,8 @@
   static octave_value                                           \
   elem_xpow (const T1 ## NDArray& a, const FloatNDArray& b)     \
   {                                                             \
-    dim_vector a_dims = a.dims ();                              \
-    dim_vector b_dims = b.dims ();                              \
+    const dim_vector& a_dims = a.dims ();                       \
+    const dim_vector& b_dims = b.dims ();                       \
     if (a_dims != b_dims)                                       \
       {                                                         \
         if (! is_valid_bsxfun ("operator .^", a_dims, b_dims))  \
@@ -786,8 +786,8 @@
   static octave_value                                           \
   elem_xpow (const FloatNDArray& a, const T2 ## NDArray& b)     \
   {                                                             \
-    dim_vector a_dims = a.dims ();                              \
-    dim_vector b_dims = b.dims ();                              \
+    const dim_vector& a_dims = a.dims ();                       \
+    const dim_vector& b_dims = b.dims ();                       \
     if (a_dims != b_dims)                                       \
       {                                                         \
         if (! is_valid_bsxfun ("operator .^", a_dims, b_dims))  \
--- a/libinterp/operators/op-mi.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/operators/op-mi.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -67,10 +67,10 @@
 
   uint64_t ival = val.value ();
 
-  static const uint64_t max_val
+  static constexpr uint64_t max_val
     = static_cast<uint64_t> (std::numeric_limits<int64_t>::max ());
 
-  static const uint64_t max_val_p1 = max_val + 1;
+  static constexpr uint64_t max_val_p1 = max_val + 1;
 
   if (ival <= max_val)
     {
@@ -84,7 +84,7 @@
       // should return int8(-128) but converting directly to int8 and
       // negating will not return the correct result.
 
-      static const int64_t min_signed_ival
+      static constexpr int64_t min_signed_ival
         = std::numeric_limits<int64_t>::min ();
 
       return octave_value (new octave_magic_int (min_signed_ival));
--- a/libinterp/operators/op-str-str.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/operators/op-str-str.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -57,8 +57,8 @@
   CONCAT2(oct_binop_, name) (const octave_base_value& a1,               \
                              const octave_base_value& a2)               \
   {                                                                     \
-    dim_vector a1_dims = a1.dims ();                                    \
-    dim_vector a2_dims = a2.dims ();                                    \
+    const dim_vector& a1_dims = a1.dims ();                             \
+    const dim_vector& a2_dims = a2.dims ();                             \
                                                                         \
     bool a1_is_scalar = a1_dims.all_ones ();                            \
     bool a2_is_scalar = a2_dims.all_ones ();                            \
--- a/libinterp/operators/op-struct.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/operators/op-struct.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -70,7 +70,7 @@
   OCTAVE_CAST_BASE_VALUE (const octave_matrix&, v2, a2);
 
   NDArray tmp = v2.array_value ();
-  dim_vector dv = tmp.dims ();
+  const dim_vector& dv = tmp.dims ();
 
   if (! dv.all_zero ())
     error ("invalid concatenation of structure with matrix");
@@ -87,7 +87,7 @@
   OCTAVE_CAST_BASE_VALUE (const octave_struct&, v2, a2);
 
   NDArray tmp = v1.array_value ();
-  dim_vector dv = tmp.dims ();
+  const dim_vector& dv = tmp.dims ();
 
   if (! dv.all_zero ())
     error ("invalid concatenation of structure with matrix");
--- a/libinterp/options.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/options.h	Mon Feb 26 23:30:33 2024 -0500
@@ -33,55 +33,71 @@
 // This is here so that it's more likely that the usage message and
 // the real set of options will agree.  Note: the '+' must come first
 // to prevent getopt from permuting arguments!
-static const char *short_opts = "+HWVdfhip:qvx";
+static const char *short_opts = "+GHWVde:fghip:qvx";
 
 // Long options.  See the comments in getopt.h for the meanings of the
 // fields in this structure.
 #define BUILT_IN_DOCSTRINGS_FILE_OPTION 1
 #define DOC_CACHE_FILE_OPTION 2
-#define EVAL_OPTION 3
-#define EXEC_PATH_OPTION 4
-#define EXPERIMENTAL_TERMINAL_WIDGET_OPTION 5
-#define GUI_OPTION 6
-#define IMAGE_PATH_OPTION 7
-#define INFO_FILE_OPTION 8
-#define INFO_PROG_OPTION 9
-#define LINE_EDITING_OPTION 10
-#define NO_GUI_OPTION 11
-#define NO_GUI_LIBS_OPTION 12
-#define NO_INIT_FILE_OPTION 13
-#define NO_INIT_PATH_OPTION 14
-#define NO_LINE_EDITING_OPTION 15
-#define NO_SITE_FILE_OPTION 16
-#define PERSIST_OPTION 17
-#define SERVER_OPTION 18
-#define TEXI_MACROS_FILE_OPTION 19
-#define TRADITIONAL_OPTION 20
+#define EXEC_PATH_OPTION 3
+#define EXPERIMENTAL_TERMINAL_WIDGET_OPTION 4
+#define IMAGE_PATH_OPTION 5
+#define INFO_FILE_OPTION 6
+#define INFO_PROG_OPTION 7
+#define LINE_EDITING_OPTION 8
+#define NO_GUI_LIBS_OPTION 9
+#define NO_INIT_USER_OPTION 10
+#define NO_INIT_PATH_OPTION 11
+#define NO_LINE_EDITING_OPTION 12
+#define NO_INIT_SITE_OPTION 13
+#define PERSIST_OPTION 14
+#define SERVER_OPTION 15
+#define TEXI_MACROS_FILE_OPTION 16
+#define TRADITIONAL_OPTION 17
 struct octave_getopt_options long_opts[] =
 {
+  // Alias for --traditional, not displayed in help
   { "braindead",                octave_no_arg,       nullptr, TRADITIONAL_OPTION },
+  // Option for developers, not displayed in help
   { "built-in-docstrings-file", octave_required_arg, nullptr, BUILT_IN_DOCSTRINGS_FILE_OPTION },
-  { "debug",                    octave_no_arg,       nullptr, 'd' },
+  // FIXME: Disabled debug option for parser 2023-12-29.
+  // Uncomment and restore code if Octave adds capability to
+  // immediately enter debug mode for a script.
+  // { "debug",                    octave_no_arg,       nullptr, 'd' },
+  // Option for developers, not displayed in help
   { "doc-cache-file",           octave_required_arg, nullptr, DOC_CACHE_FILE_OPTION },
   { "echo-commands",            octave_no_arg,       nullptr, 'x' },
-  { "eval",                     octave_required_arg, nullptr, EVAL_OPTION },
+  { "eval",                     octave_required_arg, nullptr, 'e' },
+  // Option for developers, not displayed in help
   { "exec-path",                octave_required_arg, nullptr, EXEC_PATH_OPTION },
   { "experimental-terminal-widget", octave_no_arg,   nullptr, EXPERIMENTAL_TERMINAL_WIDGET_OPTION },
-  { "force-gui",                octave_no_arg,       nullptr, GUI_OPTION },
-  { "gui",                      octave_no_arg,       nullptr, GUI_OPTION },
+  // Alias for --gui, not displayed in help, eventually will be deprecated
+  { "force-gui",                octave_no_arg,       nullptr, 'g' },
+  { "gui",                      octave_no_arg,       nullptr, 'g' },
   { "help",                     octave_no_arg,       nullptr, 'h' },
+  // Option for developers, not displayed in help
   { "image-path",               octave_required_arg, nullptr, IMAGE_PATH_OPTION },
+  // Option for developers, not displayed in help
   { "info-file",                octave_required_arg, nullptr, INFO_FILE_OPTION },
+  // Option for developers, not displayed in help
   { "info-program",             octave_required_arg, nullptr, INFO_PROG_OPTION },
+  // Option for developers, not displayed in help
+  { "init-trace",               octave_no_arg,       nullptr, 'V' },
   { "interactive",              octave_no_arg,       nullptr, 'i' },
   { "line-editing",             octave_no_arg,       nullptr, LINE_EDITING_OPTION },
-  { "no-gui",                   octave_no_arg,       nullptr, NO_GUI_OPTION },
+  { "no-gui",                   octave_no_arg,       nullptr, 'G' },
+  // Option for developers, not displayed in help
   { "no-gui-libs",              octave_no_arg,       nullptr, NO_GUI_LIBS_OPTION },
   { "no-history",               octave_no_arg,       nullptr, 'H' },
-  { "no-init-file",             octave_no_arg,       nullptr, NO_INIT_FILE_OPTION },
+  { "no-init-all",              octave_no_arg,       nullptr, 'f' },
+  // Alias for --no-init-user, not displayed in help
+  { "no-init-file",             octave_no_arg,       nullptr, NO_INIT_USER_OPTION },
   { "no-init-path",             octave_no_arg,       nullptr, NO_INIT_PATH_OPTION },
+  { "no-init-user",             octave_no_arg,       nullptr, NO_INIT_PATH_OPTION },
   { "no-line-editing",          octave_no_arg,       nullptr, NO_LINE_EDITING_OPTION },
-  { "no-site-file",             octave_no_arg,       nullptr, NO_SITE_FILE_OPTION },
+  { "no-init-site",             octave_no_arg,       nullptr, NO_INIT_SITE_OPTION },
+  // Alias for --no-init-site, not displayed in help
+  { "no-site-file",             octave_no_arg,       nullptr, NO_INIT_SITE_OPTION },
   { "no-window-system",         octave_no_arg,       nullptr, 'W' },
   { "norc",                     octave_no_arg,       nullptr, 'f' },
   { "path",                     octave_required_arg, nullptr, 'p' },
@@ -89,8 +105,10 @@
   { "quiet",                    octave_no_arg,       nullptr, 'q' },
   { "server",                   octave_no_arg,       nullptr, SERVER_OPTION },
   { "silent",                   octave_no_arg,       nullptr, 'q' },
+  // Option for developers, not displayed in help
   { "texi-macros-file",         octave_required_arg, nullptr, TEXI_MACROS_FILE_OPTION },
   { "traditional",              octave_no_arg,       nullptr, TRADITIONAL_OPTION },
+  // Alias for --init-trace, not displayed in help, eventually will be deprecated
   { "verbose",                  octave_no_arg,       nullptr, 'V' },
   { "version",                  octave_no_arg,       nullptr, 'v' },
   { nullptr,                    0,                   nullptr, 0 }
--- a/libinterp/parse-tree/bp-table.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/parse-tree/bp-table.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -305,7 +305,7 @@
                    "condition is not empty, but has nothing to evaluate");
           else
             {
-              if (stmt_list->length () == 1
+              if (stmt_list->size () == 1
                   && (stmt = stmt_list->front ())
                   && stmt->is_expression ())
                 {
--- a/libinterp/parse-tree/comment-list.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/parse-tree/comment-list.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -37,12 +37,7 @@
 comment_list *
 comment_list::dup () const
 {
-  comment_list *new_cl = new comment_list ();
-
-  for (const auto& elt : *this)
-    new_cl->append (elt);
-
-  return new_cl;
+  return new comment_list (*this);
 }
 
 OCTAVE_END_NAMESPACE(octave)
--- a/libinterp/parse-tree/comment-list.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/parse-tree/comment-list.h	Mon Feb 26 23:30:33 2024 -0500
@@ -28,10 +28,9 @@
 
 #include "octave-config.h"
 
+#include <list>
 #include <string>
 
-#include "base-list.h"
-
 OCTAVE_BEGIN_NAMESPACE(octave)
 
 extern std::string get_comment_text ();
@@ -40,8 +39,7 @@
 
 extern void save_comment_text (const std::string& text);
 
-class
-comment_elt
+class comment_elt
 {
 public:
 
@@ -107,20 +105,23 @@
   bool m_uses_hash_char;
 };
 
-class
-comment_list : public base_list<comment_elt>
+class comment_list : public std::list<comment_elt>
 {
 public:
 
   OCTAVE_DEFAULT_CONSTRUCT_COPY_MOVE_DELETE (comment_list)
 
   void append (const comment_elt& elt)
-  { base_list<comment_elt>::append (elt); }
+  {
+    push_back (elt);
+  }
 
   void append (const std::string& s,
                comment_elt::comment_type t = comment_elt::unknown,
                bool uses_hash_char = false)
-  { append (comment_elt (s, t, uses_hash_char)); }
+  {
+    push_back (comment_elt (s, t, uses_hash_char));
+  }
 
   comment_list * dup () const;
 
--- a/libinterp/parse-tree/lex.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/parse-tree/lex.h	Mon Feb 26 23:30:33 2024 -0500
@@ -48,8 +48,7 @@
 
 // For communication between the lexer and parser.
 
-class
-lexical_feedback
+class lexical_feedback
 {
 public:
 
@@ -524,8 +523,7 @@
 // initialize if everything is grouped in a parent class rather than
 // listing all the members in the base_lexer class.
 
-class
-base_lexer : public lexical_feedback
+class base_lexer : public lexical_feedback
 {
 public:
 
@@ -560,8 +558,7 @@
 
   // Collect comment text.
 
-  class
-  comment_buffer
+  class comment_buffer
   {
   public:
 
@@ -755,8 +752,7 @@
   std::stack<int> start_state_stack;
 };
 
-class
-lexer : public base_lexer
+class lexer : public base_lexer
 {
 public:
 
@@ -825,8 +821,7 @@
 template <> int base_lexer::handle_number<10> ();
 template <> int base_lexer::handle_number<16> ();
 
-class
-push_lexer : public base_lexer
+class push_lexer : public base_lexer
 {
 public:
 
--- a/libinterp/parse-tree/oct-parse.yy	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/parse-tree/oct-parse.yy	Mon Feb 26 23:30:33 2024 -0500
@@ -2528,7 +2528,7 @@
   static LIST_T *
   list_append (LIST_T *list, ELT_T elt)
   {
-    list->append (elt);
+    list->push_back (elt);
     return list;
   }
 
@@ -3453,7 +3453,7 @@
         int l = for_tok->line ();
         int c = for_tok->column ();
 
-        if (lhs->length () == 1)
+        if (lhs->size () == 1)
           {
             tree_expression *tmp = lhs->remove_front ();
 
@@ -3882,7 +3882,7 @@
     if (! cmds)
       cmds = new tree_statement_list ();
 
-    cmds->append (end_script);
+    cmds->push_back (end_script);
 
     symbol_scope script_scope = m_lexer.m_symtab_context.curr_scope ();
 
@@ -3928,7 +3928,7 @@
     if (! m_function_scopes.name_current_scope (id_name))
       {
         bison_error ("duplicate subfunction or nested function name",
-                     id->line (), id->column ());
+                     id->line (), id->column () + 1);
 
         delete id;
         return nullptr;
@@ -4036,7 +4036,7 @@
     if (! body)
       body = new tree_statement_list ();
 
-    body->append (end_fcn_stmt);
+    body->push_back (end_fcn_stmt);
 
     octave_user_function *fcn
       = new octave_user_function (m_lexer.m_symtab_context.curr_scope (),
@@ -4784,28 +4784,28 @@
   base_parser::append_classdef_properties_block (tree_classdef_body *body,
                                                  tree_classdef_properties_block *block)
   {
-    return list_append (body, block);
+    return body->append (block);
   }
 
   tree_classdef_body *
   base_parser::append_classdef_methods_block (tree_classdef_body *body,
                                               tree_classdef_methods_block *block)
   {
-    return list_append (body, block);
+    return body->append (block);
   }
 
   tree_classdef_body *
   base_parser::append_classdef_events_block (tree_classdef_body *body,
                                              tree_classdef_events_block *block)
   {
-    return list_append (body, block);
+    return body->append (block);
   }
 
   tree_classdef_body *
   base_parser::append_classdef_enum_block (tree_classdef_body *body,
                                            tree_classdef_enum_block *block)
   {
-    return list_append (body, block);
+    return body->append (block);
   }
 
   octave_user_function*
@@ -4997,10 +4997,9 @@
 
         if (expr->is_index_expression ())
           {
-            tree_index_expression *tmp
-              = dynamic_cast<tree_index_expression *> (expr);
-
-            retval = tmp->append (args, type);
+            retval = dynamic_cast<tree_index_expression *> (expr);
+
+            retval->append (args, type);
           }
         else
           retval = new tree_index_expression (expr, args, l, c, type);
@@ -5025,10 +5024,9 @@
 
     if (expr->is_index_expression ())
       {
-        tree_index_expression *tmp
-          = dynamic_cast<tree_index_expression *> (expr);
-
-        retval = tmp->append (elt);
+        retval = dynamic_cast<tree_index_expression *> (expr);
+
+        retval->append (elt);
       }
     else
       retval = new tree_index_expression (expr, elt, l, c);
@@ -5054,10 +5052,9 @@
 
     if (expr->is_index_expression ())
       {
-        tree_index_expression *tmp
-          = dynamic_cast<tree_index_expression *> (expr);
-
-        retval = list_append (tmp, elt);
+        retval = dynamic_cast<tree_index_expression *> (expr);
+
+        retval->append (elt);
       }
     else
       retval = new tree_index_expression (expr, elt, l, c);
@@ -5176,7 +5173,7 @@
     std::string va_type = (type == tree_parameter_list::in
                            ? "varargin" : "varargout");
 
-    std::size_t len = lst->length ();
+    std::size_t len = lst->size ();
 
     if (len > 0)
       {
@@ -5560,34 +5557,6 @@
     m_lexer.m_allow_command_syntax = false;
   }
 
-  // FIXME: this function partially duplicates do_dbtype in debug.cc.
-  static std::string
-  get_file_line (const std::string& name, int line)
-  {
-    // NAME should be an absolute file name and the file should exist.
-
-    std::ifstream fs = sys::ifstream (name.c_str (), std::ios::in);
-
-    std::string text;
-
-    if (fs)
-      {
-        int i = 1;
-
-        do
-          {
-            if (! std::getline (fs, text))
-              {
-                text = "";
-                break;
-              }
-          }
-        while (i++ < line);
-      }
-
-    return text;
-  }
-
   void
   base_parser::bison_error (const std::string& str)
   {
@@ -5605,56 +5574,49 @@
   {
     std::ostringstream output_buf;
 
-    if (m_lexer.m_reading_fcn_file || m_lexer.m_reading_script_file
-        || m_lexer.m_reading_classdef_file)
-      output_buf << "parse error near line " << err_line
-                 << " of file " << m_lexer.m_fcn_file_full_name;
-    else
-      output_buf << "parse error:";
-
-    if (str != "parse error")
-      output_buf << "\n\n  " << str;
-
-    output_buf << "\n\n";
-
-    std::string curr_line;
-
-    if (m_lexer.m_reading_fcn_file || m_lexer.m_reading_script_file
-        || m_lexer.m_reading_classdef_file)
-      curr_line = get_file_line (m_lexer.m_fcn_file_full_name, err_line);
-    else
-      curr_line = m_lexer.m_current_input_line;
+    bool in_file = (m_lexer.m_reading_fcn_file || m_lexer.m_reading_script_file
+                    || m_lexer.m_reading_classdef_file);
 
     // Adjust the error column for display because it is 1-based in the
     // lexer for easier reporting.
     err_col--;
 
-    if (! curr_line.empty ())
+    if (in_file)
+      {
+        output_buf << str
+                   << " near line " << err_line << ", column " << err_col
+                   << " in file " << m_lexer.m_fcn_file_full_name << "\n";
+      }
+    else
       {
-        // FIXME: we could do better if we just cached lines from the
-        // input file in a list.  See also functions for managing input
-        // buffers in lex.ll.
-
-        std::size_t len = curr_line.length ();
-
-        if (curr_line[len-1] == '\n')
-          curr_line.resize (len-1);
-
-        // Print the line, maybe with a pointer near the error token.
-
-        output_buf << ">>> " << curr_line << "\n";
-
-        if (err_col == 0)
-          err_col = len;
-
-        for (int i = 0; i < err_col + 3; i++)
-          output_buf << " ";
-
-        output_buf << "^";
+        // On command line, point directly to error
+        output_buf << str << "\n\n";
+        std::string curr_line = m_lexer.m_current_input_line;
+
+        if (! curr_line.empty ())
+          {
+            // FIXME: we could do better if we just cached lines from the
+            // input file in a list.  See also functions for managing input
+            // buffers in lex.ll.
+            std::size_t len = curr_line.length ();
+
+            if (curr_line[len-1] == '\n')
+              curr_line.resize (len-1);
+
+            // Print the line, maybe with a pointer near the error token.
+            output_buf << ">>> " << curr_line << "\n";
+
+            if (err_col == 0)
+              err_col = len;
+
+            for (int i = 0; i < err_col + 3; i++)
+              output_buf << " ";
+
+            output_buf << "^" << "\n";
+          }
+
       }
 
-    output_buf << "\n";
-
     m_parse_error_msg = output_buf.str ();
   }
 
@@ -5715,7 +5677,7 @@
       }
 
     if (status != 0)
-      parse_error ("%s", m_parse_error_msg.c_str ());
+      parse_error_with_id ("Octave:parse-error", "%s", m_parse_error_msg.c_str ());
 
     return status;
   }
@@ -5787,7 +5749,7 @@
     while (status == YYPUSH_MORE || ! m_lexer.at_end_of_buffer ());
 
     if (status != 0)
-      parse_error ("%s", m_parse_error_msg.c_str ());
+      parse_error_with_id ("Octave:parse-error", "%s", m_parse_error_msg.c_str ());
 
     return status;
   }
@@ -5865,7 +5827,7 @@
         return octave_value ();
       }
 
-    unwind_action act ([=] () { ::fclose (ffile); });
+    unwind_action act ([ffile] () { ::fclose (ffile); });
 
     // get the encoding for this folder
     input_system& input_sys = interp.get_input_system ();
@@ -6697,7 +6659,7 @@
   // the eval, then the message is stored in the exception object and we
   // will display it later, after the buffers have been restored.
 
-  unwind_action act ([=] ()
+  unwind_action act ([old_out_buf, old_err_buf] ()
                              {
                                octave_stdout.rdbuf (old_out_buf);
                                std::cerr.rdbuf (old_err_buf);
--- a/libinterp/parse-tree/profiler.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/parse-tree/profiler.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -364,11 +364,7 @@
 {
   sys::time now;
 
-  // FIXME: is this volatile declaration really needed?
-  // See bug #34210 for additional details.
-  volatile double dnow = now.double_value ();
-
-  return dnow;
+  return now.double_value ();
 }
 
 void
--- a/libinterp/parse-tree/profiler.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/parse-tree/profiler.h	Mon Feb 26 23:30:33 2024 -0500
@@ -38,9 +38,7 @@
 
 OCTAVE_BEGIN_NAMESPACE(octave)
 
-class
-OCTINTERP_API
-profiler
+class OCTINTERP_API profiler
 {
 public:
 
--- a/libinterp/parse-tree/pt-anon-scopes.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/parse-tree/pt-anon-scopes.h	Mon Feb 26 23:30:33 2024 -0500
@@ -36,8 +36,7 @@
 // In possibly nested definitions of anonymous functions, collect
 // their scopes and the symbol records therein.
 
-class
-tree_anon_scopes : public tree_walker
+class tree_anon_scopes : public tree_walker
 {
 public:
 
--- a/libinterp/parse-tree/pt-arg-list.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/parse-tree/pt-arg-list.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -54,9 +54,9 @@
 }
 
 void
-tree_argument_list::append (const element_type& s)
+tree_argument_list::push_back (const element_type& s)
 {
-  base_list<tree_expression *>::append (s);
+  std::list<tree_expression *>::push_back (s);
 
   if (! m_list_includes_magic_tilde && s && s->is_identifier ())
     {
@@ -100,7 +100,7 @@
 string_vector
 tree_argument_list::get_arg_names () const
 {
-  int len = length ();
+  int len = size ();
 
   string_vector retval (len);
 
@@ -145,7 +145,7 @@
   new_list->m_simple_assign_lhs = m_simple_assign_lhs;
 
   for (const tree_expression *elt : *this)
-    new_list->append (elt ? elt->dup (scope) : nullptr);
+    new_list->push_back (elt ? elt->dup (scope) : nullptr);
 
   return new_list;
 }
--- a/libinterp/parse-tree/pt-arg-list.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/parse-tree/pt-arg-list.h	Mon Feb 26 23:30:33 2024 -0500
@@ -35,7 +35,6 @@
 
 #include "str-vec.h"
 
-#include "base-list.h"
 #include "pt-walk.h"
 
 OCTAVE_BEGIN_NAMESPACE(octave)
@@ -47,7 +46,7 @@
 // Argument lists.  Used to hold the list of expressions that are the
 // arguments in a function call or index expression.
 
-class tree_argument_list : public base_list<tree_expression *>
+class tree_argument_list : public std::list<tree_expression *>
 {
 public:
 
@@ -59,7 +58,7 @@
 
   tree_argument_list (tree_expression *t)
     : m_list_includes_magic_tilde (false), m_simple_assign_lhs (false)
-  { append (t); }
+  { push_back (t); }
 
   OCTAVE_DISABLE_COPY_MOVE (tree_argument_list)
 
@@ -83,7 +82,7 @@
     return retval;
   }
 
-  void append (const element_type& s);
+  void push_back (const element_type& s);
 
   void mark_as_simple_assign_lhs () { m_simple_assign_lhs = true; }
 
--- a/libinterp/parse-tree/pt-args-block.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/parse-tree/pt-args-block.h	Mon Feb 26 23:30:33 2024 -0500
@@ -28,14 +28,14 @@
 
 #include "octave-config.h"
 
+#include <list>
+
 #include "pt-arg-list.h"
 #include "pt-cmd.h"
 #include "pt-exp.h"
 #include "pt-id.h"
 #include "pt-walk.h"
 
-#include "base-list.h"
-
 // FIXME: We could maybe re-think the naming of some of these objects
 // before releasing a version that contains these new classes...
 
@@ -153,16 +153,16 @@
 };
 
 class tree_args_block_validation_list
-  : public base_list<tree_arg_validation *>
+  : public std::list<tree_arg_validation *>
 {
 public:
 
   tree_args_block_validation_list () { }
 
-  tree_args_block_validation_list (tree_arg_validation *a) { append (a); }
+  tree_args_block_validation_list (tree_arg_validation *a) { push_back (a); }
 
-  tree_args_block_validation_list (const base_list<tree_arg_validation *>& a)
-    : base_list<tree_arg_validation *> (a)
+  tree_args_block_validation_list (const std::list<tree_arg_validation *>& a)
+    : std::list<tree_arg_validation *> (a)
   { }
 
   OCTAVE_DISABLE_COPY_MOVE (tree_args_block_validation_list)
--- a/libinterp/parse-tree/pt-array-list.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/parse-tree/pt-array-list.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -69,7 +69,7 @@
                             symbol_scope& scope)
 {
   for (const tree_argument_list *elt : array_list)
-    append (elt ? elt->dup (scope) : nullptr);
+    push_back (elt ? elt->dup (scope) : nullptr);
 
   copy_base (*this);
 }
--- a/libinterp/parse-tree/pt-array-list.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/parse-tree/pt-array-list.h	Mon Feb 26 23:30:33 2024 -0500
@@ -28,7 +28,8 @@
 
 #include "octave-config.h"
 
-#include "base-list.h"
+#include <list>
+
 #include "pt-arg-list.h"
 #include "pt-exp.h"
 
@@ -40,20 +41,20 @@
 // Base class for cell arrays and matrices.
 
 class tree_array_list : public tree_expression,
-  public base_list<tree_argument_list *>
+  public std::list<tree_argument_list *>
 {
 public:
 
-  typedef base_list<tree_argument_list *>::iterator iterator;
-  typedef base_list<tree_argument_list *>::const_iterator const_iterator;
+  typedef std::list<tree_argument_list *>::iterator iterator;
+  typedef std::list<tree_argument_list *>::const_iterator const_iterator;
 
 protected:
 
   tree_array_list (tree_argument_list *row = nullptr, int l = -1, int c = -1)
-    : tree_expression (l, c), base_list<tree_argument_list *> ()
+    : tree_expression (l, c), std::list<tree_argument_list *> ()
   {
     if (row)
-      append (row);
+      push_back (row);
   }
 
 public:
--- a/libinterp/parse-tree/pt-cell.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/parse-tree/pt-cell.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -57,7 +57,7 @@
   }, tw.lvalue_list ());
   tw.set_lvalue_list (nullptr);
 
-  octave_idx_type nr = length ();
+  octave_idx_type nr = size ();
   octave_idx_type nc = -1;
 
   Cell val;
--- a/libinterp/parse-tree/pt-check.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/parse-tree/pt-check.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -85,7 +85,7 @@
 
   if (lhs)
     {
-      int len = lhs->length ();
+      int len = lhs->size ();
 
       if (len == 0 || len > 2)
         errmsg ("invalid number of output arguments in for command",
--- a/libinterp/parse-tree/pt-classdef.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/parse-tree/pt-classdef.h	Mon Feb 26 23:30:33 2024 -0500
@@ -36,8 +36,6 @@
 #include "pt-walk.h"
 #include "pt-id.h"
 
-#include "base-list.h"
-
 #include <list>
 
 OCTAVE_BEGIN_NAMESPACE(octave)
@@ -165,16 +163,16 @@
   bool m_neg;
 };
 
-class tree_classdef_attribute_list : public base_list<tree_classdef_attribute *>
+class tree_classdef_attribute_list : public std::list<tree_classdef_attribute *>
 {
 public:
 
   tree_classdef_attribute_list () { }
 
-  tree_classdef_attribute_list (tree_classdef_attribute *a) { append (a); }
+  tree_classdef_attribute_list (tree_classdef_attribute *a) { push_back (a); }
 
-  tree_classdef_attribute_list (const base_list<tree_classdef_attribute *>& a)
-    : base_list<tree_classdef_attribute *> (a)
+  tree_classdef_attribute_list (const std::list<tree_classdef_attribute *>& a)
+    : std::list<tree_classdef_attribute *> (a)
   { }
 
   OCTAVE_DISABLE_COPY_MOVE (tree_classdef_attribute_list)
@@ -212,7 +210,7 @@
 };
 
 class tree_classdef_superclass_list
-  : public base_list<tree_classdef_superclass *>
+  : public std::list<tree_classdef_superclass *>
 {
 public:
 
@@ -220,11 +218,11 @@
 
   tree_classdef_superclass_list (tree_classdef_superclass *sc)
   {
-    append (sc);
+    push_back (sc);
   }
 
-  tree_classdef_superclass_list (const base_list<tree_classdef_superclass *>& a)
-    : base_list<tree_classdef_superclass *> (a)
+  tree_classdef_superclass_list (const std::list<tree_classdef_superclass *>& a)
+    : std::list<tree_classdef_superclass *> (a)
   { }
 
   OCTAVE_DISABLE_COPY_MOVE (tree_classdef_superclass_list)
@@ -319,16 +317,16 @@
   std::string m_doc_string;
 };
 
-class tree_classdef_property_list : public base_list<tree_classdef_property *>
+class tree_classdef_property_list : public std::list<tree_classdef_property *>
 {
 public:
 
   tree_classdef_property_list () { }
 
-  tree_classdef_property_list (tree_classdef_property *p) { append (p); }
+  tree_classdef_property_list (tree_classdef_property *p) { push_back (p); }
 
-  tree_classdef_property_list (const base_list<tree_classdef_property *>& a)
-    : base_list<tree_classdef_property *> (a) { }
+  tree_classdef_property_list (const std::list<tree_classdef_property *>& a)
+    : std::list<tree_classdef_property *> (a) { }
 
   OCTAVE_DISABLE_COPY_MOVE (tree_classdef_property_list)
 
@@ -362,16 +360,16 @@
   }
 };
 
-class tree_classdef_methods_list : public base_list<octave_value>
+class tree_classdef_methods_list : public std::list<octave_value>
 {
 public:
 
   tree_classdef_methods_list () { }
 
-  tree_classdef_methods_list (const octave_value& f) { append (f); }
+  tree_classdef_methods_list (const octave_value& f) { push_back (f); }
 
-  tree_classdef_methods_list (const base_list<octave_value>& a)
-    : base_list<octave_value> (a) { }
+  tree_classdef_methods_list (const std::list<octave_value>& a)
+    : std::list<octave_value> (a) { }
 
   OCTAVE_DISABLE_COPY_MOVE (tree_classdef_methods_list)
 
@@ -442,16 +440,16 @@
   std::string m_doc_string;
 };
 
-class tree_classdef_events_list : public base_list<tree_classdef_event *>
+class tree_classdef_events_list : public std::list<tree_classdef_event *>
 {
 public:
 
   tree_classdef_events_list () { }
 
-  tree_classdef_events_list (tree_classdef_event *e) { append (e); }
+  tree_classdef_events_list (tree_classdef_event *e) { push_back (e); }
 
-  tree_classdef_events_list (const base_list<tree_classdef_event *>& a)
-    : base_list<tree_classdef_event *> (a)
+  tree_classdef_events_list (const std::list<tree_classdef_event *>& a)
+    : std::list<tree_classdef_event *> (a)
   { }
 
   OCTAVE_DISABLE_COPY_MOVE (tree_classdef_events_list)
@@ -527,16 +525,16 @@
   std::string m_doc_string;
 };
 
-class tree_classdef_enum_list : public base_list<tree_classdef_enum *>
+class tree_classdef_enum_list : public std::list<tree_classdef_enum *>
 {
 public:
 
   tree_classdef_enum_list () { }
 
-  tree_classdef_enum_list (tree_classdef_enum *e) { append (e); }
+  tree_classdef_enum_list (tree_classdef_enum *e) { push_back (e); }
 
-  tree_classdef_enum_list (const base_list<tree_classdef_enum *>& a)
-    : base_list<tree_classdef_enum *> (a)
+  tree_classdef_enum_list (const std::list<tree_classdef_enum *>& a)
+    : std::list<tree_classdef_enum *> (a)
   { }
 
   OCTAVE_DISABLE_COPY_MOVE (tree_classdef_enum_list)
@@ -607,24 +605,28 @@
 
   ~tree_classdef_body ();
 
-  void append (tree_classdef_properties_block *pb)
+  tree_classdef_body * append (tree_classdef_properties_block *pb)
   {
     m_properties_lst.push_back (pb);
+    return this;
   }
 
-  void append (tree_classdef_methods_block *mb)
+  tree_classdef_body * append (tree_classdef_methods_block *mb)
   {
     m_methods_lst.push_back (mb);
+    return this;
   }
 
-  void append (tree_classdef_events_block *evb)
+  tree_classdef_body * append (tree_classdef_events_block *evb)
   {
     m_events_lst.push_back (evb);
+    return this;
   }
 
-  void append (tree_classdef_enum_block *enb)
+  tree_classdef_body * append (tree_classdef_enum_block *enb)
   {
     m_enum_lst.push_back (enb);
+    return this;
   }
 
   std::list<tree_classdef_properties_block *> properties_list ()
--- a/libinterp/parse-tree/pt-decl.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/parse-tree/pt-decl.h	Mon Feb 26 23:30:33 2024 -0500
@@ -31,7 +31,6 @@
 #include <list>
 #include <string>
 
-#include "base-list.h"
 #include "oct-lvalue.h"
 #include "pt-cmd.h"
 #include "pt-id.h"
@@ -105,13 +104,13 @@
   tree_expression *m_expr;
 };
 
-class tree_decl_init_list : public base_list<tree_decl_elt *>
+class tree_decl_init_list : public std::list<tree_decl_elt *>
 {
 public:
 
   tree_decl_init_list () { }
 
-  tree_decl_init_list (tree_decl_elt *t) { append (t); }
+  tree_decl_init_list (tree_decl_elt *t) { push_back (t); }
 
   OCTAVE_DISABLE_COPY_MOVE (tree_decl_init_list)
 
--- a/libinterp/parse-tree/pt-eval.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/parse-tree/pt-eval.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -675,7 +675,7 @@
       exiting = false;
 
       evmgr.post_event
-        ([&] (interpreter& interp)
+        ([this, input, &mtx, &incomplete_parse, &evaluation_pending, &cv, &exiting] (interpreter& interp)
          {
            // INTERPRETER THREAD
 
@@ -694,14 +694,14 @@
              }
            catch (const execution_exception& ee)
              {
-               error_system& es = m_interpreter.get_error_system ();
+               error_system& es = interp.get_error_system ();
 
                es.save_exception (ee);
                es.display_exception (ee);
 
-               if (m_interpreter.interactive ())
+               if (interp.interactive ())
                  {
-                   m_interpreter.recover_from_exception ();
+                   interp.recover_from_exception ();
                    m_parser->reset ();
                    evaluation_pending = false;
                    cv.notify_all ();
@@ -727,7 +727,7 @@
       // Wait until evaluation is finished before prompting for input
       // again.
 
-      cv.wait (lock, [&] { return ! evaluation_pending; });
+      cv.wait (lock, [&evaluation_pending] { return ! evaluation_pending; });
 
       if (exiting)
         break;
@@ -1050,7 +1050,7 @@
             {
               tree_statement *stmt = nullptr;
 
-              if (stmt_list->length () == 1
+              if (stmt_list->size () == 1
                   && (stmt = stmt_list->front ())
                   && stmt->is_expression ())
                 {
@@ -1177,7 +1177,7 @@
                         const std::string& try_code,
                         int nargout)
 {
-  unwind_action act ([=] (std::size_t frm)
+  unwind_action act ([this] (std::size_t frm)
                      {
                        m_call_stack.restore_frame (frm);
                      }, m_call_stack.current_frame ());
@@ -1202,7 +1202,7 @@
 {
   octave_value_list retval;
 
-  unwind_action act1 ([=] (std::size_t frm)
+  unwind_action act1 ([this] (std::size_t frm)
                       {
                         m_call_stack.restore_frame (frm);
                       }, m_call_stack.current_frame ());
@@ -1417,6 +1417,14 @@
 
   // Go up to the nearest user code frame.
 
+  tree_evaluator& tw = m_interpreter.get_evaluator ();
+
+  frame.add ([&tw, saved_frame = m_debug_frame] ()
+  {
+    if (! tw.dbstep_flag ())
+      tw.debug_frame (saved_frame);
+  });
+
   m_debug_frame = m_call_stack.dbupdown (0);
 
   // FIXME: probably we just want to print one line, not the
@@ -1429,7 +1437,7 @@
 
   m_debugger_stack.push (dbgr);
 
-  frame.add ([=] ()
+  frame.add ([this] ()
              {
                delete m_debugger_stack.top ();
                m_debugger_stack.pop ();
@@ -1451,6 +1459,13 @@
   m_debug_frame = m_call_stack.dbupdown (n, verbose);
 }
 
+std::string tree_evaluator::inputname (int n, bool ids_only) const
+{
+  std::shared_ptr<stack_frame> frame = m_call_stack.current_user_frame ();
+
+  return frame->inputname (n, ids_only);
+}
+
 Matrix
 tree_evaluator::ignored_fcn_outputs () const
 {
@@ -2010,7 +2025,7 @@
   // by getting a reference to the caller or base stack frame and
   // calling assign on that?
 
-  unwind_action act ([=] (std::size_t frm)
+  unwind_action act ([this] (std::size_t frm)
                      {
                        m_call_stack.restore_frame (frm);
                      }, m_call_stack.current_frame ());
@@ -2187,7 +2202,10 @@
   code->call (*this, 0, octave_value_list ());
 
   if (verbose)
-    octave_stdout << "done." << std::endl;
+    {
+      octave_stdout << "done." << std::endl;
+      octave_stdout.flush ();
+    }
 }
 
 void
@@ -2358,7 +2376,7 @@
 (tree_parameter_list *ret_list, int nargout, const Cell& varargout)
 {
   octave_idx_type vlen = varargout.numel ();
-  int len = ret_list->length ();
+  int len = ret_list->size ();
 
   // Special case.  Will do a shallow copy.
   if (len == 0)
@@ -2539,6 +2557,28 @@
   frm->display_stopped_in_message (os);
 }
 
+void
+tree_evaluator::debug_list (std::ostream& os, int num_lines) const
+{
+  std::shared_ptr<stack_frame> frm = m_call_stack.current_user_frame ();
+
+  if (! (frm->is_user_script_frame () || frm->is_user_fcn_frame ()))
+    error ("dblist: must be inside a user function or script to use dblist\n");
+
+  frm->debug_list (os, num_lines);
+}
+
+void
+tree_evaluator::debug_type (std::ostream& os, int start_line, int end_line) const
+{
+  std::shared_ptr<stack_frame> frm = m_call_stack.current_user_frame ();
+
+  if (! (frm->is_user_script_frame () || frm->is_user_fcn_frame ()))
+    error ("dbtype: must be inside a user function or script to use dbtype\n");
+
+  frm->debug_type (os, start_line, end_line);
+}
+
 octave_user_code *
 tree_evaluator::current_user_code () const
 {
@@ -3202,7 +3242,7 @@
       // A matrix or cell is reshaped to 2 dimensions and iterated by
       // columns.
 
-      dim_vector dv = rhs.dims ().redim (2);
+      const dim_vector& dv = rhs.dims ().redim (2);
 
       octave_idx_type nrows = dv(0);
       octave_idx_type steps = dv(1);
@@ -3211,7 +3251,7 @@
       if (rhs.ndims () > 2)
         arg = arg.reshape (dv);
 
-      if (nrows > 0 && steps > 0)
+      if (steps > 0)
         {
           octave_value_list idx;
           octave_idx_type iidx;
@@ -3615,7 +3655,7 @@
   if (param_list)
     {
       takes_varargs = param_list->takes_varargs ();
-      max_inputs = param_list->length ();
+      max_inputs = param_list->size ();
     }
 
   if (! takes_varargs && nargin > max_inputs)
@@ -3636,7 +3676,7 @@
 
   if (ret_list && ! ret_list->takes_varargs ())
     {
-      int max_outputs = ret_list->length ();
+      int max_outputs = ret_list->size ();
 
       if (nargout > max_outputs)
         {
@@ -3691,7 +3731,7 @@
 
       if (user_function.is_special_expr ())
         {
-          panic_if (cmd_list->length () != 1);
+          panic_if (cmd_list->size () != 1);
 
           tree_statement *stmt = cmd_list->front ();
 
@@ -4784,7 +4824,7 @@
       unwind_protect_var<const std::list<octave_lvalue> *>
         upv (m_lvalue_list, nullptr);
 
-      int len = args->length ();
+      int len = args->size ();
 
       unwind_protect_var<int> upv2 (m_index_position);
       unwind_protect_var<int> upv3 (m_num_indices);
@@ -5124,7 +5164,7 @@
           // evaluate the partial expression that the special "end"
           // token applies to in the calling stack frame.
 
-          unwind_action act ([=] (std::size_t frm)
+          unwind_action act ([this] (std::size_t frm)
                              {
                                m_call_stack.restore_frame (frm);
                              }, m_call_stack.current_frame ());
@@ -5583,4 +5623,116 @@
 %!error echo ("on", "all", "all")
 */
 
+/*
+FIXME: Actually, it probably *isn't* worth fixing, but there is one small
+difference between Octave and Matlab.
+
+If inputname is not called from a function, Matlab walks up the stack until it
+finds some valid code and then works from there.  This could be relevant for
+mex files or anonymous functions.
+
+fcn = @(x) inputname (x);
+a = 1:4;
+arrayfun (fcn, a, 'uniformoutput', false)
+% output is {'fcn', 'a', '', ''}
+*/
+DEFMETHOD (inputname, interp, args, ,
+           doc: /* -*- texinfo -*-
+@deftypefn  {} {@var{namestr} =} inputname (@var{n})
+@deftypefnx {} {@var{namestr} =} inputname (@var{n}, @var{ids_only})
+Return the name of the @var{n}-th argument to the calling function.
+
+If the argument is not a simple variable name, return an empty string.
+Examples which will return @qcode{""} are numbers (@code{5.1}), expressions
+(@code{@var{y}/2}), and cell or structure indexing (@code{@var{c}@{1@}} or
+@code{@var{s}.@var{field}}).
+
+@code{inputname} is only useful within a function.  When used at the command
+line or within a script it always returns an empty string.
+
+By default, return an empty string if the @var{n}-th argument is not a valid
+variable name.  If the optional argument @var{ids_only} is false, return the
+text of the argument even if it is not a valid variable name.  This is an
+Octave extension that allows the programmer to view exactly how the function
+was invoked even when the inputs are complex expressions.
+@seealso{nargin, narginchk}
+@end deftypefn */)
+{
+  int nargin = args.length ();
+
+  if (nargin < 1)
+    print_usage ();
+
+  dim_vector dims = args(0).dims ();
+  if (! dims.all_ones ())
+    error ("inputname: N must be a scalar index");
+
+  int n = args(0).xint_value ("inputname: N must be a scalar index");
+
+  if (n < 1)
+    error ("inputname: N must be a scalar index");
+
+  bool ids_only = true;
+
+  if (nargin == 2)
+    ids_only = args(1).xbool_value ("inputname: IDS_ONLY must be a logical value");
+
+  // Use zero-based indexing internally.
+  return ovl (interp.inputname (n-1, ids_only));
+}
+
+/*
+%!function name = __iname1__ (arg1, arg2, arg3)
+%!  name = inputname (1);
+%!endfunction
+
+%!function name = __iname1_ID__ (arg1, arg2, arg3)
+%!  name = inputname (1, false);
+%!endfunction
+
+%!function name = __iname2__ (arg1, arg2, arg3)
+%!  name = inputname (2);
+%!endfunction
+
+%!function names = __iname3__ (arg1, arg2, arg3)
+%!  names = cell (1, 3);
+%!  for i = 1:3
+%!    names{i} = inputname (i);
+%!  endfor
+%!endfunction
+
+%!test
+%! assert (__iname1__ ('xvar'), "");
+%! xvar = 1;
+%! assert (__iname1__ (xvar), "xvar");
+
+%!test
+%! xvar = 1;  yvar = 2;
+%! assert (__iname2__ (xvar), "");
+%! assert (__iname2__ (xvar, yvar), "yvar");
+
+%!test
+%! xvar = 1;  yvar = 2;
+%! assert (__iname3__ (xvar), {"xvar", "", ""});
+%! assert (__iname3__ (xvar, yvar), {"xvar", "yvar", ""});
+%! assert (__iname3__ (xvar, 3, yvar), {"xvar", "", "yvar"});
+
+## Test numbers, expressions, indexing operations
+%!test
+%! assert (__iname1__ (1.0), "");
+%! x = 1;
+%! assert (__iname1__ (x / 2), "");
+%! assert (__iname1__ (Inf), "");
+
+%!test
+%! assert (__iname1_ID__ (1.0), "1.0");
+%! x = 1;
+%! assert (__iname1_ID__ (x / 2), "x / 2");
+%! assert (__iname1_ID__ (Inf), "Inf");
+
+%!error <Invalid call> inputname ()
+%!error <N must be a scalar> inputname (ones (2,2))
+%!error <N must be a scalar index> inputname (-1)
+*/
+
 OCTAVE_END_NAMESPACE(octave)
--- a/libinterp/parse-tree/pt-eval.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/parse-tree/pt-eval.h	Mon Feb 26 23:30:33 2024 -0500
@@ -346,6 +346,8 @@
 
   Matrix ignored_fcn_outputs () const;
 
+  std::string inputname (int n, bool ids_only = true) const;
+
   octave_value make_fcn_handle (const std::string& nm);
 
   octave_value evaluate (tree_decl_elt *);
@@ -464,6 +466,10 @@
 
   void debug_where (std::ostream& os) const;
 
+  void debug_list (std::ostream& os, int num_lines) const;
+
+  void debug_type (std::ostream& os, int start_line, int end_line) const;
+
   octave_user_code * current_user_code () const;
 
   unwind_protect * curr_fcn_unwind_protect_frame ();
--- a/libinterp/parse-tree/pt-idx.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/parse-tree/pt-idx.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -368,7 +368,7 @@
       if (is_var && is_word_list_cmd ())
         {
           bool maybe_binary_op = false;
-          if ((*p_args) && (*p_args)->length () > 0)
+          if ((*p_args) && (*p_args)->size () > 0)
             {
               // check if first character of first argument might be (the
               // start of) a binary operator
@@ -393,7 +393,7 @@
 
           tree_argument_list *al = *p_args;
 
-          if (al && al->length () > 0)
+          if (al && al->size () > 0)
             {
               unwind_action act ([&tw] (const std::list<octave_lvalue> *lvl)
               {
--- a/libinterp/parse-tree/pt-mat.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/parse-tree/pt-mat.h	Mon Feb 26 23:30:33 2024 -0500
@@ -33,7 +33,6 @@
 class octave_value;
 class octave_value_list;
 
-#include "base-list.h"
 #include "pt-array-list.h"
 #include "pt-exp.h"
 #include "pt-walk.h"
--- a/libinterp/parse-tree/pt-misc.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/parse-tree/pt-misc.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -73,7 +73,7 @@
   new_list->m_marked_for_varargs = m_marked_for_varargs;
 
   for (const tree_decl_elt *elt : *this)
-    new_list->append (elt->dup (scope));
+    new_list->push_back (elt->dup (scope));
 
   return new_list;
 }
--- a/libinterp/parse-tree/pt-misc.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/parse-tree/pt-misc.h	Mon Feb 26 23:30:33 2024 -0500
@@ -28,7 +28,8 @@
 
 #include "octave-config.h"
 
-#include "base-list.h"
+#include <list>
+
 #include "pt-decl.h"
 #include "pt-walk.h"
 
@@ -42,7 +43,7 @@
 // parameters in a function definition.  Elements are identifiers
 // only.
 
-class tree_parameter_list : public base_list<tree_decl_elt *>
+class tree_parameter_list : public std::list<tree_decl_elt *>
 {
 public:
 
@@ -59,13 +60,13 @@
   tree_parameter_list (in_or_out io, tree_decl_elt *t)
     : m_in_or_out (io), m_marked_for_varargs (0)
   {
-    append (t);
+    push_back (t);
   }
 
   tree_parameter_list (in_or_out io, tree_identifier *id)
     : m_in_or_out (io), m_marked_for_varargs (0)
   {
-    append (new tree_decl_elt (id));
+    push_back (new tree_decl_elt (id));
   }
 
   OCTAVE_DISABLE_CONSTRUCT_COPY_MOVE (tree_parameter_list)
--- a/libinterp/parse-tree/pt-pr-code.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/parse-tree/pt-pr-code.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -707,7 +707,7 @@
 
   if (lhs)
     {
-      int len = lhs->length ();
+      int len = lhs->size ();
 
       if (len > 1)
         {
@@ -781,7 +781,7 @@
     }
   else
     {
-      int len = lst.length ();
+      int len = lst.size ();
       if (lst.takes_varargs ())
         len++;
 
@@ -817,7 +817,7 @@
     }
   else
     {
-      int len = lst.length ();
+      int len = lst.size ();
       if (lst.takes_varargs ())
         len++;
 
--- a/libinterp/parse-tree/pt-select.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/parse-tree/pt-select.h	Mon Feb 26 23:30:33 2024 -0500
@@ -28,7 +28,8 @@
 
 #include "octave-config.h"
 
-#include "base-list.h"
+#include <list>
+
 #include "comment-list.h"
 #include "pt-cmd.h"
 #include "pt-walk.h"
@@ -86,13 +87,13 @@
   comment_list *m_lead_comm;
 };
 
-class tree_if_command_list : public base_list<tree_if_clause *>
+class tree_if_command_list : public std::list<tree_if_clause *>
 {
 public:
 
   tree_if_command_list () { }
 
-  tree_if_command_list (tree_if_clause *t) { append (t); }
+  tree_if_command_list (tree_if_clause *t) { push_back (t); }
 
   OCTAVE_DISABLE_COPY_MOVE (tree_if_command_list)
 
@@ -201,13 +202,13 @@
   comment_list *m_lead_comm;
 };
 
-class tree_switch_case_list : public base_list<tree_switch_case *>
+class tree_switch_case_list : public std::list<tree_switch_case *>
 {
 public:
 
   tree_switch_case_list () { }
 
-  tree_switch_case_list (tree_switch_case *t) { append (t); }
+  tree_switch_case_list (tree_switch_case *t) { push_back (t); }
 
   OCTAVE_DISABLE_COPY_MOVE (tree_switch_case_list)
 
--- a/libinterp/parse-tree/pt-spmd.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/parse-tree/pt-spmd.h	Mon Feb 26 23:30:33 2024 -0500
@@ -28,7 +28,6 @@
 
 #include "octave-config.h"
 
-#include "base-list.h"
 #include "pt-cmd.h"
 #include "pt-walk.h"
 
--- a/libinterp/parse-tree/pt-stmt.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/parse-tree/pt-stmt.h	Mon Feb 26 23:30:33 2024 -0500
@@ -31,8 +31,8 @@
 class octave_value_list;
 
 #include <deque>
+#include <list>
 
-#include "base-list.h"
 #include "bp-table.h"
 #include "pt.h"
 #include "pt-walk.h"
@@ -136,7 +136,7 @@
 
 // A list of statements to evaluate.
 
-class tree_statement_list : public base_list<tree_statement *>
+class tree_statement_list : public std::list<tree_statement *>
 {
 public:
 
@@ -146,7 +146,7 @@
 
   tree_statement_list (tree_statement *s)
     : m_function_body (false), m_anon_function_body (false),
-      m_script_body (false) { append (s); }
+      m_script_body (false) { push_back (s); }
 
   OCTAVE_DISABLE_COPY_MOVE (tree_statement_list)
 
--- a/libinterp/parse-tree/pt-tm-const.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/parse-tree/pt-tm-const.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -88,7 +88,7 @@
     {
       octave_quit ();
 
-      dim_vector this_elt_dv = val.dims ();
+      const dim_vector& this_elt_dv = val.dims ();
 
       if (! this_elt_dv.zero_by_zero ())
         {
@@ -111,7 +111,7 @@
 
   m_class_name = get_concat_class (m_class_name, this_elt_class_name);
 
-  dim_vector this_elt_dv = val.dims ();
+  const dim_vector& this_elt_dv = val.dims ();
 
   if (! this_elt_dv.zero_by_zero ())
     {
@@ -207,7 +207,7 @@
     {
       octave_quit ();
 
-      dim_vector this_elt_dv = val.dims ();
+      const dim_vector& this_elt_dv = val.dims ();
 
       if (! this_elt_dv.zero_by_zero ())
         {
@@ -399,7 +399,7 @@
       std::string this_elt_class_name = elt.class_name ();
       m_class_name = get_concat_class (m_class_name, this_elt_class_name);
 
-      dim_vector this_elt_dv = elt.dims ();
+      const dim_vector& this_elt_dv = elt.dims ();
 
       m_all_empty = false;
 
--- a/libinterp/usage.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/libinterp/usage.h	Mon Feb 26 23:30:33 2024 -0500
@@ -34,14 +34,12 @@
 
 // Usage message
 static const char *usage_string =
-  "octave [-HVWdfhiqvx] [--debug] [--doc-cache-file file] [--echo-commands]\n\
-       [--eval CODE] [--exec-path path] [--experimental-terminal-widget]\n\
-       [--gui] [--help] [--image-path path] [--info-file file]\n\
-       [--info-program prog] [--interactive] [--line-editing] [--no-gui]\n\
-       [--no-history] [--no-init-file] [--no-init-path] [--no-line-editing]\n\
-       [--no-site-file] [--no-window-system] [--norc] [-p path]\n\
-       [--path path] [--persist] [--server] [--silent] [--traditional]\n\
-       [--verbose] [--version] [file]";
+  "octave [-GHVWefghiqvx] [--echo-commands] [--eval CODE]\n\
+       [--experimental-terminal-widget] [--gui] [--help] [--interactive]\n\
+       [--line-editing] [--no-gui] [--no-history] [--no-init-all]\n\
+       [--no-init-path] [--no-init-site] [--no-init-user]\n\
+       [--no-line-editing] [--no-window-system] [--path path] [--persist]\n\
+       [--quiet] [--server] [--traditional] [--version] [file]";
 
 // Usage message with extra help.
 
@@ -54,37 +52,34 @@
 Usage: octave [options] [FILE]\n\
 \n\
 Options:\n\
-\n\
-  --built-in-docstrings-file FILE Use docs for built-ins from FILE.\n\
-  --debug, -d             Enter parser debugging mode.\n\
-  --doc-cache-file FILE   Use doc cache file FILE.\n\
+\n"
+// FIXME: Disabled debug option for parser 2023-12-29.
+// Uncomment and restore code if Octave adds capability to
+// immediately enter debug mode for a script.
+//--debug, -d             Enter debugging mode.\n\ //
+"\
   --echo-commands, -x     Echo commands as they are executed.\n\
-  --eval CODE             Evaluate CODE.  Exit when done unless --persist.\n\
-  --exec-path PATH        Set path for executing subprograms.\n\
+  --eval, -e CODE         Evaluate CODE.  Exit when done unless --persist.\n\
   --experimental-terminal-widget\n\
                           Use new experimental terminal widget in the GUI.\n\
-  --gui                   Start the graphical user interface.\n\
+  --gui, -g               Start the graphical user interface.\n\
   --help, -h,             Print short help message and exit.\n\
-  --image-path PATH       Add PATH to head of image search path.\n\
-  --info-file FILE        Use top-level info file FILE.\n\
-  --info-program PROGRAM  Use PROGRAM for reading info files.\n\
   --interactive, -i       Force interactive behavior.\n\
   --line-editing          Force readline use for command-line editing.\n\
-  --no-gui                Disable the graphical user interface.\n\
+  --no-gui, -G            Disable the graphical user interface.\n\
   --no-history, -H        Don't save commands to the history list\n\
-  --no-init-file          Don't read the ~/.octaverc or .octaverc files.\n\
+  --no-init-all, --norc, -f\n\
+                          Don't read any initialization files.\n\
   --no-init-path          Don't initialize function search path.\n\
+  --no-init-site          Don't read the site-wide octaverc files.\n\
+  --no-init-user          Don't read the ~/.octaverc or .octaverc files.\n\
   --no-line-editing       Don't use readline for command-line editing.\n\
-  --no-site-file          Don't read the site-wide octaverc file.\n\
   --no-window-system, -W  Disable window system, including graphics.\n\
-  --norc, -f              Don't read any initialization files.\n\
   --path PATH, -p PATH    Add PATH to head of function search path.\n\
   --persist               Go interactive after --eval or reading from FILE.\n\
   --server                Enter server mode at startup.\n\
-  --silent, --quiet, -q   Don't print message at startup.\n\
-  --texi-macros-file FILE Use Texinfo macros in FILE for makeinfo command.\n\
+  --quiet, --silent, -q   Don't print message at startup.\n\
   --traditional           Set variables for closer MATLAB compatibility.\n\
-  --verbose, -V           Enable verbose output in some cases.\n\
   --version, -v           Print version number and exit.\n\
 \n\
   FILE                    Execute commands from FILE.  Exit when done\n\
--- a/liboctave/array/Array-base.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/Array-base.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -210,6 +210,13 @@
 }
 
 template <typename T, typename Alloc>
+octave_idx_type
+Array<T, Alloc>::compute_index_unchecked (const Array<octave_idx_type>& ra_idx) const
+{
+  return m_dimensions.compute_index (ra_idx.data (), ra_idx.numel ());
+}
+
+template <typename T, typename Alloc>
 T&
 Array<T, Alloc>::checkelem (octave_idx_type n)
 {
@@ -508,7 +515,7 @@
   if (numel () > 0)
     {
       rec_permute_helper rh (dv, perm_vec);
-      rh.permute (data (), retval.fortran_vec ());
+      rh.permute (data (), retval.rwdata ());
     }
 
   return retval;
@@ -749,7 +756,7 @@
           // Indexed object and index are both vectors.  Set result size
           // and orientation as above.
 
-          dim_vector dv = dims ();
+          const dim_vector& dv = dims ();
 
           result_dims = dv.make_nd_vector (idx_len);
         }
@@ -765,7 +772,7 @@
           retval = Array<T, Alloc> (result_dims);
 
           if (idx_len != 0)
-            i.index (data (), n, retval.fortran_vec ());
+            i.index (data (), n, retval.rwdata ());
         }
     }
 
@@ -777,7 +784,7 @@
 Array<T, Alloc>::index (const octave::idx_vector& i, const octave::idx_vector& j) const
 {
   // Get dimensions, allowing Fortran indexing in the 2nd dim.
-  dim_vector dv = m_dimensions.redim (2);
+  const dim_vector& dv = m_dimensions.redim (2);
   octave_idx_type r = dv(0);
   octave_idx_type c = dv(1);
   Array<T, Alloc> retval;
@@ -811,7 +818,7 @@
               // Don't use resize to avoid useless initialization for POD types.
               retval = Array<T, Alloc> (dim_vector (il, jl));
 
-              ii.index (data (), n, retval.fortran_vec ());
+              ii.index (data (), n, retval.rwdata ());
             }
         }
       else
@@ -820,7 +827,7 @@
           retval = Array<T, Alloc> (dim_vector (il, jl));
 
           const T *src = data ();
-          T *dest = retval.fortran_vec ();
+          T *dest = retval.rwdata ();
 
           for (octave_idx_type k = 0; k < jl; k++)
             dest += i.index (src + r * j.xelem (k), r, dest);
@@ -884,7 +891,7 @@
               retval = Array<T, Alloc> (rdv);
 
               // Do it.
-              rh.index (data (), retval.fortran_vec ());
+              rh.index (data (), retval.rwdata ());
             }
         }
     }
@@ -951,10 +958,10 @@
         }
       else
         {
-          static const octave_idx_type max_stack_chunk = 1024;
-          octave_idx_type nn = n + std::min (nx, max_stack_chunk);
+          static const octave_idx_type MAX_STACK_CHUNK = 1024;
+          octave_idx_type nn = n + std::min (nx, MAX_STACK_CHUNK);
           Array<T, Alloc> tmp (Array<T, Alloc> (dim_vector (nn, 1)), dv, 0, n);
-          T *dest = tmp.fortran_vec ();
+          T *dest = tmp.rwdata ();
 
           std::copy_n (data (), nx, dest);
           dest[nx] = rfv;
@@ -965,7 +972,7 @@
   else if (n != nx)
     {
       Array<T, Alloc> tmp = Array<T, Alloc> (dv);
-      T *dest = tmp.fortran_vec ();
+      T *dest = tmp.rwdata ();
 
       octave_idx_type n0 = std::min (n, nx);
       octave_idx_type n1 = n - n0;
@@ -988,7 +995,7 @@
   if (r != rx || c != cx)
     {
       Array<T, Alloc> tmp = Array<T, Alloc> (dim_vector (r, c));
-      T *dest = tmp.fortran_vec ();
+      T *dest = tmp.rwdata ();
 
       octave_idx_type r0 = std::min (r, rx);
       octave_idx_type r1 = r - r0;
@@ -1035,7 +1042,7 @@
       rec_resize_helper rh (dv, m_dimensions.redim (dvl));
 
       // Do it.
-      rh.resize_fill (data (), tmp.fortran_vec (), rfv);
+      rh.resize_fill (data (), tmp.rwdata (), rfv);
       *this = tmp;
     }
 }
@@ -1072,7 +1079,7 @@
   Array<T, Alloc> tmp = *this;
   if (resize_ok)
     {
-      dim_vector dv = m_dimensions.redim (2);
+      const dim_vector& dv = m_dimensions.redim (2);
       octave_idx_type r = dv(0);
       octave_idx_type c = dv(1);
       octave_idx_type rx = i.extent (r);
@@ -1101,7 +1108,7 @@
   if (resize_ok)
     {
       int ial = ia.numel ();
-      dim_vector dv = m_dimensions.redim (ial);
+      const dim_vector& dv = m_dimensions.redim (ial);
       dim_vector dvx = dim_vector::alloc (ial);
       for (int i = 0; i < ial; i++)
         dvx(i) = ia(i).extent (dv(i));
@@ -1124,6 +1131,13 @@
 }
 
 template <typename T, typename Alloc>
+Array<T, Alloc>
+Array<T, Alloc>::index (const Array<octave::idx_vector>& ia, bool resize_ok) const
+{
+  return index (ia, resize_ok, resize_fill_value ());
+}
+
+template <typename T, typename Alloc>
 void
 Array<T, Alloc>::assign (const octave::idx_vector& i, const Array<T, Alloc>& rhs, const T& rfv)
 {
@@ -1163,9 +1177,9 @@
   else
     {
       if (rhl == 1)
-        i.fill (rhs(0), n, fortran_vec ());
+        i.fill (rhs(0), n, rwdata ());
       else
-        i.assign (rhs.data (), n, fortran_vec ());
+        i.assign (rhs.data (), n, rwdata ());
     }
 }
 
@@ -1243,7 +1257,7 @@
           octave::idx_vector ii (i);
 
           const T *src = rhs.data ();
-          T *dest = fortran_vec ();
+          T *dest = rwdata ();
 
           // Try reduction first.
           if (ii.maybe_reduce (r, j, c))
@@ -1367,9 +1381,9 @@
 
               // Do it.
               if (isfill)
-                rh.fill (rhs(0), fortran_vec ());
+                rh.fill (rhs(0), rwdata ());
               else
-                rh.assign (rhs.data (), fortran_vec ());
+                rh.assign (rhs.data (), rwdata ());
             }
         }
       else
@@ -1394,6 +1408,14 @@
     }
 }
 
+template <typename T, typename Alloc>
+void
+Array<T, Alloc>::assign (const Array<octave::idx_vector>& ia,
+                         const Array<T, Alloc>& rhs)
+{
+  assign (ia, rhs, resize_fill_value ());
+}
+
 /*
 %!shared a
 %! a = [1 2; 3 4];
@@ -1429,7 +1451,7 @@
           octave_idx_type m = n + l - u;
           Array<T, Alloc> tmp (dim_vector (col_vec ? m : 1, ! col_vec ? m : 1));
           const T *src = data ();
-          T *dest = tmp.fortran_vec ();
+          T *dest = tmp.rwdata ();
           std::copy_n (src, l, dest);
           std::copy (src + u, src + n, dest + l);
           *this = tmp;
@@ -1482,7 +1504,7 @@
           // Special case deleting a contiguous range.
           Array<T, Alloc> tmp = Array<T, Alloc> (rdv);
           const T *src = data ();
-          T *dest = tmp.fortran_vec ();
+          T *dest = tmp.rwdata ();
           l *= dl; u *= dl; n *= dl;
           for (octave_idx_type k = 0; k < du; k++)
             {
@@ -1633,7 +1655,7 @@
 
       // Reuse the implementation used for permuting.
 
-      rec_permute_helper::blk_trans (data (), result.fortran_vec (), nr, nc);
+      rec_permute_helper::blk_trans (data (), result.rwdata (), nr, nc);
 
       return result;
     }
@@ -1761,7 +1783,7 @@
 
 template <typename T, typename Alloc>
 T *
-Array<T, Alloc>::fortran_vec ()
+Array<T, Alloc>::rwdata ()
 {
   make_unique ();
 
@@ -1800,7 +1822,7 @@
   for (int i = 0; i < dim; i++)
     stride *= dv(i);
 
-  T *v = m.fortran_vec ();
+  T *v = m.rwdata ();
   const T *ov = data ();
 
   octave_sort<T> lsort;
@@ -1898,7 +1920,7 @@
 
   Array<T, Alloc> m (dims ());
 
-  dim_vector dv = m.dims ();
+  const dim_vector& dv = m.dims ();
 
   if (m.numel () < 1)
     {
@@ -1913,13 +1935,13 @@
   for (int i = 0; i < dim; i++)
     stride *= dv(i);
 
-  T *v = m.fortran_vec ();
+  T *v = m.rwdata ();
   const T *ov = data ();
 
   octave_sort<T> lsort;
 
   sidx = Array<octave_idx_type> (dv);
-  octave_idx_type *vi = sidx.fortran_vec ();
+  octave_idx_type *vi = sidx.rwdata ();
 
   if (mode != UNSORTED)
     lsort.set_compare (mode);
@@ -2087,7 +2109,7 @@
 
   idx = Array<octave_idx_type> (dim_vector (r, 1));
 
-  lsort.sort_rows (data (), idx.fortran_vec (), r, c);
+  lsort.sort_rows (data (), idx.rwdata (), r, c);
 
   return idx;
 }
@@ -2196,11 +2218,11 @@
 
   // This determines the split ratio between the O(M*log2(N)) and O(M+N)
   // algorithms.
-  static const double ratio = 1.0;
+  static const double RATIO = 1.0;
   sortmode vmode = UNSORTED;
 
   // Attempt the O(M+N) algorithm if M is large enough.
-  if (nval > ratio * n / octave::math::log2 (n + 1.0))
+  if (nval > RATIO * n / octave::math::log2 (n + 1.0))
     {
       vmode = values.issorted ();
       // The table must not contain a NaN.
@@ -2211,9 +2233,9 @@
 
   if (vmode != UNSORTED)
     lsort.lookup_sorted (data (), n, values.data (), nval,
-                         idx.fortran_vec (), vmode != mode);
+                         idx.rwdata (), vmode != mode);
   else
-    lsort.lookup (data (), n, values.data (), nval, idx.fortran_vec ());
+    lsort.lookup (data (), n, values.data (), nval, idx.rwdata ());
 
   return idx;
 }
@@ -2250,7 +2272,7 @@
         cnt += src[i] != zero;
 
       retval.clear (cnt, 1);
-      octave_idx_type *dest = retval.fortran_vec ();
+      octave_idx_type *dest = retval.rwdata ();
       for (octave_idx_type i = 0; i < nel; i++)
         if (src[i] != zero) *dest++ = i;
     }
@@ -2275,7 +2297,7 @@
             }
           if (k < n)
             retval.resize2 (k, 1);
-          octave_idx_type *rdata = retval.fortran_vec ();
+          octave_idx_type *rdata = retval.rwdata ();
           std::reverse (rdata, rdata + k);
         }
       else
@@ -2400,7 +2422,7 @@
   for (int i = 0; i < dim; i++)
     stride *= dv(i);
 
-  T *v = m.fortran_vec ();
+  T *v = m.rwdata ();
   const T *ov = data ();
 
   OCTAVE_LOCAL_BUFFER (T, buf, ns);
@@ -2540,7 +2562,7 @@
 Array<T, Alloc>
 Array<T, Alloc>::diag (octave_idx_type k) const
 {
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
   octave_idx_type nd = dv.ndims ();
   Array<T, Alloc> d;
 
@@ -2685,7 +2707,7 @@
     {
       for (octave_idx_type i = 0; i < n; i++)
         {
-          dim_vector dv = array_list[i].dims ();
+          const dim_vector& dv = array_list[i].dims ();
 
           if (dv.zero_by_zero ())
             istart++;
@@ -2791,7 +2813,7 @@
 std::ostream&
 operator << (std::ostream& os, const Array<T, Alloc>& a)
 {
-  dim_vector a_dims = a.dims ();
+  const dim_vector& a_dims = a.dims ();
 
   int n_dims = a_dims.ndims ();
 
--- a/liboctave/array/Array-util.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/Array-util.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -574,16 +574,10 @@
           // Initialized inside the loop so that each call to
           // idx_vector::loop operates from the beginning of IDX_VEC.
 
-          octave_idx_type *idx_vec = idx.fortran_vec ();
+          octave_idx_type *idx_vec = idx.rwdata ();
 
           if (i < len - 1)
-            {
-              octave_idx_type n = dvx(i);
-
-              idxa(i).loop (clen, [=, &idx_vec] (octave_idx_type k) {
-                (*idx_vec++ *= n) += k;
-              });
-            }
+            idxa(i).loop (clen, [n = dvx(i), &idx_vec] (octave_idx_type k) { (*idx_vec++ *= n) += k; });
           else
             idxa(i).copy_data (idx_vec);
         }
@@ -617,7 +611,7 @@
     {
       OCTAVE_LOCAL_BUFFER (Array<octave_idx_type>, rdata, n);
 
-      dim_vector odv = idx.orig_dimensions ();
+      const dim_vector& odv = idx.orig_dimensions ();
       for (octave_idx_type j = 0; j < n; j++)
         rdata[j] = Array<octave_idx_type> (odv);
 
--- a/liboctave/array/Array.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/Array.h	Mon Feb 26 23:30:33 2024 -0500
@@ -123,10 +123,11 @@
 //!   - string_vector: Array<std::string> with 1 column
 //!   - Cell: Array<octave_value>, equivalent to an Octave cell.
 
+// forward declare template with visibility attributes
+template <typename T, typename Alloc> class OCTARRAY_API Array;
+
 template <typename T, typename Alloc>
-class
-OCTARRAY_TEMPLATE_API
-Array
+class OCTARRAY_TEMPLATE_API Array
 {
 protected:
 
@@ -157,8 +158,8 @@
       std::copy_n (d, len, m_data);
     }
 
-    // Use new instead of setting data to 0 so that fortran_vec and
-    // data always return valid addresses, even for zero-size arrays.
+    // Use new instead of setting data to 0 so that rwdata() and data()
+    // always return valid addresses, even for zero-size arrays.
 
     ArrayRep ()
       : Alloc (), m_data (allocate (0)), m_len (0), m_count (1) { }
@@ -513,11 +514,8 @@
   OCTARRAY_API octave_idx_type
   compute_index (const Array<octave_idx_type>& ra_idx) const;
 
-  OCTARRAY_OVERRIDABLE_FUNC_API octave_idx_type
-  compute_index_unchecked (const Array<octave_idx_type>& ra_idx) const
-  {
-    return m_dimensions.compute_index (ra_idx.data (), ra_idx.numel ());
-  }
+  OCTARRAY_API octave_idx_type
+  compute_index_unchecked (const Array<octave_idx_type>& ra_idx) const;
 
   // No checking, even for multiple references, ever.
 
@@ -660,10 +658,17 @@
   OCTARRAY_API Array<T, Alloc> transpose () const;
   OCTARRAY_API Array<T, Alloc> hermitian (T (*fcn) (const T&) = nullptr) const;
 
+  // Use for direct read-only access to Array data.
   OCTARRAY_OVERRIDABLE_FUNC_API const T * data () const
   { return m_slice_data; }
 
-  OCTARRAY_API T * fortran_vec ();
+  // Use for direct read-write access to Array data.
+  OCTARRAY_API T * rwdata ();
+
+  // Alias for direct read-write access to Array data.
+  // FIXME: It is recommended to use rwdata() in future code for clarity.
+  inline T * fortran_vec ()
+  { return rwdata (); }
 
   OCTARRAY_OVERRIDABLE_FUNC_API bool is_shared () const
   { return m_rep->m_count > 1; }
@@ -726,11 +731,8 @@
   OCTARRAY_API Array<T, Alloc>
   index (const Array<octave::idx_vector>& ia, bool resize_ok,
          const T& rfv) const;
-  OCTARRAY_OVERRIDABLE_FUNC_API Array<T, Alloc>
-  index (const Array<octave::idx_vector>& ia, bool resize_ok) const
-  {
-    return index (ia, resize_ok, resize_fill_value ());
-  }
+  OCTARRAY_API Array<T, Alloc>
+  index (const Array<octave::idx_vector>& ia, bool resize_ok) const;
   //@}
 
   //@{
@@ -755,11 +757,8 @@
 
   OCTARRAY_API void
   assign (const Array<octave::idx_vector>& ia, const Array<T, Alloc>& rhs, const T& rfv);
-  OCTARRAY_OVERRIDABLE_FUNC_API void
-  assign (const Array<octave::idx_vector>& ia, const Array<T, Alloc>& rhs)
-  {
-    assign (ia, rhs, resize_fill_value ());
-  }
+  OCTARRAY_API void
+  assign (const Array<octave::idx_vector>& ia, const Array<T, Alloc>& rhs);
   //@}
 
   //@{
@@ -863,7 +862,7 @@
     const T *m = data ();
 
     Array<U, A> result (dims ());
-    U *p = result.fortran_vec ();
+    U *p = result.rwdata ();
 
     octave_idx_type i;
     for (i = 0; i < len - 3; i += 4)
--- a/liboctave/array/CColVector.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/CColVector.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -262,7 +262,7 @@
   if (len == 0)
     return *this;
 
-  Complex *d = fortran_vec (); // Ensures only one reference to my privates!
+  Complex *d = rwdata (); // Ensures only one reference to my privates!
 
   mx_inline_add2 (len, d, a.data ());
   return *this;
@@ -281,7 +281,7 @@
   if (len == 0)
     return *this;
 
-  Complex *d = fortran_vec (); // Ensures only one reference to my privates!
+  Complex *d = rwdata (); // Ensures only one reference to my privates!
 
   mx_inline_sub2 (len, d, a.data ());
   return *this;
@@ -317,7 +317,7 @@
         retval.fill (0.0);
       else
         {
-          Complex *y = retval.fortran_vec ();
+          Complex *y = retval.rwdata ();
 
           F77_XFCN (zgemv, ZGEMV, (F77_CONST_CHAR_ARG2 ("N", 1),
                                    nr, nc, 1.0,
--- a/liboctave/array/CColVector.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/CColVector.h	Mon Feb 26 23:30:33 2024 -0500
@@ -31,9 +31,7 @@
 #include "MArray.h"
 #include "mx-defs.h"
 
-class
-OCTAVE_API
-ComplexColumnVector : public MArray<Complex>
+class OCTAVE_API ComplexColumnVector : public MArray<Complex>
 {
   friend class ComplexMatrix;
   friend class ComplexRowVector;
--- a/liboctave/array/CDiagMatrix.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/CDiagMatrix.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -345,7 +345,7 @@
   else if (z_count > 0)
     {
       info = -1;
-      element_type *data = retval.fortran_vec ();
+      element_type *data = retval.rwdata ();
       std::fill (data, data + len, octave::numeric_limits<double>::Inf ());
     }
 
@@ -396,7 +396,7 @@
   if (r == 0 || c == 0)
     return *this;
 
-  Complex *d = fortran_vec (); // Ensures only one reference to my privates!
+  Complex *d = rwdata (); // Ensures only one reference to my privates!
 
   mx_inline_add2 (length (), d, a.data ());
   return *this;
--- a/liboctave/array/CDiagMatrix.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/CDiagMatrix.h	Mon Feb 26 23:30:33 2024 -0500
@@ -36,9 +36,7 @@
 #include "dRowVector.h"
 #include "mx-defs.h"
 
-class
-OCTAVE_API
-ComplexDiagMatrix : public MDiagArray2<Complex>
+class OCTAVE_API ComplexDiagMatrix : public MDiagArray2<Complex>
 {
 public:
 
--- a/liboctave/array/CMatrix.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/CMatrix.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -739,7 +739,7 @@
   octave_idx_type info;
   double rcon;
   MatrixType mattype (*this);
-  return inverse (mattype, info, rcon, 0, 0);
+  return inverse (mattype, info, rcon, false, false);
 }
 
 ComplexMatrix
@@ -747,7 +747,7 @@
 {
   double rcon;
   MatrixType mattype (*this);
-  return inverse (mattype, info, rcon, 0, 0);
+  return inverse (mattype, info, rcon, false, false);
 }
 
 ComplexMatrix
@@ -763,14 +763,14 @@
 {
   octave_idx_type info;
   double rcon;
-  return inverse (mattype, info, rcon, 0, 0);
+  return inverse (mattype, info, rcon, false, false);
 }
 
 ComplexMatrix
 ComplexMatrix::inverse (MatrixType& mattype, octave_idx_type& info) const
 {
   double rcon;
-  return inverse (mattype, info, rcon, 0, 0);
+  return inverse (mattype, info, rcon, false, false);
 }
 
 ComplexMatrix
@@ -789,7 +789,7 @@
   char uplo = (typ == MatrixType::Lower ? 'L' : 'U');
   char udiag = 'N';
   retval = *this;
-  Complex *tmp_data = retval.fortran_vec ();
+  Complex *tmp_data = retval.rwdata ();
 
   F77_INT tmp_info = 0;
 
@@ -845,10 +845,10 @@
     (*current_liboctave_error_handler) ("inverse requires square matrix");
 
   Array<F77_INT> ipvt (dim_vector (nr, 1));
-  F77_INT *pipvt = ipvt.fortran_vec ();
+  F77_INT *pipvt = ipvt.rwdata ();
 
   retval = *this;
-  Complex *tmp_data = retval.fortran_vec ();
+  Complex *tmp_data = retval.rwdata ();
 
   Array<Complex> z (dim_vector (1, 1));
   F77_INT lwork = -1;
@@ -858,13 +858,13 @@
   F77_INT tmp_info = 0;
 
   F77_XFCN (zgetri, ZGETRI, (nc, F77_DBLE_CMPLX_ARG (tmp_data), nr, pipvt,
-                             F77_DBLE_CMPLX_ARG (z.fortran_vec ()), lwork,
+                             F77_DBLE_CMPLX_ARG (z.rwdata ()), lwork,
                              tmp_info));
 
   lwork = static_cast<F77_INT> (std::real (z(0)));
   lwork = (lwork < 2 * nc ? 2 * nc : lwork);
   z.resize (dim_vector (lwork, 1));
-  Complex *pz = z.fortran_vec ();
+  Complex *pz = z.rwdata ();
 
   info = 0;
   tmp_info = 0;
@@ -899,7 +899,7 @@
           // Now calculate the condition number for non-singular matrix.
           char job = '1';
           Array<double> rz (dim_vector (2 * nc, 1));
-          double *prz = rz.fortran_vec ();
+          double *prz = rz.rwdata ();
           F77_XFCN (zgecon, ZGECON, (F77_CONST_CHAR_ARG2 (&job, 1),
                                      nc, F77_DBLE_CMPLX_ARG (tmp_data), nr,
                                      anorm, rcon, F77_DBLE_CMPLX_ARG (pz), prz,
@@ -1063,7 +1063,7 @@
     }
 
   const Complex *in (data ());
-  Complex *out (retval.fortran_vec ());
+  Complex *out (retval.rwdata ());
 
   octave::fftw::fft (in, out, npts, nsamples);
 
@@ -1092,7 +1092,7 @@
     }
 
   const Complex *in (data ());
-  Complex *out (retval.fortran_vec ());
+  Complex *out (retval.rwdata ());
 
   octave::fftw::ifft (in, out, npts, nsamples);
 
@@ -1106,7 +1106,7 @@
 
   ComplexMatrix retval (rows (), cols ());
   const Complex *in (data ());
-  Complex *out (retval.fortran_vec ());
+  Complex *out (retval.rwdata ());
 
   octave::fftw::fftNd (in, out, 2, dv);
 
@@ -1120,7 +1120,7 @@
 
   ComplexMatrix retval (rows (), cols ());
   const Complex *in (data ());
-  Complex *out (retval.fortran_vec ());
+  Complex *out (retval.rwdata ());
 
   octave::fftw::ifftNd (in, out, 2, dv);
 
@@ -1206,7 +1206,7 @@
   if (nr != nc)
     (*current_liboctave_error_handler) ("matrix must be square");
 
-  volatile int typ = mattype.type ();
+  int typ = mattype.type ();
 
   // Even though the matrix is marked as singular (Rectangular), we may
   // still get a useful number from the LU factorization, because it always
@@ -1225,7 +1225,7 @@
   else if (typ == MatrixType::Hermitian)
     {
       ComplexMatrix atmp = *this;
-      Complex *tmp_data = atmp.fortran_vec ();
+      Complex *tmp_data = atmp.rwdata ();
 
       double anorm;
       if (calc_cond)
@@ -1251,9 +1251,9 @@
           if (calc_cond)
             {
               Array<Complex> z (dim_vector (2 * nc, 1));
-              Complex *pz = z.fortran_vec ();
+              Complex *pz = z.rwdata ();
               Array<double> rz (dim_vector (nc, 1));
-              double *prz = rz.fortran_vec ();
+              double *prz = rz.rwdata ();
 
               F77_XFCN (zpocon, ZPOCON, (F77_CONST_CHAR_ARG2 (&job, 1),
                                          nr, F77_DBLE_CMPLX_ARG (tmp_data), nr, anorm,
@@ -1278,10 +1278,10 @@
   if (typ == MatrixType::Full)
     {
       Array<F77_INT> ipvt (dim_vector (nr, 1));
-      F77_INT *pipvt = ipvt.fortran_vec ();
+      F77_INT *pipvt = ipvt.rwdata ();
 
       ComplexMatrix atmp = *this;
-      Complex *tmp_data = atmp.fortran_vec ();
+      Complex *tmp_data = atmp.rwdata ();
 
       info = 0;
 
@@ -1315,9 +1315,9 @@
               // Now calc the condition number for non-singular matrix.
               char job = '1';
               Array<Complex> z (dim_vector (2 * nc, 1));
-              Complex *pz = z.fortran_vec ();
+              Complex *pz = z.rwdata ();
               Array<double> rz (dim_vector (2 * nc, 1));
-              double *prz = rz.fortran_vec ();
+              double *prz = rz.rwdata ();
 
               F77_XFCN (zgecon, ZGECON, (F77_CONST_CHAR_ARG2 (&job, 1),
                                          nc, F77_DBLE_CMPLX_ARG (tmp_data), nr, anorm,
@@ -1367,7 +1367,7 @@
     rcon = octave::numeric_limits<double>::Inf ();
   else
     {
-      volatile int typ = mattype.type ();
+      int typ = mattype.type ();
 
       if (typ == MatrixType::Unknown)
         typ = mattype.type (*this);
@@ -1382,9 +1382,9 @@
           char dia = 'N';
 
           Array<Complex> z (dim_vector (2 * nc, 1));
-          Complex *pz = z.fortran_vec ();
+          Complex *pz = z.rwdata ();
           Array<double> rz (dim_vector (nc, 1));
-          double *prz = rz.fortran_vec ();
+          double *prz = rz.rwdata ();
 
           F77_XFCN (ztrcon, ZTRCON, (F77_CONST_CHAR_ARG2 (&norm, 1),
                                      F77_CONST_CHAR_ARG2 (&uplo, 1),
@@ -1410,9 +1410,9 @@
           char dia = 'N';
 
           Array<Complex> z (dim_vector (2 * nc, 1));
-          Complex *pz = z.fortran_vec ();
+          Complex *pz = z.rwdata ();
           Array<double> rz (dim_vector (nc, 1));
-          double *prz = rz.fortran_vec ();
+          double *prz = rz.rwdata ();
 
           F77_XFCN (ztrcon, ZTRCON, (F77_CONST_CHAR_ARG2 (&norm, 1),
                                      F77_CONST_CHAR_ARG2 (&uplo, 1),
@@ -1439,7 +1439,7 @@
               char job = 'L';
 
               ComplexMatrix atmp = *this;
-              Complex *tmp_data = atmp.fortran_vec ();
+              Complex *tmp_data = atmp.rwdata ();
 
               anorm = norm1 (atmp);
 
@@ -1457,9 +1457,9 @@
               else
                 {
                   Array<Complex> z (dim_vector (2 * nc, 1));
-                  Complex *pz = z.fortran_vec ();
+                  Complex *pz = z.rwdata ();
                   Array<double> rz (dim_vector (nc, 1));
-                  double *prz = rz.fortran_vec ();
+                  double *prz = rz.rwdata ();
 
                   F77_XFCN (zpocon, ZPOCON, (F77_CONST_CHAR_ARG2 (&job, 1),
                                              nr, F77_DBLE_CMPLX_ARG (tmp_data), nr, anorm,
@@ -1476,18 +1476,18 @@
               F77_INT info = 0;
 
               ComplexMatrix atmp = *this;
-              Complex *tmp_data = atmp.fortran_vec ();
+              Complex *tmp_data = atmp.rwdata ();
 
               Array<F77_INT> ipvt (dim_vector (nr, 1));
-              F77_INT *pipvt = ipvt.fortran_vec ();
+              F77_INT *pipvt = ipvt.rwdata ();
 
               if (anorm < 0.0)
                 anorm = norm1 (atmp);
 
               Array<Complex> z (dim_vector (2 * nc, 1));
-              Complex *pz = z.fortran_vec ();
+              Complex *pz = z.rwdata ();
               Array<double> rz (dim_vector (2 * nc, 1));
-              double *prz = rz.fortran_vec ();
+              double *prz = rz.rwdata ();
 
               // Work around bug #45577, LAPACK crashes Octave if norm is NaN
               if (octave::math::isnan (anorm))
@@ -1544,7 +1544,7 @@
     retval = ComplexMatrix (nc, b_nc, Complex (0.0, 0.0));
   else
     {
-      volatile int typ = mattype.type ();
+      int typ = mattype.type ();
 
       if (typ != MatrixType::Permuted_Upper && typ != MatrixType::Upper)
         (*current_liboctave_error_handler) ("incorrect matrix type");
@@ -1559,7 +1559,7 @@
       const Complex *tmp_data = data ();
 
       retval = b;
-      Complex *result = retval.fortran_vec ();
+      Complex *result = retval.rwdata ();
 
       char uplo = 'U';
       char trans = get_blas_char (transt);
@@ -1585,9 +1585,9 @@
           dia = 'N';
 
           Array<Complex> z (dim_vector (2 * nc, 1));
-          Complex *pz = z.fortran_vec ();
+          Complex *pz = z.rwdata ();
           Array<double> rz (dim_vector (nc, 1));
-          double *prz = rz.fortran_vec ();
+          double *prz = rz.rwdata ();
 
           F77_XFCN (ztrcon, ZTRCON, (F77_CONST_CHAR_ARG2 (&norm, 1),
                                      F77_CONST_CHAR_ARG2 (&uplo, 1),
@@ -1603,7 +1603,8 @@
           if (info != 0)
             info = -2;
 
-          volatile double rcond_plus_one = rcon + 1.0;
+          // Prevent use of extra precision.
+          double rcond_plus_one = rcon + 1.0;
 
           if (rcond_plus_one == 1.0 || octave::math::isnan (rcon))
             {
@@ -1642,7 +1643,7 @@
     retval = ComplexMatrix (nc, b_nc, Complex (0.0, 0.0));
   else
     {
-      volatile int typ = mattype.type ();
+      int typ = mattype.type ();
 
       if (typ != MatrixType::Permuted_Lower && typ != MatrixType::Lower)
         (*current_liboctave_error_handler) ("incorrect matrix type");
@@ -1657,7 +1658,7 @@
       const Complex *tmp_data = data ();
 
       retval = b;
-      Complex *result = retval.fortran_vec ();
+      Complex *result = retval.rwdata ();
 
       char uplo = 'L';
       char trans = get_blas_char (transt);
@@ -1683,9 +1684,9 @@
           dia = 'N';
 
           Array<Complex> z (dim_vector (2 * nc, 1));
-          Complex *pz = z.fortran_vec ();
+          Complex *pz = z.rwdata ();
           Array<double> rz (dim_vector (nc, 1));
-          double *prz = rz.fortran_vec ();
+          double *prz = rz.rwdata ();
 
           F77_XFCN (ztrcon, ZTRCON, (F77_CONST_CHAR_ARG2 (&norm, 1),
                                      F77_CONST_CHAR_ARG2 (&uplo, 1),
@@ -1701,7 +1702,8 @@
           if (info != 0)
             info = -2;
 
-          volatile double rcond_plus_one = rcon + 1.0;
+          // Prevent use of extra precision.
+          double rcond_plus_one = rcon + 1.0;
 
           if (rcond_plus_one == 1.0 || octave::math::isnan (rcon))
             {
@@ -1740,7 +1742,7 @@
     retval = ComplexMatrix (nc, b_nc, Complex (0.0, 0.0));
   else
     {
-      volatile int typ = mattype.type ();
+      int typ = mattype.type ();
 
       // Calculate the norm of the matrix for later use when determining rcon.
       double anorm = -1.0;
@@ -1751,7 +1753,7 @@
           char job = 'L';
 
           ComplexMatrix atmp = *this;
-          Complex *tmp_data = atmp.fortran_vec ();
+          Complex *tmp_data = atmp.rwdata ();
 
           // The norm of the matrix for later use when determining rcon.
           if (calc_cond)
@@ -1779,9 +1781,9 @@
               if (calc_cond)
                 {
                   Array<Complex> z (dim_vector (2 * nc, 1));
-                  Complex *pz = z.fortran_vec ();
+                  Complex *pz = z.rwdata ();
                   Array<double> rz (dim_vector (nc, 1));
-                  double *prz = rz.fortran_vec ();
+                  double *prz = rz.rwdata ();
 
                   F77_XFCN (zpocon, ZPOCON, (F77_CONST_CHAR_ARG2 (&job, 1),
                                              nr, F77_DBLE_CMPLX_ARG (tmp_data), nr, anorm,
@@ -1793,7 +1795,8 @@
                   if (info != 0)
                     info = -2;
 
-                  volatile double rcond_plus_one = rcon + 1.0;
+                  // Prevent use of extra precision.
+                  double rcond_plus_one = rcon + 1.0;
 
                   if (rcond_plus_one == 1.0 || octave::math::isnan (rcon))
                     {
@@ -1809,7 +1812,7 @@
               if (info == 0)
                 {
                   retval = b;
-                  Complex *result = retval.fortran_vec ();
+                  Complex *result = retval.rwdata ();
 
                   F77_XFCN (zpotrs, ZPOTRS, (F77_CONST_CHAR_ARG2 (&job, 1),
                                              nr, b_nc, F77_DBLE_CMPLX_ARG (tmp_data), nr,
@@ -1831,15 +1834,15 @@
           info = 0;
 
           Array<F77_INT> ipvt (dim_vector (nr, 1));
-          F77_INT *pipvt = ipvt.fortran_vec ();
+          F77_INT *pipvt = ipvt.rwdata ();
 
           ComplexMatrix atmp = *this;
-          Complex *tmp_data = atmp.fortran_vec ();
+          Complex *tmp_data = atmp.rwdata ();
 
           Array<Complex> z (dim_vector (2 * nc, 1));
-          Complex *pz = z.fortran_vec ();
+          Complex *pz = z.rwdata ();
           Array<double> rz (dim_vector (2 * nc, 1));
-          double *prz = rz.fortran_vec ();
+          double *prz = rz.rwdata ();
 
           // Calculate the norm of the matrix, for later use.
           if (calc_cond && anorm < 0.0)
@@ -1888,7 +1891,8 @@
                   if (info != 0)
                     info = -2;
 
-                  volatile double rcond_plus_one = rcon + 1.0;
+                  // Prevent use of extra precision.
+                  double rcond_plus_one = rcon + 1.0;
 
                   if (rcond_plus_one == 1.0 || octave::math::isnan (rcon))
                     {
@@ -1902,7 +1906,7 @@
               if (info == 0)
                 {
                   retval = b;
-                  Complex *result = retval.fortran_vec ();
+                  Complex *result = retval.rwdata ();
 
                   char job = 'N';
                   F77_XFCN (zgetrs, ZGETRS, (F77_CONST_CHAR_ARG2 (&job, 1),
@@ -2294,7 +2298,7 @@
     retval = ComplexMatrix (n, b_nc, Complex (0.0, 0.0));
   else
     {
-      volatile F77_INT minmn = (m < n ? m : n);
+      F77_INT minmn = (m < n ? m : n);
       F77_INT maxmn = (m > n ? m : n);
       rcon = -1.0;
 
@@ -2310,11 +2314,11 @@
         retval = b;
 
       ComplexMatrix atmp = *this;
-      Complex *tmp_data = atmp.fortran_vec ();
-
-      Complex *pretval = retval.fortran_vec ();
+      Complex *tmp_data = atmp.rwdata ();
+
+      Complex *pretval = retval.rwdata ();
       Array<double> s (dim_vector (minmn, 1));
-      double *ps = s.fortran_vec ();
+      double *ps = s.rwdata ();
 
       // Ask ZGELSD what the dimension of WORK should be.
       F77_INT lwork = -1;
@@ -2353,20 +2357,20 @@
       if (lrwork < 1)
         lrwork = 1;
       Array<double> rwork (dim_vector (lrwork, 1));
-      double *prwork = rwork.fortran_vec ();
+      double *prwork = rwork.rwdata ();
 
       F77_INT liwork = 3 * minmn * nlvl + 11 * minmn;
       if (liwork < 1)
         liwork = 1;
       Array<F77_INT> iwork (dim_vector (liwork, 1));
-      F77_INT *piwork = iwork.fortran_vec ();
+      F77_INT *piwork = iwork.rwdata ();
 
       F77_INT tmp_info = 0;
       F77_INT tmp_rank = 0;
 
       F77_XFCN (zgelsd, ZGELSD, (m, n, nrhs, F77_DBLE_CMPLX_ARG (tmp_data), m,
                                  F77_DBLE_CMPLX_ARG (pretval), maxmn,
-                                 ps, rcon, tmp_rank, F77_DBLE_CMPLX_ARG (work.fortran_vec ()),
+                                 ps, rcon, tmp_rank, F77_DBLE_CMPLX_ARG (work.rwdata ()),
                                  lwork, prwork, piwork, tmp_info));
 
       info = tmp_info;
@@ -2423,7 +2427,7 @@
           F77_XFCN (zgelsd, ZGELSD, (m, n, nrhs, F77_DBLE_CMPLX_ARG (tmp_data),
                                      m, F77_DBLE_CMPLX_ARG (pretval),
                                      maxmn, ps, rcon, tmp_rank,
-                                     F77_DBLE_CMPLX_ARG (work.fortran_vec ()),
+                                     F77_DBLE_CMPLX_ARG (work.rwdata ()),
                                      lwork, prwork, piwork, tmp_info));
 
           info = tmp_info;
@@ -2521,7 +2525,7 @@
     retval = ComplexColumnVector (n, Complex (0.0, 0.0));
   else
     {
-      volatile F77_INT minmn = (m < n ? m : n);
+      F77_INT minmn = (m < n ? m : n);
       F77_INT maxmn = (m > n ? m : n);
       rcon = -1.0;
 
@@ -2536,11 +2540,11 @@
         retval = b;
 
       ComplexMatrix atmp = *this;
-      Complex *tmp_data = atmp.fortran_vec ();
-
-      Complex *pretval = retval.fortran_vec ();
+      Complex *tmp_data = atmp.rwdata ();
+
+      Complex *pretval = retval.rwdata ();
       Array<double> s (dim_vector (minmn, 1));
-      double *ps = s.fortran_vec ();
+      double *ps = s.rwdata ();
 
       // Ask ZGELSD what the dimension of WORK should be.
       F77_INT lwork = -1;
@@ -2570,20 +2574,20 @@
       if (lrwork < 1)
         lrwork = 1;
       Array<double> rwork (dim_vector (lrwork, 1));
-      double *prwork = rwork.fortran_vec ();
+      double *prwork = rwork.rwdata ();
 
       F77_INT liwork = 3 * minmn * nlvl + 11 * minmn;
       if (liwork < 1)
         liwork = 1;
       Array<F77_INT> iwork (dim_vector (liwork, 1));
-      F77_INT *piwork = iwork.fortran_vec ();
+      F77_INT *piwork = iwork.rwdata ();
 
       F77_INT tmp_info = 0;
       F77_INT tmp_rank = 0;
 
       F77_XFCN (zgelsd, ZGELSD, (m, n, nrhs, F77_DBLE_CMPLX_ARG (tmp_data), m,
                                  F77_DBLE_CMPLX_ARG (pretval), maxmn,
-                                 ps, rcon, tmp_rank, F77_DBLE_CMPLX_ARG (work.fortran_vec ()),
+                                 ps, rcon, tmp_rank, F77_DBLE_CMPLX_ARG (work.rwdata ()),
                                  lwork, prwork, piwork, tmp_info));
 
       info = tmp_info;
@@ -2597,7 +2601,7 @@
       F77_XFCN (zgelsd, ZGELSD, (m, n, nrhs, F77_DBLE_CMPLX_ARG (tmp_data), m,
                                  F77_DBLE_CMPLX_ARG (pretval),
                                  maxmn, ps, rcon, tmp_rank,
-                                 F77_DBLE_CMPLX_ARG (work.fortran_vec ()), lwork,
+                                 F77_DBLE_CMPLX_ARG (work.rwdata ()), lwork,
                                  prwork, piwork, tmp_info));
 
       info = tmp_info;
@@ -2645,7 +2649,7 @@
       F77_INT a_len = octave::to_f77_int (a.numel ());
 
       retval = ComplexMatrix (len, a_len);
-      Complex *c = retval.fortran_vec ();
+      Complex *c = retval.rwdata ();
 
       F77_XFCN (zgemm, ZGEMM, (F77_CONST_CHAR_ARG2 ("N", 1),
                                F77_CONST_CHAR_ARG2 ("N", 1),
@@ -2749,7 +2753,7 @@
   if (nr == 0 || nc == 0)
     return *this;
 
-  Complex *d = fortran_vec (); // Ensures only one reference to my privates!
+  Complex *d = rwdata (); // Ensures only one reference to my privates!
 
   mx_inline_add2 (numel (), d, a.data ());
   return *this;
@@ -2770,7 +2774,7 @@
   if (nr == 0 || nc == 0)
     return *this;
 
-  Complex *d = fortran_vec (); // Ensures only one reference to my privates!
+  Complex *d = rwdata (); // Ensures only one reference to my privates!
 
   mx_inline_sub2 (numel (), d, a.data ());
   return *this;
@@ -3275,9 +3279,9 @@
   double scale;
   F77_INT info;
 
-  Complex *pa = sch_a.fortran_vec ();
-  Complex *pb = sch_b.fortran_vec ();
-  Complex *px = cx.fortran_vec ();
+  Complex *pa = sch_a.rwdata ();
+  Complex *pb = sch_b.rwdata ();
+  Complex *px = cx.rwdata ();
 
   F77_XFCN (ztrsyl, ZTRSYL, (F77_CONST_CHAR_ARG2 ("N", 1),
                              F77_CONST_CHAR_ARG2 ("N", 1),
@@ -3374,7 +3378,7 @@
       // use the result matrix before zeroing the elements.
 
       retval = ComplexMatrix (a_nr, b_nc, 0.0);
-      Complex *c = retval.fortran_vec ();
+      Complex *c = retval.rwdata ();
 
       const char ctra = get_blas_trans_arg (tra, cja);
       if (cja || cjb)
@@ -3412,7 +3416,7 @@
       F77_INT tdb = octave::to_f77_int (b.cols ());
 
       retval = ComplexMatrix (a_nr, b_nc, 0.0);
-      Complex *c = retval.fortran_vec ();
+      Complex *c = retval.rwdata ();
 
       if (b_nc == 1 && a_nr == 1)
         {
--- a/liboctave/array/CMatrix.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/CMatrix.h	Mon Feb 26 23:30:33 2024 -0500
@@ -37,9 +37,7 @@
 #include "mx-op-decl.h"
 #include "oct-cmplx.h"
 
-class
-OCTAVE_API
-ComplexMatrix : public ComplexNDArray
+class OCTAVE_API ComplexMatrix : public ComplexNDArray
 {
 public:
 
--- a/liboctave/array/CNDArray.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/CNDArray.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -57,7 +57,7 @@
 ComplexNDArray
 ComplexNDArray::fourier (int dim) const
 {
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
 
   if (dim > dv.ndims () || dim < 0)
     return ComplexNDArray ();
@@ -75,7 +75,7 @@
 
   const Complex *in (data ());
   ComplexNDArray retval (dv);
-  Complex *out (retval.fortran_vec ());
+  Complex *out (retval.rwdata ());
 
   // Need to be careful here about the distance between fft's
   for (octave_idx_type k = 0; k < nloop; k++)
@@ -88,7 +88,7 @@
 ComplexNDArray
 ComplexNDArray::ifourier (int dim) const
 {
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
 
   if (dim > dv.ndims () || dim < 0)
     return ComplexNDArray ();
@@ -106,7 +106,7 @@
 
   const Complex *in (data ());
   ComplexNDArray retval (dv);
-  Complex *out (retval.fortran_vec ());
+  Complex *out (retval.rwdata ());
 
   // Need to be careful here about the distance between fft's
   for (octave_idx_type k = 0; k < nloop; k++)
@@ -119,14 +119,14 @@
 ComplexNDArray
 ComplexNDArray::fourier2d () const
 {
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
   if (dv.ndims () < 2)
     return ComplexNDArray ();
 
   dim_vector dv2 (dv(0), dv(1));
   const Complex *in = data ();
   ComplexNDArray retval (dv);
-  Complex *out = retval.fortran_vec ();
+  Complex *out = retval.rwdata ();
   octave_idx_type howmany = numel () / dv(0) / dv(1);
   octave_idx_type dist = dv(0) * dv(1);
 
@@ -139,14 +139,14 @@
 ComplexNDArray
 ComplexNDArray::ifourier2d () const
 {
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
   if (dv.ndims () < 2)
     return ComplexNDArray ();
 
   dim_vector dv2 (dv(0), dv(1));
   const Complex *in = data ();
   ComplexNDArray retval (dv);
-  Complex *out = retval.fortran_vec ();
+  Complex *out = retval.rwdata ();
   octave_idx_type howmany = numel () / dv(0) / dv(1);
   octave_idx_type dist = dv(0) * dv(1);
 
@@ -159,12 +159,12 @@
 ComplexNDArray
 ComplexNDArray::fourierNd () const
 {
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
   int rank = dv.ndims ();
 
   const Complex *in (data ());
   ComplexNDArray retval (dv);
-  Complex *out (retval.fortran_vec ());
+  Complex *out (retval.rwdata ());
 
   octave::fftw::fftNd (in, out, rank, dv);
 
@@ -174,12 +174,12 @@
 ComplexNDArray
 ComplexNDArray::ifourierNd () const
 {
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
   int rank = dv.ndims ();
 
   const Complex *in (data ());
   ComplexNDArray retval (dv);
-  Complex *out (retval.fortran_vec ());
+  Complex *out (retval.rwdata ());
 
   octave::fftw::ifftNd (in, out, rank, dv);
 
@@ -507,8 +507,8 @@
 ComplexNDArray&
 ComplexNDArray::insert (const NDArray& a, octave_idx_type r, octave_idx_type c)
 {
-  dim_vector a_dv = a.dims ();
-  dim_vector dv = dims ();
+  const dim_vector& a_dv = a.dims ();
+  const dim_vector& dv = dims ();
 
   int n = a_dv.ndims ();
 
--- a/liboctave/array/CNDArray.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/CNDArray.h	Mon Feb 26 23:30:33 2024 -0500
@@ -33,9 +33,7 @@
 #include "mx-defs.h"
 #include "mx-op-decl.h"
 
-class
-OCTAVE_API
-ComplexNDArray : public MArray<Complex>
+class OCTAVE_API ComplexNDArray : public MArray<Complex>
 {
 public:
 
--- a/liboctave/array/CRowVector.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/CRowVector.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -253,7 +253,7 @@
   if (len == 0)
     return *this;
 
-  Complex *d = fortran_vec (); // Ensures only one reference to my privates!
+  Complex *d = rwdata (); // Ensures only one reference to my privates!
 
   mx_inline_add2 (len, d, a.data ());
   return *this;
@@ -272,7 +272,7 @@
   if (len == 0)
     return *this;
 
-  Complex *d = fortran_vec (); // Ensures only one reference to my privates!
+  Complex *d = rwdata (); // Ensures only one reference to my privates!
 
   mx_inline_sub2 (len, d, a.data ());
   return *this;
@@ -302,7 +302,7 @@
       F77_INT ld = a_nr;
 
       retval.resize (a_nc);
-      Complex *y = retval.fortran_vec ();
+      Complex *y = retval.rwdata ();
 
       F77_XFCN (zgemv, ZGEMV, (F77_CONST_CHAR_ARG2 ("T", 1),
                                a_nr, a_nc, 1.0, F77_CONST_DBLE_CMPLX_ARG (a.data ()),
--- a/liboctave/array/CRowVector.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/CRowVector.h	Mon Feb 26 23:30:33 2024 -0500
@@ -32,9 +32,7 @@
 #include "dRowVector.h"
 #include "mx-defs.h"
 
-class
-OCTAVE_API
-ComplexRowVector : public MArray<Complex>
+class OCTAVE_API ComplexRowVector : public MArray<Complex>
 {
   friend class ComplexColumnVector;
 
--- a/liboctave/array/CSparse.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/CSparse.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -63,12 +63,7 @@
 
 #include "Sparse-perm-op-defs.h"
 
-// Define whether to use a basic QR solver or one that uses a Dulmange
-// Mendelsohn factorization to separate the problem into under-determined,
-// well-determined and over-determined parts and solves them separately
-#if ! defined (USE_QRSOLVE)
-#  include "sparse-dmsolve.h"
-#endif
+#include "sparse-dmsolve.h"
 
 SparseComplexMatrix::SparseComplexMatrix (const SparseMatrix& a)
   : MSparse<Complex> (a)
@@ -193,7 +188,7 @@
 SparseComplexMatrix::max (Array<octave_idx_type>& idx_arg, int dim) const
 {
   SparseComplexMatrix result;
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
   octave_idx_type nr = dv(0);
   octave_idx_type nc = dv(1);
 
@@ -350,7 +345,7 @@
 SparseComplexMatrix::min (Array<octave_idx_type>& idx_arg, int dim) const
 {
   SparseComplexMatrix result;
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
   octave_idx_type nr = dv(0);
   octave_idx_type nc = dv(1);
 
@@ -1103,7 +1098,7 @@
 
       // Setup the control parameters
       Matrix Control (UMFPACK_CONTROL, 1);
-      double *control = Control.fortran_vec ();
+      double *control = Control.rwdata ();
       UMFPACK_ZNAME (defaults) (control);
 
       double tmp = octave::sparse_params::get_key ("spumoni");
@@ -1139,7 +1134,7 @@
 
       void *Symbolic;
       Matrix Info (1, UMFPACK_INFO);
-      double *info = Info.fortran_vec ();
+      double *info = Info.rwdata ();
       int status = UMFPACK_ZNAME (qsymbolic) (nr, nc,
                                               octave::to_suitesparse_intptr (Ap),
                                               octave::to_suitesparse_intptr (Ai),
@@ -1728,7 +1723,8 @@
             octave::warn_singular_matrix (rcond);
         }
 
-      volatile double rcond_plus_one = rcond + 1.0;
+      // Prevent use of extra precision.
+      double rcond_plus_one = rcond + 1.0;
 
       if (rcond_plus_one == 1.0 || octave::math::isnan (rcond))
         {
@@ -2010,7 +2006,8 @@
             octave::warn_singular_matrix (rcond);
         }
 
-      volatile double rcond_plus_one = rcond + 1.0;
+      // Prevent use of extra precision.
+      double rcond_plus_one = rcond + 1.0;
 
       if (rcond_plus_one == 1.0 || octave::math::isnan (rcond))
         {
@@ -2239,7 +2236,8 @@
             octave::warn_singular_matrix (rcond);
         }
 
-      volatile double rcond_plus_one = rcond + 1.0;
+      // Prevent use of extra precision.
+      double rcond_plus_one = rcond + 1.0;
 
       if (rcond_plus_one == 1.0 || octave::math::isnan (rcond))
         {
@@ -2521,7 +2519,8 @@
             octave::warn_singular_matrix (rcond);
         }
 
-      volatile double rcond_plus_one = rcond + 1.0;
+      // Prevent use of extra precision.
+      double rcond_plus_one = rcond + 1.0;
 
       if (rcond_plus_one == 1.0 || octave::math::isnan (rcond))
         {
@@ -2770,7 +2769,8 @@
             octave::warn_singular_matrix (rcond);
         }
 
-      volatile double rcond_plus_one = rcond + 1.0;
+      // Prevent use of extra precision.
+      double rcond_plus_one = rcond + 1.0;
 
       if (rcond_plus_one == 1.0 || octave::math::isnan (rcond))
         {
@@ -3071,7 +3071,8 @@
             octave::warn_singular_matrix (rcond);
         }
 
-      volatile double rcond_plus_one = rcond + 1.0;
+      // Prevent use of extra precision.
+      double rcond_plus_one = rcond + 1.0;
 
       if (rcond_plus_one == 1.0 || octave::math::isnan (rcond))
         {
@@ -3323,7 +3324,8 @@
             octave::warn_singular_matrix (rcond);
         }
 
-      volatile double rcond_plus_one = rcond + 1.0;
+      // Prevent use of extra precision.
+      double rcond_plus_one = rcond + 1.0;
 
       if (rcond_plus_one == 1.0 || octave::math::isnan (rcond))
         {
@@ -3623,7 +3625,8 @@
             octave::warn_singular_matrix (rcond);
         }
 
-      volatile double rcond_plus_one = rcond + 1.0;
+      // Prevent use of extra precision.
+      double rcond_plus_one = rcond + 1.0;
 
       if (rcond_plus_one == 1.0 || octave::math::isnan (rcond))
         {
@@ -3666,7 +3669,7 @@
   else
     {
       // Print spparms("spumoni") info if requested
-      volatile int typ = mattype.type ();
+      int typ = mattype.type ();
       mattype.info ();
 
       if (typ == MatrixType::Tridiagonal_Hermitian)
@@ -3709,7 +3712,7 @@
           F77_INT b_nc = octave::to_f77_int (b.cols ());
 
           retval = ComplexMatrix (b);
-          Complex *result = retval.fortran_vec ();
+          Complex *result = retval.rwdata ();
 
           F77_INT tmp_nr = octave::to_f77_int (nr);
 
@@ -3775,7 +3778,7 @@
           F77_INT b_nc = octave::to_f77_int (b.cols ());
 
           retval = ComplexMatrix (b);
-          Complex *result = retval.fortran_vec ();
+          Complex *result = retval.rwdata ();
 
           F77_INT tmp_nr = octave::to_f77_int (nr);
 
@@ -3847,7 +3850,7 @@
           OCTAVE_LOCAL_BUFFER (Complex, D, nr);
           OCTAVE_LOCAL_BUFFER (Complex, DL, nr - 1);
           Array<F77_INT> ipvt (dim_vector (nr, 1));
-          F77_INT *pipvt = ipvt.fortran_vec ();
+          F77_INT *pipvt = ipvt.rwdata ();
 
           if (mattype.is_dense ())
             {
@@ -3911,17 +3914,17 @@
           else
             {
               char job = 'N';
-              volatile octave_idx_type x_nz = b.nnz ();
+              octave_idx_type x_nz = b.nnz ();
               F77_INT b_nr = octave::to_f77_int (b.rows ());
               octave_idx_type b_nc = b.cols ();
               retval = SparseComplexMatrix (nr, b_nc, x_nz);
               retval.xcidx (0) = 0;
-              volatile octave_idx_type ii = 0;
+              octave_idx_type ii = 0;
               rcond = 1.0;
 
               OCTAVE_LOCAL_BUFFER (Complex, work, nr);
 
-              for (volatile octave_idx_type j = 0; j < b_nc; j++)
+              for (octave_idx_type j = 0; j < b_nc; j++)
                 {
                   for (octave_idx_type i = 0; i < nr; i++)
                     work[i] = 0.;
@@ -3997,7 +4000,7 @@
   else
     {
       // Print spparms("spumoni") info if requested
-      volatile int typ = mattype.type ();
+      int typ = mattype.type ();
       mattype.info ();
 
       if (typ == MatrixType::Tridiagonal_Hermitian)
@@ -4042,7 +4045,7 @@
           rcond = 1.;
 
           retval = ComplexMatrix (b);
-          Complex *result = retval.fortran_vec ();
+          Complex *result = retval.rwdata ();
 
           F77_INT tmp_nr = octave::to_f77_int (nr);
 
@@ -4108,7 +4111,7 @@
           rcond = 1.;
 
           retval = ComplexMatrix (b);
-          Complex *result = retval.fortran_vec ();
+          Complex *result = retval.rwdata ();
 
           F77_INT tmp_nr = octave::to_f77_int (nr);
 
@@ -4178,7 +4181,7 @@
           OCTAVE_LOCAL_BUFFER (Complex, D, nr);
           OCTAVE_LOCAL_BUFFER (Complex, DL, nr - 1);
           Array<F77_INT> ipvt (dim_vector (nr, 1));
-          F77_INT *pipvt = ipvt.fortran_vec ();
+          F77_INT *pipvt = ipvt.rwdata ();
 
           if (mattype.is_dense ())
             {
@@ -4249,12 +4252,12 @@
 
               // Take a first guess that the number of nonzero terms
               // will be as many as in b
-              volatile octave_idx_type x_nz = b.nnz ();
-              volatile octave_idx_type ii = 0;
+              octave_idx_type x_nz = b.nnz ();
+              octave_idx_type ii = 0;
               retval = SparseComplexMatrix (b_nr, b_nc, x_nz);
 
               retval.xcidx (0) = 0;
-              for (volatile octave_idx_type j = 0; j < b_nc; j++)
+              for (octave_idx_type j = 0; j < b_nc; j++)
                 {
 
                   for (F77_INT i = 0; i < b_nr; i++)
@@ -4338,7 +4341,7 @@
   else
     {
       // Print spparms("spumoni") info if requested
-      volatile int typ = mattype.type ();
+      int typ = mattype.type ();
       mattype.info ();
 
       if (typ == MatrixType::Banded_Hermitian)
@@ -4346,7 +4349,7 @@
           F77_INT n_lower = octave::to_f77_int (mattype.nlower ());
           F77_INT ldm = n_lower + 1;
           ComplexMatrix m_band (ldm, nc);
-          Complex *tmp_data = m_band.fortran_vec ();
+          Complex *tmp_data = m_band.rwdata ();
 
           if (! mattype.is_dense ())
             {
@@ -4395,9 +4398,9 @@
               if (calc_cond)
                 {
                   Array<Complex> z (dim_vector (2 * nr, 1));
-                  Complex *pz = z.fortran_vec ();
+                  Complex *pz = z.rwdata ();
                   Array<double> iz (dim_vector (nr, 1));
-                  double *piz = iz.fortran_vec ();
+                  double *piz = iz.rwdata ();
 
                   F77_XFCN (zpbcon, ZPBCON,
                             (F77_CONST_CHAR_ARG2 (&job, 1),
@@ -4410,7 +4413,8 @@
                   if (err != 0)
                     err = -2;
 
-                  volatile double rcond_plus_one = rcond + 1.0;
+                  // Prevent use of extra precision.
+                  double rcond_plus_one = rcond + 1.0;
 
                   if (rcond_plus_one == 1.0 || octave::math::isnan (rcond))
                     {
@@ -4431,7 +4435,7 @@
               if (err == 0)
                 {
                   retval = ComplexMatrix (b);
-                  Complex *result = retval.fortran_vec ();
+                  Complex *result = retval.rwdata ();
 
                   F77_INT b_nr = octave::to_f77_int (b.rows ());
                   F77_INT b_nc = octave::to_f77_int (b.cols ());
@@ -4463,7 +4467,7 @@
           F77_INT ldm = n_upper + 2 * n_lower + 1;
 
           ComplexMatrix m_band (ldm, nc);
-          Complex *tmp_data = m_band.fortran_vec ();
+          Complex *tmp_data = m_band.rwdata ();
 
           if (! mattype.is_dense ())
             {
@@ -4493,7 +4497,7 @@
             }
 
           Array<F77_INT> ipvt (dim_vector (nr, 1));
-          F77_INT *pipvt = ipvt.fortran_vec ();
+          F77_INT *pipvt = ipvt.rwdata ();
 
           F77_INT tmp_nr = octave::to_f77_int (nr);
 
@@ -4526,9 +4530,9 @@
                 {
                   char job = '1';
                   Array<Complex> z (dim_vector (2 * nr, 1));
-                  Complex *pz = z.fortran_vec ();
+                  Complex *pz = z.rwdata ();
                   Array<double> iz (dim_vector (nr, 1));
-                  double *piz = iz.fortran_vec ();
+                  double *piz = iz.rwdata ();
 
                   F77_INT tmp_nc = octave::to_f77_int (nc);
 
@@ -4543,7 +4547,8 @@
                   if (err != 0)
                     err = -2;
 
-                  volatile double rcond_plus_one = rcond + 1.0;
+                  // Prevent use of extra precision.
+                  double rcond_plus_one = rcond + 1.0;
 
                   if (rcond_plus_one == 1.0 || octave::math::isnan (rcond))
                     {
@@ -4564,7 +4569,7 @@
               if (err == 0)
                 {
                   retval = ComplexMatrix (b);
-                  Complex *result = retval.fortran_vec ();
+                  Complex *result = retval.rwdata ();
 
                   F77_INT b_nr = octave::to_f77_int (b.rows ());
                   F77_INT b_nc = octave::to_f77_int (b.cols ());
@@ -4608,7 +4613,7 @@
   else
     {
       // Print spparms("spumoni") info if requested
-      volatile int typ = mattype.type ();
+      int typ = mattype.type ();
       mattype.info ();
 
       if (typ == MatrixType::Banded_Hermitian)
@@ -4617,7 +4622,7 @@
           F77_INT ldm = n_lower + 1;
 
           ComplexMatrix m_band (ldm, nc);
-          Complex *tmp_data = m_band.fortran_vec ();
+          Complex *tmp_data = m_band.rwdata ();
 
           if (! mattype.is_dense ())
             {
@@ -4664,9 +4669,9 @@
               if (calc_cond)
                 {
                   Array<Complex> z (dim_vector (2 * nr, 1));
-                  Complex *pz = z.fortran_vec ();
+                  Complex *pz = z.rwdata ();
                   Array<double> iz (dim_vector (nr, 1));
-                  double *piz = iz.fortran_vec ();
+                  double *piz = iz.rwdata ();
 
                   F77_XFCN (zpbcon, ZPBCON,
                             (F77_CONST_CHAR_ARG2 (&job, 1),
@@ -4679,7 +4684,8 @@
                   if (err != 0)
                     err = -2;
 
-                  volatile double rcond_plus_one = rcond + 1.0;
+                  // Prevent use of extra precision.
+                  double rcond_plus_one = rcond + 1.0;
 
                   if (rcond_plus_one == 1.0 || octave::math::isnan (rcond))
                     {
@@ -4705,12 +4711,12 @@
 
                   // Take a first guess that the number of nonzero terms
                   // will be as many as in b
-                  volatile octave_idx_type x_nz = b.nnz ();
-                  volatile octave_idx_type ii = 0;
+                  octave_idx_type x_nz = b.nnz ();
+                  octave_idx_type ii = 0;
                   retval = SparseComplexMatrix (b_nr, b_nc, x_nz);
 
                   retval.xcidx (0) = 0;
-                  for (volatile octave_idx_type j = 0; j < b_nc; j++)
+                  for (octave_idx_type j = 0; j < b_nc; j++)
                     {
                       for (F77_INT i = 0; i < b_nr; i++)
                         Bx[i] = b.elem (i, j);
@@ -4767,7 +4773,7 @@
           F77_INT ldm = n_upper + 2 * n_lower + 1;
 
           ComplexMatrix m_band (ldm, nc);
-          Complex *tmp_data = m_band.fortran_vec ();
+          Complex *tmp_data = m_band.rwdata ();
 
           if (! mattype.is_dense ())
             {
@@ -4797,7 +4803,7 @@
             }
 
           Array<F77_INT> ipvt (dim_vector (nr, 1));
-          F77_INT *pipvt = ipvt.fortran_vec ();
+          F77_INT *pipvt = ipvt.rwdata ();
 
           F77_INT tmp_nr = octave::to_f77_int (nr);
 
@@ -4828,9 +4834,9 @@
                 {
                   char job = '1';
                   Array<Complex> z (dim_vector (2 * nr, 1));
-                  Complex *pz = z.fortran_vec ();
+                  Complex *pz = z.rwdata ();
                   Array<double> iz (dim_vector (nr, 1));
-                  double *piz = iz.fortran_vec ();
+                  double *piz = iz.rwdata ();
 
                   F77_INT tmp_nc = octave::to_f77_int (nc);
 
@@ -4845,7 +4851,8 @@
                   if (err != 0)
                     err = -2;
 
-                  volatile double rcond_plus_one = rcond + 1.0;
+                  // Prevent use of extra precision.
+                  double rcond_plus_one = rcond + 1.0;
 
                   if (rcond_plus_one == 1.0 || octave::math::isnan (rcond))
                     {
@@ -4866,16 +4873,16 @@
               if (err == 0)
                 {
                   char job = 'N';
-                  volatile octave_idx_type x_nz = b.nnz ();
+                  octave_idx_type x_nz = b.nnz ();
                   F77_INT b_nr = octave::to_f77_int (b.rows ());
                   octave_idx_type b_nc = b.cols ();
                   retval = SparseComplexMatrix (nr, b_nc, x_nz);
                   retval.xcidx (0) = 0;
-                  volatile octave_idx_type ii = 0;
+                  octave_idx_type ii = 0;
 
                   OCTAVE_LOCAL_BUFFER (Complex, work, nr);
 
-                  for (volatile octave_idx_type j = 0; j < b_nc; j++)
+                  for (octave_idx_type j = 0; j < b_nc; j++)
                     {
                       for (octave_idx_type i = 0; i < nr; i++)
                         work[i] = 0.;
@@ -4947,7 +4954,7 @@
   else
     {
       // Print spparms("spumoni") info if requested
-      volatile int typ = mattype.type ();
+      int typ = mattype.type ();
       mattype.info ();
 
       if (typ == MatrixType::Banded_Hermitian)
@@ -4956,7 +4963,7 @@
           F77_INT ldm = n_lower + 1;
 
           ComplexMatrix m_band (ldm, nc);
-          Complex *tmp_data = m_band.fortran_vec ();
+          Complex *tmp_data = m_band.rwdata ();
 
           if (! mattype.is_dense ())
             {
@@ -5005,9 +5012,9 @@
               if (calc_cond)
                 {
                   Array<Complex> z (dim_vector (2 * nr, 1));
-                  Complex *pz = z.fortran_vec ();
+                  Complex *pz = z.rwdata ();
                   Array<double> iz (dim_vector (nr, 1));
-                  double *piz = iz.fortran_vec ();
+                  double *piz = iz.rwdata ();
 
                   F77_XFCN (zpbcon, ZPBCON,
                             (F77_CONST_CHAR_ARG2 (&job, 1),
@@ -5020,7 +5027,8 @@
                   if (err != 0)
                     err = -2;
 
-                  volatile double rcond_plus_one = rcond + 1.0;
+                  // Prevent use of extra precision.
+                  double rcond_plus_one = rcond + 1.0;
 
                   if (rcond_plus_one == 1.0 || octave::math::isnan (rcond))
                     {
@@ -5043,7 +5051,7 @@
                   F77_INT b_nr = octave::to_f77_int (b.rows ());
                   F77_INT b_nc = octave::to_f77_int (b.cols ());
                   retval = ComplexMatrix (b);
-                  Complex *result = retval.fortran_vec ();
+                  Complex *result = retval.rwdata ();
 
                   F77_XFCN (zpbtrs, ZPBTRS,
                             (F77_CONST_CHAR_ARG2 (&job, 1),
@@ -5072,7 +5080,7 @@
           F77_INT ldm = n_upper + 2 * n_lower + 1;
 
           ComplexMatrix m_band (ldm, nc);
-          Complex *tmp_data = m_band.fortran_vec ();
+          Complex *tmp_data = m_band.rwdata ();
 
           if (! mattype.is_dense ())
             {
@@ -5102,7 +5110,7 @@
             }
 
           Array<F77_INT> ipvt (dim_vector (nr, 1));
-          F77_INT *pipvt = ipvt.fortran_vec ();
+          F77_INT *pipvt = ipvt.rwdata ();
 
           F77_INT tmp_nr = octave::to_f77_int (nr);
 
@@ -5133,9 +5141,9 @@
                 {
                   char job = '1';
                   Array<Complex> z (dim_vector (2 * nr, 1));
-                  Complex *pz = z.fortran_vec ();
+                  Complex *pz = z.rwdata ();
                   Array<double> iz (dim_vector (nr, 1));
-                  double *piz = iz.fortran_vec ();
+                  double *piz = iz.rwdata ();
 
                   F77_INT tmp_nc = octave::to_f77_int (nc);
 
@@ -5150,7 +5158,8 @@
                   if (err != 0)
                     err = -2;
 
-                  volatile double rcond_plus_one = rcond + 1.0;
+                  // Prevent use of extra precision.
+                  double rcond_plus_one = rcond + 1.0;
 
                   if (rcond_plus_one == 1.0 || octave::math::isnan (rcond))
                     {
@@ -5174,7 +5183,7 @@
                   F77_INT b_nr = octave::to_f77_int (b.rows ());
                   F77_INT b_nc = octave::to_f77_int (b.cols ());
                   retval = ComplexMatrix (b);
-                  Complex *result = retval.fortran_vec ();
+                  Complex *result = retval.rwdata ();
 
                   F77_XFCN (zgbtrs, ZGBTRS,
                             (F77_CONST_CHAR_ARG2 (&job, 1),
@@ -5214,7 +5223,7 @@
   else
     {
       // Print spparms("spumoni") info if requested
-      volatile int typ = mattype.type ();
+      int typ = mattype.type ();
       mattype.info ();
 
       if (typ == MatrixType::Banded_Hermitian)
@@ -5223,7 +5232,7 @@
           F77_INT ldm = n_lower + 1;
 
           ComplexMatrix m_band (ldm, nc);
-          Complex *tmp_data = m_band.fortran_vec ();
+          Complex *tmp_data = m_band.rwdata ();
 
           if (! mattype.is_dense ())
             {
@@ -5273,9 +5282,9 @@
               if (calc_cond)
                 {
                   Array<Complex> z (dim_vector (2 * nr, 1));
-                  Complex *pz = z.fortran_vec ();
+                  Complex *pz = z.rwdata ();
                   Array<double> iz (dim_vector (nr, 1));
-                  double *piz = iz.fortran_vec ();
+                  double *piz = iz.rwdata ();
 
                   F77_XFCN (zpbcon, ZPBCON,
                             (F77_CONST_CHAR_ARG2 (&job, 1),
@@ -5288,7 +5297,8 @@
                   if (err != 0)
                     err = -2;
 
-                  volatile double rcond_plus_one = rcond + 1.0;
+                  // Prevent use of extra precision.
+                  double rcond_plus_one = rcond + 1.0;
 
                   if (rcond_plus_one == 1.0 || octave::math::isnan (rcond))
                     {
@@ -5314,12 +5324,12 @@
 
                   // Take a first guess that the number of nonzero terms
                   // will be as many as in b
-                  volatile octave_idx_type x_nz = b.nnz ();
-                  volatile octave_idx_type ii = 0;
+                  octave_idx_type x_nz = b.nnz ();
+                  octave_idx_type ii = 0;
                   retval = SparseComplexMatrix (b_nr, b_nc, x_nz);
 
                   retval.xcidx (0) = 0;
-                  for (volatile octave_idx_type j = 0; j < b_nc; j++)
+                  for (octave_idx_type j = 0; j < b_nc; j++)
                     {
 
                       for (F77_INT i = 0; i < b_nr; i++)
@@ -5380,7 +5390,7 @@
           F77_INT ldm = n_upper + 2 * n_lower + 1;
 
           ComplexMatrix m_band (ldm, nc);
-          Complex *tmp_data = m_band.fortran_vec ();
+          Complex *tmp_data = m_band.rwdata ();
 
           if (! mattype.is_dense ())
             {
@@ -5410,7 +5420,7 @@
             }
 
           Array<F77_INT> ipvt (dim_vector (nr, 1));
-          F77_INT *pipvt = ipvt.fortran_vec ();
+          F77_INT *pipvt = ipvt.rwdata ();
 
           F77_INT tmp_nr = octave::to_f77_int (nr);
 
@@ -5441,9 +5451,9 @@
                 {
                   char job = '1';
                   Array<Complex> z (dim_vector (2 * nr, 1));
-                  Complex *pz = z.fortran_vec ();
+                  Complex *pz = z.rwdata ();
                   Array<double> iz (dim_vector (nr, 1));
-                  double *piz = iz.fortran_vec ();
+                  double *piz = iz.rwdata ();
 
                   F77_INT tmp_nc = octave::to_f77_int (nc);
 
@@ -5458,7 +5468,8 @@
                   if (err != 0)
                     err = -2;
 
-                  volatile double rcond_plus_one = rcond + 1.0;
+                  // Prevent use of extra precision.
+                  double rcond_plus_one = rcond + 1.0;
 
                   if (rcond_plus_one == 1.0 || octave::math::isnan (rcond))
                     {
@@ -5479,16 +5490,16 @@
               if (err == 0)
                 {
                   char job = 'N';
-                  volatile octave_idx_type x_nz = b.nnz ();
+                  octave_idx_type x_nz = b.nnz ();
                   F77_INT b_nr = octave::to_f77_int (b.rows ());
                   octave_idx_type b_nc = b.cols ();
                   retval = SparseComplexMatrix (nr, b_nc, x_nz);
                   retval.xcidx (0) = 0;
-                  volatile octave_idx_type ii = 0;
+                  octave_idx_type ii = 0;
 
                   OCTAVE_LOCAL_BUFFER (Complex, Bx, nr);
 
-                  for (volatile octave_idx_type j = 0; j < b_nc; j++)
+                  for (octave_idx_type j = 0; j < b_nc; j++)
                     {
                       for (octave_idx_type i = 0; i < nr; i++)
                         Bx[i] = 0.;
@@ -5554,7 +5565,7 @@
 
   // Setup the control parameters
   Control = Matrix (UMFPACK_CONTROL, 1);
-  double *control = Control.fortran_vec ();
+  double *control = Control.rwdata ();
   UMFPACK_ZNAME (defaults) (control);
 
   double tmp = octave::sparse_params::get_key ("spumoni");
@@ -5588,7 +5599,7 @@
 
   void *Symbolic;
   Info = Matrix (1, UMFPACK_INFO);
-  double *info = Info.fortran_vec ();
+  double *info = Info.rwdata ();
   int status = UMFPACK_ZNAME (qsymbolic) (nr, nc,
                                           octave::to_suitesparse_intptr (Ap),
                                           octave::to_suitesparse_intptr (Ai),
@@ -5621,7 +5632,9 @@
         rcond = Info (UMFPACK_RCOND);
       else
         rcond = 1.;
-      volatile double rcond_plus_one = rcond + 1.0;
+
+      // Prevent use of extra precision.
+      double rcond_plus_one = rcond + 1.0;
 
       if (status == UMFPACK_WARNING_singular_matrix
           || rcond_plus_one == 1.0 || octave::math::isnan (rcond))
@@ -5692,7 +5705,7 @@
   else
     {
       // Print spparms("spumoni") info if requested
-      volatile int typ = mattype.type ();
+      int typ = mattype.type ();
       mattype.info ();
 
       if (typ == MatrixType::Hermitian)
@@ -5771,7 +5784,8 @@
             }
           else
             {
-              volatile double rcond_plus_one = rcond + 1.0;
+              // Prevent use of extra precision.
+              double rcond_plus_one = rcond + 1.0;
 
               if (rcond_plus_one == 1.0 || octave::math::isnan (rcond))
                 {
@@ -5829,8 +5843,8 @@
               octave_idx_type b_nr = b.rows ();
               octave_idx_type b_nc = b.cols ();
               int status = 0;
-              double *control = Control.fortran_vec ();
-              double *info = Info.fortran_vec ();
+              double *control = Control.rwdata ();
+              double *info = Info.rwdata ();
               const octave_idx_type *Ap = cidx ();
               const octave_idx_type *Ai = ridx ();
               const Complex *Ax = data ();
@@ -5843,7 +5857,7 @@
               OCTAVE_LOCAL_BUFFER (Complex, Bz, b_nr);
 #endif
               retval.resize (b_nr, b_nc);
-              Complex *Xx = retval.fortran_vec ();
+              Complex *Xx = retval.rwdata ();
 
               for (octave_idx_type j = 0, iidx = 0; j < b_nc; j++, iidx += b_nr)
                 {
@@ -5931,7 +5945,7 @@
   else
     {
       // Print spparms("spumoni") info if requested
-      volatile int typ = mattype.type ();
+      int typ = mattype.type ();
       mattype.info ();
 
       if (typ == MatrixType::Hermitian)
@@ -6020,7 +6034,8 @@
             }
           else
             {
-              volatile double rcond_plus_one = rcond + 1.0;
+              // Prevent use of extra precision.
+              double rcond_plus_one = rcond + 1.0;
 
               if (rcond_plus_one == 1.0 || octave::math::isnan (rcond))
                 {
@@ -6086,8 +6101,8 @@
               octave_idx_type b_nr = b.rows ();
               octave_idx_type b_nc = b.cols ();
               int status = 0;
-              double *control = Control.fortran_vec ();
-              double *info = Info.fortran_vec ();
+              double *control = Control.rwdata ();
+              double *info = Info.rwdata ();
               const octave_idx_type *Ap = cidx ();
               const octave_idx_type *Ai = ridx ();
               const Complex *Ax = data ();
@@ -6223,7 +6238,7 @@
   else
     {
       // Print spparms("spumoni") info if requested
-      volatile int typ = mattype.type ();
+      int typ = mattype.type ();
       mattype.info ();
 
       if (typ == MatrixType::Hermitian)
@@ -6302,7 +6317,8 @@
             }
           else
             {
-              volatile double rcond_plus_one = rcond + 1.0;
+              // Prevent use of extra precision.
+              double rcond_plus_one = rcond + 1.0;
 
               if (rcond_plus_one == 1.0 || octave::math::isnan (rcond))
                 {
@@ -6360,15 +6376,15 @@
               octave_idx_type b_nr = b.rows ();
               octave_idx_type b_nc = b.cols ();
               int status = 0;
-              double *control = Control.fortran_vec ();
-              double *info = Info.fortran_vec ();
+              double *control = Control.rwdata ();
+              double *info = Info.rwdata ();
               const octave_idx_type *Ap = cidx ();
               const octave_idx_type *Ai = ridx ();
               const Complex *Ax = data ();
               const Complex *Bx = b.data ();
 
               retval.resize (b_nr, b_nc);
-              Complex *Xx = retval.fortran_vec ();
+              Complex *Xx = retval.rwdata ();
 
               for (octave_idx_type j = 0, iidx = 0; j < b_nc; j++, iidx += b_nr)
                 {
@@ -6441,7 +6457,7 @@
   else
     {
       // Print spparms("spumoni") info if requested
-      volatile int typ = mattype.type ();
+      int typ = mattype.type ();
       mattype.info ();
 
       if (typ == MatrixType::Hermitian)
@@ -6530,7 +6546,8 @@
             }
           else
             {
-              volatile double rcond_plus_one = rcond + 1.0;
+              // Prevent use of extra precision.
+              double rcond_plus_one = rcond + 1.0;
 
               if (rcond_plus_one == 1.0 || octave::math::isnan (rcond))
                 {
@@ -6596,8 +6613,8 @@
               octave_idx_type b_nr = b.rows ();
               octave_idx_type b_nc = b.cols ();
               int status = 0;
-              double *control = Control.fortran_vec ();
-              double *info = Info.fortran_vec ();
+              double *control = Control.rwdata ();
+              double *info = Info.rwdata ();
               const octave_idx_type *Ap = cidx ();
               const octave_idx_type *Ai = ridx ();
               const Complex *Ax = data ();
@@ -6665,7 +6682,8 @@
               retval.maybe_compress ();
 
               rcond = Info (UMFPACK_RCOND);
-              volatile double rcond_plus_one = rcond + 1.0;
+              // Prevent use of extra precision.
+              double rcond_plus_one = rcond + 1.0;
 
               if (status == UMFPACK_WARNING_singular_matrix
                   || rcond_plus_one == 1.0 || octave::math::isnan (rcond))
@@ -6756,12 +6774,8 @@
   if (singular_fallback && mattype.type (false) == MatrixType::Rectangular)
     {
       rcond = 1.;
-#if defined (USE_QRSOLVE)
-      retval = qrsolve (*this, b, err);
-#else
       retval = dmsolve<ComplexMatrix, SparseComplexMatrix, Matrix>
                (*this, b, err);
-#endif
     }
 
   return retval;
@@ -6821,12 +6835,8 @@
   if (singular_fallback && mattype.type (false) == MatrixType::Rectangular)
     {
       rcond = 1.;
-#if defined (USE_QRSOLVE)
-      retval = qrsolve (*this, b, err);
-#else
       retval = dmsolve<SparseComplexMatrix, SparseComplexMatrix, SparseMatrix>
                (*this, b, err);
-#endif
     }
 
   return retval;
@@ -6886,12 +6896,8 @@
   if (singular_fallback && mattype.type (false) == MatrixType::Rectangular)
     {
       rcond = 1.;
-#if defined (USE_QRSOLVE)
-      retval = qrsolve (*this, b, err);
-#else
       retval = dmsolve<ComplexMatrix, SparseComplexMatrix, ComplexMatrix>
                (*this, b, err);
-#endif
     }
 
   return retval;
@@ -6952,12 +6958,8 @@
   if (singular_fallback && mattype.type (false) == MatrixType::Rectangular)
     {
       rcond = 1.;
-#if defined (USE_QRSOLVE)
-      retval = qrsolve (*this, b, err);
-#else
       retval = dmsolve<SparseComplexMatrix, SparseComplexMatrix,
       SparseComplexMatrix> (*this, b, err);
-#endif
     }
 
   return retval;
--- a/liboctave/array/CSparse.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/CSparse.h	Mon Feb 26 23:30:33 2024 -0500
@@ -41,9 +41,7 @@
 #include "oct-cmplx.h"
 #include "mx-fwd.h"
 
-class
-OCTAVE_API
-SparseComplexMatrix : public MSparse<Complex>
+class OCTAVE_API SparseComplexMatrix : public MSparse<Complex>
 {
 public:
 
--- a/liboctave/array/DiagArray2.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/DiagArray2.h	Mon Feb 26 23:30:33 2024 -0500
@@ -37,9 +37,7 @@
 // produce unexpected results.
 
 template <typename T>
-class
-OCTAVE_API
-DiagArray2 : protected Array<T>
+class OCTAVE_API DiagArray2 : protected Array<T>
 {
 protected:
   octave_idx_type m_d1, m_d2;
@@ -168,7 +166,8 @@
 
   const T * data () const { return Array<T>::data (); }
 
-  T * fortran_vec () { return Array<T>::fortran_vec (); }
+  T * rwdata () { return Array<T>::rwdata (); }
+  inline T * fortran_vec () { return rwdata (); }
 
   void print_info (std::ostream& os, const std::string& prefix) const
   { Array<T>::print_info (os, prefix); }
--- a/liboctave/array/MArray.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/MArray.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -74,7 +74,7 @@
   octave_quit ();
 
   octave_idx_type len = idx.length (n);
-  idx.loop (len, _idxadds_helper<T> (this->fortran_vec (), val));
+  idx.loop (len, _idxadds_helper<T> (this->rwdata (), val));
 }
 
 template <typename T>
@@ -92,7 +92,7 @@
   octave_quit ();
 
   octave_idx_type len = std::min (idx.length (n), vals.numel ());
-  idx.loop (len, _idxadda_helper<T> (this->fortran_vec (), vals.data ()));
+  idx.loop (len, _idxadda_helper<T> (this->rwdata (), vals.data ()));
 }
 
 template <typename T, T op (typename ref_param<T>::type,
@@ -125,7 +125,7 @@
   octave_quit ();
 
   octave_idx_type len = std::min (idx.length (n), vals.numel ());
-  idx.loop (len, _idxbinop_helper<T, octave::math::min> (this->fortran_vec (),
+  idx.loop (len, _idxbinop_helper<T, octave::math::min> (this->rwdata (),
                                                          vals.data ()));
 }
 
@@ -144,7 +144,7 @@
   octave_quit ();
 
   octave_idx_type len = std::min (idx.length (n), vals.numel ());
-  idx.loop (len, _idxbinop_helper<T, octave::math::max> (this->fortran_vec (),
+  idx.loop (len, _idxbinop_helper<T, octave::math::max> (this->rwdata (),
                                                          vals.data ()));
 }
 
@@ -180,7 +180,7 @@
   if (ddv != sdv)
     (*current_liboctave_error_handler) ("accumdim: dimension mismatch");
 
-  T *dst = Array<T>::fortran_vec ();
+  T *dst = Array<T>::rwdata ();
   const T *src = vals.data ();
   octave_idx_type len = idx.length (ns);
 
--- a/liboctave/array/MArray.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/MArray.h	Mon Feb 26 23:30:33 2024 -0500
@@ -57,9 +57,7 @@
 
 //! Template for N-dimensional array classes with like-type math operators.
 template <typename T>
-class
-OCTARRAY_API
-MArray : public Array<T>
+class OCTARRAY_API MArray : public Array<T>
 {
 public:
 
--- a/liboctave/array/MDiagArray2.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/MDiagArray2.h	Mon Feb 26 23:30:33 2024 -0500
@@ -50,9 +50,7 @@
 
 //! Template for two dimensional diagonal array with math operators.
 template <typename T>
-class
-OCTAVE_API
-MDiagArray2 : public DiagArray2<T>
+class OCTAVE_API MDiagArray2 : public DiagArray2<T>
 {
 public:
 
--- a/liboctave/array/MSparse.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/MSparse.h	Mon Feb 26 23:30:33 2024 -0500
@@ -40,9 +40,7 @@
 
 // Two dimensional sparse array with math ops.
 template <typename T>
-class
-OCTAVE_API
-MSparse : public Sparse<T>
+class OCTAVE_API MSparse : public Sparse<T>
 {
 public:
 
--- a/liboctave/array/MatrixType.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/MatrixType.h	Mon Feb 26 23:30:33 2024 -0500
@@ -32,8 +32,7 @@
 
 #include "MSparse.h"
 
-class
-MatrixType
+class MatrixType
 {
 public:
   enum matrix_type
--- a/liboctave/array/PermMatrix.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/PermMatrix.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -169,7 +169,7 @@
 
   const octave_idx_type *p = data ();
   Array<octave_idx_type> res_pvec (dim_vector (n, 1), -1);
-  octave_idx_type *q = res_pvec.fortran_vec ();
+  octave_idx_type *q = res_pvec.rwdata ();
 
   for (octave_idx_type ics = 0; ics < n; ics++)
     {
--- a/liboctave/array/Range.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/Range.h	Mon Feb 26 23:30:33 2024 -0500
@@ -45,8 +45,7 @@
 // in ov.cc.
 
 template <typename T>
-class
-range<T, typename std::enable_if<std::is_floating_point<T>::value>::type>
+class range<T, typename std::enable_if<std::is_floating_point<T>::value>::type>
 {
 public:
 
@@ -250,9 +249,9 @@
         // Loop over all values in IDX, executing the lambda
         // expression for each index value.
 
-        T *array = retval.fortran_vec ();
+        T *array = retval.rwdata ();
 
-        idx.loop (n, [=, &array] (octave_idx_type i)
+        idx.loop (n, [this, &array] (octave_idx_type i)
         {
           if (i == 0)
             // Required for proper NaN handling.
--- a/liboctave/array/Sparse.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/Sparse.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -150,9 +150,9 @@
   // Always preserve space for 1 element.
   nz = (nz > 0 ? nz : 1);
 
-  // Skip reallocation if we have less than 1/frac extra elements to discard.
-  static const int frac = 5;
-  if (nz > m_nzmax || nz < m_nzmax - m_nzmax/frac)
+  // Skip reallocation if we have less than 1/FRAC extra elements to discard.
+  static const int FRAC = 5;
+  if (nz > m_nzmax || nz < m_nzmax - m_nzmax/FRAC)
     {
       // Reallocate.
       octave_idx_type min_nzmax = std::min (nz, m_nzmax);
@@ -271,7 +271,7 @@
     (*current_liboctave_error_handler)
       ("Sparse::Sparse (const Sparse&, const dim_vector&): dimension mismatch");
 
-  dim_vector old_dims = a.dims ();
+  const dim_vector& old_dims = a.dims ();
   octave_idx_type new_nzmax = a.nnz ();
   octave_idx_type new_nr = dv(0);
   octave_idx_type new_nc = dv(1);
@@ -1998,10 +1998,10 @@
               // Disassembly our matrix...
               Array<octave_idx_type> new_ri (dim_vector (new_nz, 1));
               Array<T> new_data (dim_vector (new_nz, 1));
-              std::copy_n (tmp.ridx (), nz, new_ri.fortran_vec ());
-              std::copy_n (tmp.data (), nz, new_data.fortran_vec ());
+              std::copy_n (tmp.ridx (), nz, new_ri.rwdata ());
+              std::copy_n (tmp.data (), nz, new_data.rwdata ());
               // ... insert new data (densified) ...
-              idx.copy_data (new_ri.fortran_vec () + nz);
+              idx.copy_data (new_ri.rwdata () + nz);
               new_data.assign (octave::idx_vector (nz, new_nz), rhs.array_value ());
               // ... reassembly.
               *this = Sparse<T, Alloc> (new_data, new_ri, 0, nr, nc, false);
--- a/liboctave/array/Sparse.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/Sparse.h	Mon Feb 26 23:30:33 2024 -0500
@@ -43,9 +43,7 @@
 // all the derived classes.
 
 template <typename T, typename Alloc>
-class
-OCTAVE_API
-Sparse
+class OCTAVE_API Sparse
 {
 public:
 
--- a/liboctave/array/boolMatrix.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/boolMatrix.h	Mon Feb 26 23:30:33 2024 -0500
@@ -33,9 +33,7 @@
 #include "mx-defs.h"
 #include "mx-op-decl.h"
 
-class
-OCTAVE_API
-boolMatrix : public boolNDArray
+class OCTAVE_API boolMatrix : public boolNDArray
 {
 public:
 
--- a/liboctave/array/boolNDArray.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/boolNDArray.h	Mon Feb 26 23:30:33 2024 -0500
@@ -33,9 +33,7 @@
 #include "mx-defs.h"
 #include "mx-op-decl.h"
 
-class
-OCTAVE_API
-boolNDArray : public Array<bool>
+class OCTAVE_API boolNDArray : public Array<bool>
 {
 public:
 
--- a/liboctave/array/boolSparse.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/boolSparse.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -178,7 +178,7 @@
       else
         {
           Array<octave_idx_type> tmp (dim_vector (nz, 1));
-          std::copy_n (ridx (), nz, tmp.fortran_vec ());
+          std::copy_n (ridx (), nz, tmp.rwdata ());
           retval = Sparse<bool> (Array<bool> (dim_vector (1, 1), true),
                                  octave::idx_vector (tmp),
                                  octave::idx_vector (0), nr, 1, false);
@@ -228,7 +228,7 @@
       else
         {
           Array<octave_idx_type> tmp (dim_vector (nz, 1));
-          std::copy_n (ridx (), nz, tmp.fortran_vec ());
+          std::copy_n (ridx (), nz, tmp.rwdata ());
           retval = Sparse<double> (Array<double> (dim_vector (1, 1), 1.0),
                                    octave::idx_vector (tmp),
                                    octave::idx_vector (0), nr, 1);
--- a/liboctave/array/boolSparse.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/boolSparse.h	Mon Feb 26 23:30:33 2024 -0500
@@ -35,9 +35,7 @@
 #include "boolNDArray.h"
 #include "mx-fwd.h"
 
-class
-OCTAVE_API
-SparseBoolMatrix : public Sparse<bool>
+class OCTAVE_API SparseBoolMatrix : public Sparse<bool>
 {
 public:
 
--- a/liboctave/array/chMatrix.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/chMatrix.h	Mon Feb 26 23:30:33 2024 -0500
@@ -36,9 +36,7 @@
 #include "mx-op-decl.h"
 #include "str-vec.h"
 
-class
-OCTAVE_API
-charMatrix : public charNDArray
+class OCTAVE_API charMatrix : public charNDArray
 {
   friend class ComplexMatrix;
 
--- a/liboctave/array/chNDArray.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/chNDArray.h	Mon Feb 26 23:30:33 2024 -0500
@@ -34,9 +34,7 @@
 #include "mx-op-decl.h"
 #include "str-vec.h"
 
-class
-OCTAVE_API
-charNDArray : public Array<char>
+class OCTAVE_API charNDArray : public Array<char>
 {
 public:
 
--- a/liboctave/array/dColVector.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/dColVector.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -196,7 +196,7 @@
         retval.fill (0.0);
       else
         {
-          double *y = retval.fortran_vec ();
+          double *y = retval.rwdata ();
 
           F77_XFCN (dgemv, DGEMV, (F77_CONST_CHAR_ARG2 ("N", 1),
                                    nr, nc, 1.0, m.data (), nr,
--- a/liboctave/array/dColVector.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/dColVector.h	Mon Feb 26 23:30:33 2024 -0500
@@ -31,9 +31,7 @@
 #include "MArray.h"
 #include "mx-defs.h"
 
-class
-OCTAVE_API
-ColumnVector : public MArray<double>
+class OCTAVE_API ColumnVector : public MArray<double>
 {
 public:
 
--- a/liboctave/array/dDiagMatrix.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/dDiagMatrix.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -268,7 +268,7 @@
   else if (z_count > 0)
     {
       info = -1;
-      element_type *data = retval.fortran_vec ();
+      element_type *data = retval.rwdata ();
       std::fill (data, data + len, octave::numeric_limits<double>::Inf ());
     }
 
--- a/liboctave/array/dDiagMatrix.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/dDiagMatrix.h	Mon Feb 26 23:30:33 2024 -0500
@@ -34,9 +34,7 @@
 #include "dRowVector.h"
 #include "mx-defs.h"
 
-class
-OCTAVE_API
-DiagMatrix : public MDiagArray2<double>
+class OCTAVE_API DiagMatrix : public MDiagArray2<double>
 {
 public:
 
--- a/liboctave/array/dMatrix.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/dMatrix.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -453,7 +453,7 @@
   octave_idx_type info;
   double rcon;
   MatrixType mattype (*this);
-  return inverse (mattype, info, rcon, 0, 0);
+  return inverse (mattype, info, rcon, false, false);
 }
 
 Matrix
@@ -461,12 +461,12 @@
 {
   double rcon;
   MatrixType mattype (*this);
-  return inverse (mattype, info, rcon, 0, 0);
+  return inverse (mattype, info, rcon, false, false);
 }
 
 Matrix
-Matrix::inverse (octave_idx_type& info, double& rcon, bool force,
-                 bool calc_cond) const
+Matrix::inverse (octave_idx_type& info, double& rcon,
+                 bool force, bool calc_cond) const
 {
   MatrixType mattype (*this);
   return inverse (mattype, info, rcon, force, calc_cond);
@@ -477,14 +477,14 @@
 {
   octave_idx_type info;
   double rcon;
-  return inverse (mattype, info, rcon, 0, 0);
+  return inverse (mattype, info, rcon, false, false);
 }
 
 Matrix
 Matrix::inverse (MatrixType& mattype, octave_idx_type& info) const
 {
   double rcon;
-  return inverse (mattype, info, rcon, 0, 0);
+  return inverse (mattype, info, rcon, false, false);
 }
 
 Matrix
@@ -503,7 +503,7 @@
   char uplo = (typ == MatrixType::Lower ? 'L' : 'U');
   char udiag = 'N';
   retval = *this;
-  double *tmp_data = retval.fortran_vec ();
+  double *tmp_data = retval.rwdata ();
 
   F77_INT tmp_info = 0;
 
@@ -559,10 +559,10 @@
     (*current_liboctave_error_handler) ("inverse requires square matrix");
 
   Array<F77_INT> ipvt (dim_vector (nr, 1));
-  F77_INT *pipvt = ipvt.fortran_vec ();
+  F77_INT *pipvt = ipvt.rwdata ();
 
   retval = *this;
-  double *tmp_data = retval.fortran_vec ();
+  double *tmp_data = retval.rwdata ();
 
   Array<double> z (dim_vector (1, 1));
   F77_INT lwork = -1;
@@ -571,12 +571,12 @@
 
   // Query the optimum work array size.
   F77_XFCN (dgetri, DGETRI, (nc, tmp_data, nr, pipvt,
-                             z.fortran_vec (), lwork, tmp_info));
+                             z.rwdata (), lwork, tmp_info));
 
   lwork = static_cast<F77_INT> (z(0));
   lwork = (lwork < 4 * nc ? 4 * nc : lwork);
   z.resize (dim_vector (lwork, 1));
-  double *pz = z.fortran_vec ();
+  double *pz = z.rwdata ();
 
   info = 0;
   tmp_info = 0;
@@ -605,7 +605,7 @@
           // Now calculate the condition number for non-singular matrix.
           char job = '1';
           Array<F77_INT> iz (dim_vector (nc, 1));
-          F77_INT *piz = iz.fortran_vec ();
+          F77_INT *piz = iz.rwdata ();
           F77_XFCN (dgecon, DGECON, (F77_CONST_CHAR_ARG2 (&job, 1),
                                      nc, tmp_data, nr, anorm,
                                      rcon, pz, piz, dgecon_info
@@ -752,7 +752,7 @@
     }
 
   const double *in (data ());
-  Complex *out (retval.fortran_vec ());
+  Complex *out (retval.rwdata ());
 
   octave::fftw::fft (in, out, npts, nsamples);
 
@@ -782,7 +782,7 @@
 
   ComplexMatrix tmp (*this);
   const Complex *in (tmp.data ());
-  Complex *out (retval.fortran_vec ());
+  Complex *out (retval.rwdata ());
 
   octave::fftw::ifft (in, out, npts, nsamples);
 
@@ -796,7 +796,7 @@
 
   const double *in = data ();
   ComplexMatrix retval (rows (), cols ());
-  octave::fftw::fftNd (in, retval.fortran_vec (), 2, dv);
+  octave::fftw::fftNd (in, retval.rwdata (), 2, dv);
 
   return retval;
 }
@@ -807,7 +807,7 @@
   dim_vector dv (rows (), cols ());
 
   ComplexMatrix retval (*this);
-  Complex *out (retval.fortran_vec ());
+  Complex *out (retval.rwdata ());
 
   octave::fftw::ifftNd (out, out, 2, dv);
 
@@ -891,7 +891,7 @@
   if (nr != nc)
     (*current_liboctave_error_handler) ("matrix must be square");
 
-  volatile int typ = mattype.type ();
+  int typ = mattype.type ();
 
   // Even though the matrix is marked as singular (Rectangular), we may still
   // get a useful number from the LU factorization, because it always completes.
@@ -909,7 +909,7 @@
   else if (typ == MatrixType::Hermitian)
     {
       Matrix atmp = *this;
-      double *tmp_data = atmp.fortran_vec ();
+      double *tmp_data = atmp.rwdata ();
 
       // Calculate the norm of the matrix for later use when determining rcon.
       double anorm;
@@ -936,9 +936,9 @@
           if (calc_cond)
             {
               Array<double> z (dim_vector (3 * nc, 1));
-              double *pz = z.fortran_vec ();
+              double *pz = z.rwdata ();
               Array<F77_INT> iz (dim_vector (nc, 1));
-              F77_INT *piz = iz.fortran_vec ();
+              F77_INT *piz = iz.rwdata ();
 
               F77_XFCN (dpocon, DPOCON, (F77_CONST_CHAR_ARG2 (&job, 1),
                                          nr, tmp_data, nr, anorm,
@@ -963,10 +963,10 @@
   if (typ == MatrixType::Full)
     {
       Array<F77_INT> ipvt (dim_vector (nr, 1));
-      F77_INT *pipvt = ipvt.fortran_vec ();
+      F77_INT *pipvt = ipvt.rwdata ();
 
       Matrix atmp = *this;
-      double *tmp_data = atmp.fortran_vec ();
+      double *tmp_data = atmp.rwdata ();
 
       info = 0;
       F77_INT tmp_info = 0;
@@ -994,9 +994,9 @@
               // Now calc the condition number for non-singular matrix.
               char job = '1';
               Array<double> z (dim_vector (4 * nc, 1));
-              double *pz = z.fortran_vec ();
+              double *pz = z.rwdata ();
               Array<F77_INT> iz (dim_vector (nc, 1));
-              F77_INT *piz = iz.fortran_vec ();
+              F77_INT *piz = iz.rwdata ();
 
               F77_XFCN (dgecon, DGECON, (F77_CONST_CHAR_ARG2 (&job, 1),
                                          nc, tmp_data, nr, anorm,
@@ -1046,7 +1046,7 @@
     rcon = octave::numeric_limits<double>::Inf ();
   else
     {
-      volatile int typ = mattype.type ();
+      int typ = mattype.type ();
 
       if (typ == MatrixType::Unknown)
         typ = mattype.type (*this);
@@ -1061,9 +1061,9 @@
           char dia = 'N';
 
           Array<double> z (dim_vector (3 * nc, 1));
-          double *pz = z.fortran_vec ();
+          double *pz = z.rwdata ();
           Array<F77_INT> iz (dim_vector (nc, 1));
-          F77_INT *piz = iz.fortran_vec ();
+          F77_INT *piz = iz.rwdata ();
 
           F77_XFCN (dtrcon, DTRCON, (F77_CONST_CHAR_ARG2 (&norm, 1),
                                      F77_CONST_CHAR_ARG2 (&uplo, 1),
@@ -1089,9 +1089,9 @@
           char dia = 'N';
 
           Array<double> z (dim_vector (3 * nc, 1));
-          double *pz = z.fortran_vec ();
+          double *pz = z.rwdata ();
           Array<F77_INT> iz (dim_vector (nc, 1));
-          F77_INT *piz = iz.fortran_vec ();
+          F77_INT *piz = iz.rwdata ();
 
           F77_XFCN (dtrcon, DTRCON, (F77_CONST_CHAR_ARG2 (&norm, 1),
                                      F77_CONST_CHAR_ARG2 (&uplo, 1),
@@ -1118,7 +1118,7 @@
               char job = 'L';
 
               Matrix atmp = *this;
-              double *tmp_data = atmp.fortran_vec ();
+              double *tmp_data = atmp.rwdata ();
 
               anorm = norm1 (atmp);
 
@@ -1135,9 +1135,9 @@
               else
                 {
                   Array<double> z (dim_vector (3 * nc, 1));
-                  double *pz = z.fortran_vec ();
+                  double *pz = z.rwdata ();
                   Array<F77_INT> iz (dim_vector (nc, 1));
-                  F77_INT *piz = iz.fortran_vec ();
+                  F77_INT *piz = iz.rwdata ();
 
                   F77_XFCN (dpocon, DPOCON, (F77_CONST_CHAR_ARG2 (&job, 1),
                                              nr, tmp_data, nr, anorm,
@@ -1154,18 +1154,18 @@
               F77_INT info = 0;
 
               Matrix atmp = *this;
-              double *tmp_data = atmp.fortran_vec ();
+              double *tmp_data = atmp.rwdata ();
 
               Array<F77_INT> ipvt (dim_vector (nr, 1));
-              F77_INT *pipvt = ipvt.fortran_vec ();
+              F77_INT *pipvt = ipvt.rwdata ();
 
               if (anorm < 0.0)
                 anorm = norm1 (atmp);
 
               Array<double> z (dim_vector (4 * nc, 1));
-              double *pz = z.fortran_vec ();
+              double *pz = z.rwdata ();
               Array<F77_INT> iz (dim_vector (nc, 1));
-              F77_INT *piz = iz.fortran_vec ();
+              F77_INT *piz = iz.rwdata ();
 
               F77_XFCN (dgetrf, DGETRF, (nr, nr, tmp_data, nr, pipvt, info));
 
@@ -1215,7 +1215,7 @@
     retval = Matrix (nc, b_nc, 0.0);
   else
     {
-      volatile int typ = mattype.type ();
+      int typ = mattype.type ();
 
       if (typ != MatrixType::Permuted_Upper && typ != MatrixType::Upper)
         (*current_liboctave_error_handler) ("incorrect matrix type");
@@ -1230,7 +1230,7 @@
       const double *tmp_data = data ();
 
       retval = b;
-      double *result = retval.fortran_vec ();
+      double *result = retval.rwdata ();
 
       char uplo = 'U';
       char trans = get_blas_char (transt);
@@ -1256,9 +1256,9 @@
           dia = 'N';
 
           Array<double> z (dim_vector (3 * nc, 1));
-          double *pz = z.fortran_vec ();
+          double *pz = z.rwdata ();
           Array<F77_INT> iz (dim_vector (nc, 1));
-          F77_INT *piz = iz.fortran_vec ();
+          F77_INT *piz = iz.rwdata ();
 
           F77_XFCN (dtrcon, DTRCON, (F77_CONST_CHAR_ARG2 (&norm, 1),
                                      F77_CONST_CHAR_ARG2 (&uplo, 1),
@@ -1274,8 +1274,8 @@
           if (info != 0)
             info = -2;
 
-          // FIXME: Why calculate this, rather than just compare to 0.0?
-          volatile double rcond_plus_one = rcon + 1.0;
+          // Prevent use of extra precision.
+          double rcond_plus_one = rcon + 1.0;
 
           if (rcond_plus_one == 1.0 || octave::math::isnan (rcon))
             {
@@ -1313,7 +1313,7 @@
     retval = Matrix (nc, b_nc, 0.0);
   else
     {
-      volatile int typ = mattype.type ();
+      int typ = mattype.type ();
 
       if (typ != MatrixType::Permuted_Lower && typ != MatrixType::Lower)
         (*current_liboctave_error_handler) ("incorrect matrix type");
@@ -1328,7 +1328,7 @@
       const double *tmp_data = data ();
 
       retval = b;
-      double *result = retval.fortran_vec ();
+      double *result = retval.rwdata ();
 
       char uplo = 'L';
       char trans = get_blas_char (transt);
@@ -1354,9 +1354,9 @@
           dia = 'N';
 
           Array<double> z (dim_vector (3 * nc, 1));
-          double *pz = z.fortran_vec ();
+          double *pz = z.rwdata ();
           Array<F77_INT> iz (dim_vector (nc, 1));
-          F77_INT *piz = iz.fortran_vec ();
+          F77_INT *piz = iz.rwdata ();
 
           F77_XFCN (dtrcon, DTRCON, (F77_CONST_CHAR_ARG2 (&norm, 1),
                                      F77_CONST_CHAR_ARG2 (&uplo, 1),
@@ -1372,7 +1372,8 @@
           if (info != 0)
             info = -2;
 
-          volatile double rcond_plus_one = rcon + 1.0;
+          // Prevent use of extra precision.
+          double rcond_plus_one = rcon + 1.0;
 
           if (rcond_plus_one == 1.0 || octave::math::isnan (rcon))
             {
@@ -1407,7 +1408,7 @@
     retval = Matrix (nc, b.cols (), 0.0);
   else
     {
-      volatile int typ = mattype.type ();
+      int typ = mattype.type ();
 
       // Calculate the norm of the matrix for later use when determining rcon.
       double anorm = -1.0;
@@ -1418,7 +1419,7 @@
           char job = 'L';
 
           Matrix atmp = *this;
-          double *tmp_data = atmp.fortran_vec ();
+          double *tmp_data = atmp.rwdata ();
 
           // The norm of the matrix for later use when determining rcon.
           if (calc_cond)
@@ -1446,9 +1447,9 @@
               if (calc_cond)
                 {
                   Array<double> z (dim_vector (3 * nc, 1));
-                  double *pz = z.fortran_vec ();
+                  double *pz = z.rwdata ();
                   Array<F77_INT> iz (dim_vector (nc, 1));
-                  F77_INT *piz = iz.fortran_vec ();
+                  F77_INT *piz = iz.rwdata ();
 
                   F77_XFCN (dpocon, DPOCON, (F77_CONST_CHAR_ARG2 (&job, 1),
                                              nr, tmp_data, nr, anorm,
@@ -1460,7 +1461,8 @@
                   if (info != 0)
                     info = -2;
 
-                  volatile double rcond_plus_one = rcon + 1.0;
+                  // Prevent use of extra precision.
+                  double rcond_plus_one = rcon + 1.0;
 
                   if (rcond_plus_one == 1.0 || octave::math::isnan (rcon))
                     {
@@ -1476,7 +1478,7 @@
               if (info == 0)
                 {
                   retval = b;
-                  double *result = retval.fortran_vec ();
+                  double *result = retval.rwdata ();
 
                   F77_INT b_nr = octave::to_f77_int (b.rows ());
                   F77_INT b_nc = octave::to_f77_int (b.cols ());
@@ -1501,18 +1503,18 @@
           info = 0;
 
           Array<F77_INT> ipvt (dim_vector (nr, 1));
-          F77_INT *pipvt = ipvt.fortran_vec ();
+          F77_INT *pipvt = ipvt.rwdata ();
 
           Matrix atmp = *this;
-          double *tmp_data = atmp.fortran_vec ();
+          double *tmp_data = atmp.rwdata ();
 
           if (calc_cond && anorm < 0.0)
             anorm = norm1 (atmp);
 
           Array<double> z (dim_vector (4 * nc, 1));
-          double *pz = z.fortran_vec ();
+          double *pz = z.rwdata ();
           Array<F77_INT> iz (dim_vector (nc, 1));
-          F77_INT *piz = iz.fortran_vec ();
+          F77_INT *piz = iz.rwdata ();
 
           F77_INT tmp_info = 0;
 
@@ -1549,7 +1551,8 @@
                   if (info != 0)
                     info = -2;
 
-                  volatile double rcond_plus_one = rcon + 1.0;
+                  // Prevent use of extra precision.
+                  double rcond_plus_one = rcon + 1.0;
 
                   if (rcond_plus_one == 1.0 || octave::math::isnan (rcon))
                     {
@@ -1563,7 +1566,7 @@
               if (info == 0)
                 {
                   retval = b;
-                  double *result = retval.fortran_vec ();
+                  double *result = retval.rwdata ();
 
                   F77_INT b_nr = octave::to_f77_int (b.rows ());
                   F77_INT b_nc = octave::to_f77_int (b.cols ());
@@ -1675,7 +1678,7 @@
   octave_idx_type nel = m*n;
   Matrix retval (m, 2*n);
   const Complex *cmd = cm.data ();
-  double *rd = retval.fortran_vec ();
+  double *rd = retval.rwdata ();
   for (octave_idx_type i = 0; i < nel; i++)
     {
       rd[i] = std::real (cmd[i]);
@@ -1692,7 +1695,7 @@
   octave_idx_type nel = m*n;
   ComplexMatrix retval (m, n);
   const double *smd = sm.data ();
-  Complex *rd = retval.fortran_vec ();
+  Complex *rd = retval.rwdata ();
   for (octave_idx_type i = 0; i < nel; i++)
     rd[i] = Complex (smd[i], smd[nel+i]);
   return retval;
@@ -1944,7 +1947,7 @@
     retval = Matrix (n, b_nc, 0.0);
   else
     {
-      volatile F77_INT minmn = (m < n ? m : n);
+      F77_INT minmn = (m < n ? m : n);
       F77_INT maxmn = (m > n ? m : n);
       rcon = -1.0;
       if (m != n)
@@ -1959,11 +1962,11 @@
         retval = b;
 
       Matrix atmp = *this;
-      double *tmp_data = atmp.fortran_vec ();
-
-      double *pretval = retval.fortran_vec ();
+      double *tmp_data = atmp.rwdata ();
+
+      double *pretval = retval.rwdata ();
       Array<double> s (dim_vector (minmn, 1));
-      double *ps = s.fortran_vec ();
+      double *ps = s.rwdata ();
 
       // Ask DGELSD what the dimension of WORK should be.
       F77_INT lwork = -1;
@@ -1998,13 +2001,13 @@
       if (liwork < 1)
         liwork = 1;
       Array<F77_INT> iwork (dim_vector (liwork, 1));
-      F77_INT *piwork = iwork.fortran_vec ();
+      F77_INT *piwork = iwork.rwdata ();
 
       F77_INT tmp_info = 0;
       F77_INT tmp_rank = 0;
 
       F77_XFCN (dgelsd, DGELSD, (m, n, nrhs, tmp_data, m, pretval, maxmn,
-                                 ps, rcon, tmp_rank, work.fortran_vec (),
+                                 ps, rcon, tmp_rank, work.rwdata (),
                                  lwork, piwork, tmp_info));
 
       info = tmp_info;
@@ -2066,7 +2069,7 @@
         {
           F77_XFCN (dgelsd, DGELSD, (m, n, nrhs, tmp_data, m, pretval,
                                      maxmn, ps, rcon, tmp_rank,
-                                     work.fortran_vec (), lwork,
+                                     work.rwdata (), lwork,
                                      piwork, tmp_info));
 
           info = tmp_info;
@@ -2166,7 +2169,7 @@
     retval = ColumnVector (n, 0.0);
   else
     {
-      volatile F77_INT minmn = (m < n ? m : n);
+      F77_INT minmn = (m < n ? m : n);
       F77_INT maxmn = (m > n ? m : n);
       rcon = -1.0;
 
@@ -2181,11 +2184,11 @@
         retval = b;
 
       Matrix atmp = *this;
-      double *tmp_data = atmp.fortran_vec ();
-
-      double *pretval = retval.fortran_vec ();
+      double *tmp_data = atmp.rwdata ();
+
+      double *pretval = retval.rwdata ();
       Array<double> s (dim_vector (minmn, 1));
-      double *ps = s.fortran_vec ();
+      double *ps = s.rwdata ();
 
       // Ask DGELSD what the dimension of WORK should be.
       F77_INT lwork = -1;
@@ -2213,13 +2216,13 @@
       if (liwork < 1)
         liwork = 1;
       Array<F77_INT> iwork (dim_vector (liwork, 1));
-      F77_INT *piwork = iwork.fortran_vec ();
+      F77_INT *piwork = iwork.rwdata ();
 
       F77_INT tmp_info = 0;
       F77_INT tmp_rank = 0;
 
       F77_XFCN (dgelsd, DGELSD, (m, n, nrhs, tmp_data, m, pretval, maxmn,
-                                 ps, rcon, tmp_rank, work.fortran_vec (),
+                                 ps, rcon, tmp_rank, work.rwdata (),
                                  lwork, piwork, tmp_info));
 
       info = tmp_info;
@@ -2230,7 +2233,7 @@
 
       F77_XFCN (dgelsd, DGELSD, (m, n, nrhs, tmp_data, m, pretval,
                                  maxmn, ps, rcon, tmp_rank,
-                                 work.fortran_vec (), lwork,
+                                 work.rwdata (), lwork,
                                  piwork, tmp_info));
 
       info = tmp_info;
@@ -2338,7 +2341,7 @@
       F77_INT a_len = octave::to_f77_int (a.numel ());
 
       retval = Matrix (len, a_len);
-      double *c = retval.fortran_vec ();
+      double *c = retval.rwdata ();
 
       F77_XFCN (dgemm, DGEMM, (F77_CONST_CHAR_ARG2 ("N", 1),
                                F77_CONST_CHAR_ARG2 ("N", 1),
@@ -2730,9 +2733,9 @@
   double scale;
   F77_INT info;
 
-  double *pa = sch_a.fortran_vec ();
-  double *pb = sch_b.fortran_vec ();
-  double *px = cx.fortran_vec ();
+  double *pa = sch_a.rwdata ();
+  double *pb = sch_b.rwdata ();
+  double *px = cx.rwdata ();
 
   F77_XFCN (dtrsyl, DTRSYL, (F77_CONST_CHAR_ARG2 ("N", 1),
                              F77_CONST_CHAR_ARG2 ("N", 1),
@@ -2807,7 +2810,7 @@
       F77_INT lda = octave::to_f77_int (a.rows ());
 
       retval = Matrix (a_nr, b_nc);
-      double *c = retval.fortran_vec ();
+      double *c = retval.rwdata ();
 
       const char ctra = get_blas_trans_arg (tra);
       F77_XFCN (dsyrk, DSYRK, (F77_CONST_CHAR_ARG2 ("U", 1),
@@ -2829,7 +2832,7 @@
       F77_INT tdb = octave::to_f77_int (b.cols ());
 
       retval = Matrix (a_nr, b_nc);
-      double *c = retval.fortran_vec ();
+      double *c = retval.rwdata ();
 
       if (b_nc == 1)
         {
--- a/liboctave/array/dMatrix.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/dMatrix.h	Mon Feb 26 23:30:33 2024 -0500
@@ -36,9 +36,7 @@
 #include "mx-defs.h"
 #include "mx-op-decl.h"
 
-class
-OCTAVE_API
-Matrix : public NDArray
+class OCTAVE_API Matrix : public NDArray
 {
 public:
 
@@ -171,8 +169,8 @@
   OCTAVE_API Matrix inverse () const;
   OCTAVE_API Matrix inverse (octave_idx_type& info) const;
   OCTAVE_API Matrix
-  inverse (octave_idx_type& info, double& rcon, bool force = false,
-           bool calc_cond = true) const;
+  inverse (octave_idx_type& info, double& rcon,
+           bool force = false, bool calc_cond = true) const;
 
   OCTAVE_API Matrix inverse (MatrixType& mattype) const;
   OCTAVE_API Matrix inverse (MatrixType& mattype, octave_idx_type& info) const;
--- a/liboctave/array/dNDArray.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/dNDArray.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -49,7 +49,7 @@
 {
   const octave_idx_type *pa = a.data ();
   resize (a.dims ());
-  double *ptmp = fortran_vec ();
+  double *ptmp = rwdata ();
   if (negative_to_nan)
     {
       double nan_val = lo_ieee_nan_value ();
@@ -99,7 +99,7 @@
 ComplexNDArray
 NDArray::fourier (int dim) const
 {
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
 
   if (dim > dv.ndims () || dim < 0)
     return ComplexNDArray ();
@@ -117,7 +117,7 @@
 
   const double *in (data ());
   ComplexNDArray retval (dv);
-  Complex *out (retval.fortran_vec ());
+  Complex *out (retval.rwdata ());
 
   // Need to be careful here about the distance between fft's
   for (octave_idx_type k = 0; k < nloop; k++)
@@ -130,7 +130,7 @@
 ComplexNDArray
 NDArray::ifourier (int dim) const
 {
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
 
   if (dim > dv.ndims () || dim < 0)
     return ComplexNDArray ();
@@ -147,7 +147,7 @@
   octave_idx_type dist = (stride == 1 ? n : 1);
 
   ComplexNDArray retval (*this);
-  Complex *out (retval.fortran_vec ());
+  Complex *out (retval.rwdata ());
 
   // Need to be careful here about the distance between fft's
   for (octave_idx_type k = 0; k < nloop; k++)
@@ -160,14 +160,14 @@
 ComplexNDArray
 NDArray::fourier2d () const
 {
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
   if (dv.ndims () < 2)
     return ComplexNDArray ();
 
   dim_vector dv2 (dv(0), dv(1));
   const double *in = data ();
   ComplexNDArray retval (dv);
-  Complex *out = retval.fortran_vec ();
+  Complex *out = retval.rwdata ();
   octave_idx_type howmany = numel () / dv(0) / dv(1);
   octave_idx_type dist = dv(0) * dv(1);
 
@@ -180,13 +180,13 @@
 ComplexNDArray
 NDArray::ifourier2d () const
 {
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
   if (dv.ndims () < 2)
     return ComplexNDArray ();
 
   dim_vector dv2 (dv(0), dv(1));
   ComplexNDArray retval (*this);
-  Complex *out = retval.fortran_vec ();
+  Complex *out = retval.rwdata ();
   octave_idx_type howmany = numel () / dv(0) / dv(1);
   octave_idx_type dist = dv(0) * dv(1);
 
@@ -199,12 +199,12 @@
 ComplexNDArray
 NDArray::fourierNd () const
 {
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
   int rank = dv.ndims ();
 
   const double *in (data ());
   ComplexNDArray retval (dv);
-  Complex *out (retval.fortran_vec ());
+  Complex *out (retval.rwdata ());
 
   octave::fftw::fftNd (in, out, rank, dv);
 
@@ -214,13 +214,13 @@
 ComplexNDArray
 NDArray::ifourierNd () const
 {
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
   int rank = dv.ndims ();
 
   ComplexNDArray tmp (*this);
-  Complex *in (tmp.fortran_vec ());
+  Complex *in (tmp.rwdata ());
   ComplexNDArray retval (dv);
-  Complex *out (retval.fortran_vec ());
+  Complex *out (retval.rwdata ());
 
   octave::fftw::ifftNd (in, out, rank, dv);
 
--- a/liboctave/array/dNDArray.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/dNDArray.h	Mon Feb 26 23:30:33 2024 -0500
@@ -34,9 +34,7 @@
 #include "mx-defs.h"
 #include "mx-op-decl.h"
 
-class
-OCTAVE_API
-NDArray : public MArray<double>
+class OCTAVE_API NDArray : public MArray<double>
 {
 public:
 
--- a/liboctave/array/dRowVector.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/dRowVector.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -190,7 +190,7 @@
       F77_INT ld = a_nr;
 
       retval.resize (a_nc);
-      double *y = retval.fortran_vec ();
+      double *y = retval.rwdata ();
 
       F77_XFCN (dgemv, DGEMV, (F77_CONST_CHAR_ARG2 ("T", 1),
                                a_nr, a_nc, 1.0, a.data (),
--- a/liboctave/array/dRowVector.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/dRowVector.h	Mon Feb 26 23:30:33 2024 -0500
@@ -31,9 +31,7 @@
 #include "MArray.h"
 #include "mx-defs.h"
 
-class
-OCTAVE_API
-RowVector : public MArray<double>
+class OCTAVE_API RowVector : public MArray<double>
 {
 public:
 
--- a/liboctave/array/dSparse.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/dSparse.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -55,12 +55,7 @@
 
 #include "Sparse-perm-op-defs.h"
 
-// Define whether to use a basic QR solver or one that uses a Dulmange
-// Mendelsohn factorization to separate the problem into under-determined,
-// well-determined and over-determined parts and solves them separately
-#if ! defined (USE_QRSOLVE)
-#  include "sparse-dmsolve.h"
-#endif
+#include "sparse-dmsolve.h"
 
 SparseMatrix::SparseMatrix (const SparseBoolMatrix& a)
   : MSparse<double> (a.rows (), a.cols (), a.nnz ())
@@ -193,7 +188,7 @@
 SparseMatrix::max (Array<octave_idx_type>& idx_arg, int dim) const
 {
   SparseMatrix result;
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
   octave_idx_type nr = dv(0);
   octave_idx_type nc = dv(1);
 
@@ -344,7 +339,7 @@
 SparseMatrix::min (Array<octave_idx_type>& idx_arg, int dim) const
 {
   SparseMatrix result;
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
   octave_idx_type nr = dv(0);
   octave_idx_type nc = dv(1);
 
@@ -1043,7 +1038,7 @@
 
       // Setup the control parameters
       Matrix Control (UMFPACK_CONTROL, 1);
-      double *control = Control.fortran_vec ();
+      double *control = Control.rwdata ();
       UMFPACK_DNAME (defaults) (control);
 
       double tmp = octave::sparse_params::get_key ("spumoni");
@@ -1078,7 +1073,7 @@
 
       void *Symbolic;
       Matrix Info (1, UMFPACK_INFO);
-      double *info = Info.fortran_vec ();
+      double *info = Info.rwdata ();
       int status = UMFPACK_DNAME (qsymbolic) (nr, nc,
                                               octave::to_suitesparse_intptr (Ap),
                                               octave::to_suitesparse_intptr (Ai),
@@ -1662,7 +1657,8 @@
             octave::warn_singular_matrix (rcond);
         }
 
-      volatile double rcond_plus_one = rcond + 1.0;
+      // Prevent use of extra precision.
+      double rcond_plus_one = rcond + 1.0;
 
       if (rcond_plus_one == 1.0 || octave::math::isnan (rcond))
         {
@@ -1944,7 +1940,8 @@
             octave::warn_singular_matrix (rcond);
         }
 
-      volatile double rcond_plus_one = rcond + 1.0;
+      // Prevent use of extra precision.
+      double rcond_plus_one = rcond + 1.0;
 
       if (rcond_plus_one == 1.0 || octave::math::isnan (rcond))
         {
@@ -2175,7 +2172,8 @@
             octave::warn_singular_matrix (rcond);
         }
 
-      volatile double rcond_plus_one = rcond + 1.0;
+      // Prevent use of extra precision.
+      double rcond_plus_one = rcond + 1.0;
 
       if (rcond_plus_one == 1.0 || octave::math::isnan (rcond))
         {
@@ -2459,7 +2457,8 @@
             octave::warn_singular_matrix (rcond);
         }
 
-      volatile double rcond_plus_one = rcond + 1.0;
+      // Prevent use of extra precision.
+      double rcond_plus_one = rcond + 1.0;
 
       if (rcond_plus_one == 1.0 || octave::math::isnan (rcond))
         {
@@ -2712,7 +2711,8 @@
             octave::warn_singular_matrix (rcond);
         }
 
-      volatile double rcond_plus_one = rcond + 1.0;
+      // Prevent use of extra precision.
+      double rcond_plus_one = rcond + 1.0;
 
       if (rcond_plus_one == 1.0 || octave::math::isnan (rcond))
         {
@@ -3012,7 +3012,8 @@
             octave::warn_singular_matrix (rcond);
         }
 
-      volatile double rcond_plus_one = rcond + 1.0;
+      // Prevent use of extra precision.
+      double rcond_plus_one = rcond + 1.0;
 
       if (rcond_plus_one == 1.0 || octave::math::isnan (rcond))
         {
@@ -3266,7 +3267,8 @@
             octave::warn_singular_matrix (rcond);
         }
 
-      volatile double rcond_plus_one = rcond + 1.0;
+      // Prevent use of extra precision.
+      double rcond_plus_one = rcond + 1.0;
 
       if (rcond_plus_one == 1.0 || octave::math::isnan (rcond))
         {
@@ -3568,7 +3570,8 @@
             octave::warn_singular_matrix (rcond);
         }
 
-      volatile double rcond_plus_one = rcond + 1.0;
+      // Prevent use of extra precision.
+      double rcond_plus_one = rcond + 1.0;
 
       if (rcond_plus_one == 1.0 || octave::math::isnan (rcond))
         {
@@ -3611,7 +3614,7 @@
   else
     {
       // Print spparms("spumoni") info if requested
-      volatile int typ = mattype.type ();
+      int typ = mattype.type ();
       mattype.info ();
 
       if (typ == MatrixType::Tridiagonal_Hermitian)
@@ -3656,7 +3659,7 @@
           F77_INT b_nc = octave::to_f77_int (b.cols ());
 
           retval = b;
-          double *result = retval.fortran_vec ();
+          double *result = retval.rwdata ();
 
           F77_INT tmp_err = 0;
 
@@ -3721,7 +3724,7 @@
           F77_INT b_nc = octave::to_f77_int (b.cols ());
 
           retval = b;
-          double *result = retval.fortran_vec ();
+          double *result = retval.rwdata ();
 
           F77_INT tmp_err = 0;
 
@@ -3789,7 +3792,7 @@
           OCTAVE_LOCAL_BUFFER (double, D, nr);
           OCTAVE_LOCAL_BUFFER (double, DL, nr - 1);
           Array<F77_INT> ipvt (dim_vector (nr, 1));
-          F77_INT *pipvt = ipvt.fortran_vec ();
+          F77_INT *pipvt = ipvt.rwdata ();
 
           if (mattype.is_dense ())
             {
@@ -3848,15 +3851,15 @@
             {
               rcond = 1.0;
               char job = 'N';
-              volatile octave_idx_type x_nz = b.nnz ();
+              octave_idx_type x_nz = b.nnz ();
               octave_idx_type b_nc = b.cols ();
               retval = SparseMatrix (nr, b_nc, x_nz);
               retval.xcidx (0) = 0;
-              volatile octave_idx_type ii = 0;
+              octave_idx_type ii = 0;
 
               OCTAVE_LOCAL_BUFFER (double, work, nr);
 
-              for (volatile octave_idx_type j = 0; j < b_nc; j++)
+              for (octave_idx_type j = 0; j < b_nc; j++)
                 {
                   for (octave_idx_type i = 0; i < nr; i++)
                     work[i] = 0.;
@@ -3931,7 +3934,7 @@
   else
     {
       // Print spparms("spumoni") info if requested
-      volatile int typ = mattype.type ();
+      int typ = mattype.type ();
       mattype.info ();
 
       if (typ == MatrixType::Tridiagonal_Hermitian)
@@ -3978,7 +3981,7 @@
           rcond = 1.;
 
           retval = b;
-          Complex *result = retval.fortran_vec ();
+          Complex *result = retval.rwdata ();
 
           F77_INT tmp_err = 0;
 
@@ -4044,7 +4047,7 @@
           rcond = 1.;
 
           retval = b;
-          Complex *result = retval.fortran_vec ();
+          Complex *result = retval.rwdata ();
 
           F77_INT tmp_err = 0;
 
@@ -4113,7 +4116,7 @@
           OCTAVE_LOCAL_BUFFER (double, D, nr);
           OCTAVE_LOCAL_BUFFER (double, DL, nr - 1);
           Array<F77_INT> ipvt (dim_vector (nr, 1));
-          F77_INT *pipvt = ipvt.fortran_vec ();
+          F77_INT *pipvt = ipvt.rwdata ();
 
           if (mattype.is_dense ())
             {
@@ -4181,12 +4184,12 @@
 
               // Take a first guess that the number of nonzero terms
               // will be as many as in b
-              volatile octave_idx_type x_nz = b.nnz ();
-              volatile octave_idx_type ii = 0;
+              octave_idx_type x_nz = b.nnz ();
+              octave_idx_type ii = 0;
               retval = SparseComplexMatrix (b_nr, b_nc, x_nz);
 
               retval.xcidx (0) = 0;
-              for (volatile octave_idx_type j = 0; j < b_nc; j++)
+              for (octave_idx_type j = 0; j < b_nc; j++)
                 {
 
                   for (F77_INT i = 0; i < b_nr; i++)
@@ -4288,7 +4291,7 @@
   else
     {
       // Print spparms("spumoni") info if requested
-      volatile int typ = mattype.type ();
+      int typ = mattype.type ();
       mattype.info ();
 
       if (typ == MatrixType::Banded_Hermitian)
@@ -4296,7 +4299,7 @@
           F77_INT n_lower = octave::to_f77_int (mattype.nlower ());
           F77_INT ldm = n_lower + 1;
           Matrix m_band (ldm, nc);
-          double *tmp_data = m_band.fortran_vec ();
+          double *tmp_data = m_band.rwdata ();
 
           if (! mattype.is_dense ())
             {
@@ -4345,9 +4348,9 @@
               if (calc_cond)
                 {
                   Array<double> z (dim_vector (3 * nr, 1));
-                  double *pz = z.fortran_vec ();
+                  double *pz = z.rwdata ();
                   Array<F77_INT> iz (dim_vector (nr, 1));
-                  F77_INT *piz = iz.fortran_vec ();
+                  F77_INT *piz = iz.rwdata ();
 
                   F77_XFCN (dpbcon, DPBCON,
                             (F77_CONST_CHAR_ARG2 (&job, 1),
@@ -4360,7 +4363,8 @@
                   if (err != 0)
                     err = -2;
 
-                  volatile double rcond_plus_one = rcond + 1.0;
+                  // Prevent use of extra precision.
+                  double rcond_plus_one = rcond + 1.0;
 
                   if (rcond_plus_one == 1.0 || octave::math::isnan (rcond))
                     {
@@ -4381,7 +4385,7 @@
               if (err == 0)
                 {
                   retval = b;
-                  double *result = retval.fortran_vec ();
+                  double *result = retval.rwdata ();
 
                   F77_INT b_nr = octave::to_f77_int (b.rows ());
                   F77_INT b_nc = octave::to_f77_int (b.cols ());
@@ -4413,7 +4417,7 @@
           F77_INT ldm = n_upper + 2 * n_lower + 1;
 
           Matrix m_band (ldm, nc);
-          double *tmp_data = m_band.fortran_vec ();
+          double *tmp_data = m_band.rwdata ();
 
           if (! mattype.is_dense ())
             {
@@ -4445,7 +4449,7 @@
           F77_INT tmp_nr = octave::to_f77_int (nr);
 
           Array<F77_INT> ipvt (dim_vector (nr, 1));
-          F77_INT *pipvt = ipvt.fortran_vec ();
+          F77_INT *pipvt = ipvt.rwdata ();
 
           F77_INT tmp_err = 0;
 
@@ -4475,9 +4479,9 @@
                 {
                   char job = '1';
                   Array<double> z (dim_vector (3 * nr, 1));
-                  double *pz = z.fortran_vec ();
+                  double *pz = z.rwdata ();
                   Array<F77_INT> iz (dim_vector (nr, 1));
-                  F77_INT *piz = iz.fortran_vec ();
+                  F77_INT *piz = iz.rwdata ();
 
                   F77_INT tmp_nc = octave::to_f77_int (nc);
 
@@ -4492,7 +4496,8 @@
                   if (err != 0)
                     err = -2;
 
-                  volatile double rcond_plus_one = rcond + 1.0;
+                  // Prevent use of extra precision.
+                  double rcond_plus_one = rcond + 1.0;
 
                   if (rcond_plus_one == 1.0 || octave::math::isnan (rcond))
                     {
@@ -4513,7 +4518,7 @@
               if (err == 0)
                 {
                   retval = b;
-                  double *result = retval.fortran_vec ();
+                  double *result = retval.rwdata ();
 
                   F77_INT b_nr = octave::to_f77_int (b.rows ());
                   F77_INT b_nc = octave::to_f77_int (b.cols ());
@@ -4557,7 +4562,7 @@
   else
     {
       // Print spparms("spumoni") info if requested
-      volatile int typ = mattype.type ();
+      int typ = mattype.type ();
       mattype.info ();
 
       if (typ == MatrixType::Banded_Hermitian)
@@ -4566,7 +4571,7 @@
           F77_INT ldm = octave::to_f77_int (n_lower + 1);
 
           Matrix m_band (ldm, nc);
-          double *tmp_data = m_band.fortran_vec ();
+          double *tmp_data = m_band.rwdata ();
 
           if (! mattype.is_dense ())
             {
@@ -4613,9 +4618,9 @@
               if (calc_cond)
                 {
                   Array<double> z (dim_vector (3 * nr, 1));
-                  double *pz = z.fortran_vec ();
+                  double *pz = z.rwdata ();
                   Array<F77_INT> iz (dim_vector (nr, 1));
-                  F77_INT *piz = iz.fortran_vec ();
+                  F77_INT *piz = iz.rwdata ();
 
                   F77_XFCN (dpbcon, DPBCON,
                             (F77_CONST_CHAR_ARG2 (&job, 1),
@@ -4628,7 +4633,8 @@
                   if (err != 0)
                     err = -2;
 
-                  volatile double rcond_plus_one = rcond + 1.0;
+                  // Prevent use of extra precision.
+                  double rcond_plus_one = rcond + 1.0;
 
                   if (rcond_plus_one == 1.0 || octave::math::isnan (rcond))
                     {
@@ -4654,12 +4660,12 @@
 
                   // Take a first guess that the number of nonzero terms
                   // will be as many as in b
-                  volatile octave_idx_type x_nz = b.nnz ();
-                  volatile octave_idx_type ii = 0;
+                  octave_idx_type x_nz = b.nnz ();
+                  octave_idx_type ii = 0;
                   retval = SparseMatrix (b_nr, b_nc, x_nz);
 
                   retval.xcidx (0) = 0;
-                  for (volatile octave_idx_type j = 0; j < b_nc; j++)
+                  for (octave_idx_type j = 0; j < b_nc; j++)
                     {
                       for (F77_INT i = 0; i < b_nr; i++)
                         Bx[i] = b.elem (i, j);
@@ -4716,7 +4722,7 @@
           F77_INT ldm = octave::to_f77_int (n_upper + 2 * n_lower + 1);
 
           Matrix m_band (ldm, nc);
-          double *tmp_data = m_band.fortran_vec ();
+          double *tmp_data = m_band.rwdata ();
 
           if (! mattype.is_dense ())
             {
@@ -4749,7 +4755,7 @@
           F77_INT tmp_nr = octave::to_f77_int (nr);
 
           Array<F77_INT> ipvt (dim_vector (nr, 1));
-          F77_INT *pipvt = ipvt.fortran_vec ();
+          F77_INT *pipvt = ipvt.rwdata ();
 
           F77_INT tmp_err = 0;
 
@@ -4777,9 +4783,9 @@
                 {
                   char job = '1';
                   Array<double> z (dim_vector (3 * nr, 1));
-                  double *pz = z.fortran_vec ();
+                  double *pz = z.rwdata ();
                   Array<F77_INT> iz (dim_vector (nr, 1));
-                  F77_INT *piz = iz.fortran_vec ();
+                  F77_INT *piz = iz.rwdata ();
 
                   F77_INT tmp_nc = octave::to_f77_int (nc);
 
@@ -4794,7 +4800,8 @@
                   if (err != 0)
                     err = -2;
 
-                  volatile double rcond_plus_one = rcond + 1.0;
+                  // Prevent use of extra precision.
+                  double rcond_plus_one = rcond + 1.0;
 
                   if (rcond_plus_one == 1.0 || octave::math::isnan (rcond))
                     {
@@ -4815,15 +4822,15 @@
               if (err == 0)
                 {
                   char job = 'N';
-                  volatile octave_idx_type x_nz = b.nnz ();
+                  octave_idx_type x_nz = b.nnz ();
                   octave_idx_type b_nc = b.cols ();
                   retval = SparseMatrix (nr, b_nc, x_nz);
                   retval.xcidx (0) = 0;
-                  volatile octave_idx_type ii = 0;
+                  octave_idx_type ii = 0;
 
                   OCTAVE_LOCAL_BUFFER (double, work, nr);
 
-                  for (volatile octave_idx_type j = 0; j < b_nc; j++)
+                  for (octave_idx_type j = 0; j < b_nc; j++)
                     {
                       for (octave_idx_type i = 0; i < nr; i++)
                         work[i] = 0.;
@@ -4897,7 +4904,7 @@
   else
     {
       // Print spparms("spumoni") info if requested
-      volatile int typ = mattype.type ();
+      int typ = mattype.type ();
       mattype.info ();
 
       if (typ == MatrixType::Banded_Hermitian)
@@ -4906,7 +4913,7 @@
           F77_INT ldm = n_lower + 1;
 
           Matrix m_band (ldm, nc);
-          double *tmp_data = m_band.fortran_vec ();
+          double *tmp_data = m_band.rwdata ();
 
           if (! mattype.is_dense ())
             {
@@ -4955,9 +4962,9 @@
               if (calc_cond)
                 {
                   Array<double> z (dim_vector (3 * nr, 1));
-                  double *pz = z.fortran_vec ();
+                  double *pz = z.rwdata ();
                   Array<F77_INT> iz (dim_vector (nr, 1));
-                  F77_INT *piz = iz.fortran_vec ();
+                  F77_INT *piz = iz.rwdata ();
 
                   F77_XFCN (dpbcon, DPBCON,
                             (F77_CONST_CHAR_ARG2 (&job, 1),
@@ -4970,7 +4977,8 @@
                   if (err != 0)
                     err = -2;
 
-                  volatile double rcond_plus_one = rcond + 1.0;
+                  // Prevent use of extra precision.
+                  double rcond_plus_one = rcond + 1.0;
 
                   if (rcond_plus_one == 1.0 || octave::math::isnan (rcond))
                     {
@@ -4998,7 +5006,7 @@
 
                   retval.resize (b_nr, b_nc);
 
-                  for (volatile octave_idx_type j = 0; j < b_nc; j++)
+                  for (octave_idx_type j = 0; j < b_nc; j++)
                     {
                       for (F77_INT i = 0; i < b_nr; i++)
                         {
@@ -5056,7 +5064,7 @@
           F77_INT ldm = n_upper + 2 * n_lower + 1;
 
           Matrix m_band (ldm, nc);
-          double *tmp_data = m_band.fortran_vec ();
+          double *tmp_data = m_band.rwdata ();
 
           if (! mattype.is_dense ())
             {
@@ -5089,7 +5097,7 @@
           F77_INT tmp_nr = octave::to_f77_int (nr);
 
           Array<F77_INT> ipvt (dim_vector (nr, 1));
-          F77_INT *pipvt = ipvt.fortran_vec ();
+          F77_INT *pipvt = ipvt.rwdata ();
 
           F77_INT tmp_err = 0;
 
@@ -5117,9 +5125,9 @@
                 {
                   char job = '1';
                   Array<double> z (dim_vector (3 * nr, 1));
-                  double *pz = z.fortran_vec ();
+                  double *pz = z.rwdata ();
                   Array<F77_INT> iz (dim_vector (nr, 1));
-                  F77_INT *piz = iz.fortran_vec ();
+                  F77_INT *piz = iz.rwdata ();
 
                   F77_INT tmp_nc = octave::to_f77_int (nc);
 
@@ -5134,7 +5142,8 @@
                   if (err != 0)
                     err = -2;
 
-                  volatile double rcond_plus_one = rcond + 1.0;
+                  // Prevent use of extra precision.
+                  double rcond_plus_one = rcond + 1.0;
 
                   if (rcond_plus_one == 1.0 || octave::math::isnan (rcond))
                     {
@@ -5162,7 +5171,7 @@
                   OCTAVE_LOCAL_BUFFER (double, Bz, nr);
                   OCTAVE_LOCAL_BUFFER (double, Bx, nr);
 
-                  for (volatile octave_idx_type j = 0; j < b_nc; j++)
+                  for (octave_idx_type j = 0; j < b_nc; j++)
                     {
                       for (octave_idx_type i = 0; i < nr; i++)
                         {
@@ -5221,7 +5230,7 @@
   else
     {
       // Print spparms("spumoni") info if requested
-      volatile int typ = mattype.type ();
+      int typ = mattype.type ();
       mattype.info ();
 
       if (typ == MatrixType::Banded_Hermitian)
@@ -5230,7 +5239,7 @@
           F77_INT ldm = n_lower + 1;
 
           Matrix m_band (ldm, nc);
-          double *tmp_data = m_band.fortran_vec ();
+          double *tmp_data = m_band.rwdata ();
 
           if (! mattype.is_dense ())
             {
@@ -5280,9 +5289,9 @@
               if (calc_cond)
                 {
                   Array<double> z (dim_vector (3 * nr, 1));
-                  double *pz = z.fortran_vec ();
+                  double *pz = z.rwdata ();
                   Array<F77_INT> iz (dim_vector (nr, 1));
-                  F77_INT *piz = iz.fortran_vec ();
+                  F77_INT *piz = iz.rwdata ();
 
                   F77_XFCN (dpbcon, DPBCON,
                             (F77_CONST_CHAR_ARG2 (&job, 1),
@@ -5295,7 +5304,8 @@
                   if (err != 0)
                     err = -2;
 
-                  volatile double rcond_plus_one = rcond + 1.0;
+                  // Prevent use of extra precision.
+                  double rcond_plus_one = rcond + 1.0;
 
                   if (rcond_plus_one == 1.0 || octave::math::isnan (rcond))
                     {
@@ -5322,12 +5332,12 @@
 
                   // Take a first guess that the number of nonzero terms
                   // will be as many as in b
-                  volatile octave_idx_type x_nz = b.nnz ();
-                  volatile octave_idx_type ii = 0;
+                  octave_idx_type x_nz = b.nnz ();
+                  octave_idx_type ii = 0;
                   retval = SparseComplexMatrix (b_nr, b_nc, x_nz);
 
                   retval.xcidx (0) = 0;
-                  for (volatile octave_idx_type j = 0; j < b_nc; j++)
+                  for (octave_idx_type j = 0; j < b_nc; j++)
                     {
 
                       for (F77_INT i = 0; i < b_nr; i++)
@@ -5410,7 +5420,7 @@
           F77_INT ldm = n_upper + 2 * n_lower + 1;
 
           Matrix m_band (ldm, nc);
-          double *tmp_data = m_band.fortran_vec ();
+          double *tmp_data = m_band.rwdata ();
 
           if (! mattype.is_dense ())
             {
@@ -5443,7 +5453,7 @@
           F77_INT tmp_nr = octave::to_f77_int (nr);
 
           Array<F77_INT> ipvt (dim_vector (nr, 1));
-          F77_INT *pipvt = ipvt.fortran_vec ();
+          F77_INT *pipvt = ipvt.rwdata ();
 
           F77_INT tmp_err = 0;
 
@@ -5471,9 +5481,9 @@
                 {
                   char job = '1';
                   Array<double> z (dim_vector (3 * nr, 1));
-                  double *pz = z.fortran_vec ();
+                  double *pz = z.rwdata ();
                   Array<F77_INT> iz (dim_vector (nr, 1));
-                  F77_INT *piz = iz.fortran_vec ();
+                  F77_INT *piz = iz.rwdata ();
 
                   F77_INT tmp_nc = octave::to_f77_int (nc);
 
@@ -5488,7 +5498,8 @@
                   if (err != 0)
                     err = -2;
 
-                  volatile double rcond_plus_one = rcond + 1.0;
+                  // Prevent use of extra precision.
+                  double rcond_plus_one = rcond + 1.0;
 
                   if (rcond_plus_one == 1.0 || octave::math::isnan (rcond))
                     {
@@ -5509,17 +5520,17 @@
               if (err == 0)
                 {
                   char job = 'N';
-                  volatile octave_idx_type x_nz = b.nnz ();
+                  octave_idx_type x_nz = b.nnz ();
                   F77_INT b_nr = octave::to_f77_int (b.rows ());
                   octave_idx_type b_nc = b.cols ();
                   retval = SparseComplexMatrix (nr, b_nc, x_nz);
                   retval.xcidx (0) = 0;
-                  volatile octave_idx_type ii = 0;
+                  octave_idx_type ii = 0;
 
                   OCTAVE_LOCAL_BUFFER (double, Bx, nr);
                   OCTAVE_LOCAL_BUFFER (double, Bz, nr);
 
-                  for (volatile octave_idx_type j = 0; j < b_nc; j++)
+                  for (octave_idx_type j = 0; j < b_nc; j++)
                     {
                       for (octave_idx_type i = 0; i < nr; i++)
                         {
@@ -5598,7 +5609,7 @@
 
   // Setup the control parameters
   Control = Matrix (UMFPACK_CONTROL, 1);
-  double *control = Control.fortran_vec ();
+  double *control = Control.rwdata ();
   UMFPACK_DNAME (defaults) (control);
 
   double tmp = octave::sparse_params::get_key ("spumoni");
@@ -5631,7 +5642,7 @@
 
   void *Symbolic;
   Info = Matrix (1, UMFPACK_INFO);
-  double *info = Info.fortran_vec ();
+  double *info = Info.rwdata ();
   int status = UMFPACK_DNAME (qsymbolic) (nr, nc,
                                           octave::to_suitesparse_intptr (Ap),
                                           octave::to_suitesparse_intptr (Ai),
@@ -5662,7 +5673,9 @@
         rcond = Info (UMFPACK_RCOND);
       else
         rcond = 1.;
-      volatile double rcond_plus_one = rcond + 1.0;
+
+      // Prevent use of extra precision.
+      double rcond_plus_one = rcond + 1.0;
 
       if (status == UMFPACK_WARNING_singular_matrix
           || rcond_plus_one == 1.0 || octave::math::isnan (rcond))
@@ -5734,7 +5747,7 @@
   else
     {
       // Print spparms("spumoni") info if requested
-      volatile int typ = mattype.type ();
+      int typ = mattype.type ();
       mattype.info ();
 
       if (typ == MatrixType::Hermitian)
@@ -5813,7 +5826,8 @@
             }
           else
             {
-              volatile double rcond_plus_one = rcond + 1.0;
+              // Prevent use of extra precision.
+              double rcond_plus_one = rcond + 1.0;
 
               if (rcond_plus_one == 1.0 || octave::math::isnan (rcond))
                 {
@@ -5870,12 +5884,12 @@
               Control (UMFPACK_IRSTEP) = 1;
               const double *Bx = b.data ();
               retval.resize (b.rows (), b.cols ());
-              double *result = retval.fortran_vec ();
+              double *result = retval.rwdata ();
               octave_idx_type b_nr = b.rows ();
               octave_idx_type b_nc = b.cols ();
               int status = 0;
-              double *control = Control.fortran_vec ();
-              double *info = Info.fortran_vec ();
+              double *control = Control.rwdata ();
+              double *info = Info.rwdata ();
               const octave_idx_type *Ap = cidx ();
               const octave_idx_type *Ai = ridx ();
               const double *Ax = data ();
@@ -5945,7 +5959,7 @@
   else
     {
       // Print spparms("spumoni") info if requested
-      volatile int typ = mattype.type ();
+      int typ = mattype.type ();
       mattype.info ();
 
       if (typ == MatrixType::Hermitian)
@@ -6034,7 +6048,8 @@
             }
           else
             {
-              volatile double rcond_plus_one = rcond + 1.0;
+              // Prevent use of extra precision.
+              double rcond_plus_one = rcond + 1.0;
 
               if (rcond_plus_one == 1.0 || octave::math::isnan (rcond))
                 {
@@ -6100,8 +6115,8 @@
               octave_idx_type b_nr = b.rows ();
               octave_idx_type b_nc = b.cols ();
               int status = 0;
-              double *control = Control.fortran_vec ();
-              double *info = Info.fortran_vec ();
+              double *control = Control.rwdata ();
+              double *info = Info.rwdata ();
               const octave_idx_type *Ap = cidx ();
               const octave_idx_type *Ai = ridx ();
               const double *Ax = data ();
@@ -6208,7 +6223,7 @@
   else
     {
       // Print spparms("spumoni") info if requested
-      volatile int typ = mattype.type ();
+      int typ = mattype.type ();
       mattype.info ();
 
       if (typ == MatrixType::Hermitian)
@@ -6287,7 +6302,8 @@
             }
           else
             {
-              volatile double rcond_plus_one = rcond + 1.0;
+              // Prevent use of extra precision.
+              double rcond_plus_one = rcond + 1.0;
 
               if (rcond_plus_one == 1.0 || octave::math::isnan (rcond))
                 {
@@ -6345,8 +6361,8 @@
               octave_idx_type b_nr = b.rows ();
               octave_idx_type b_nc = b.cols ();
               int status = 0;
-              double *control = Control.fortran_vec ();
-              double *info = Info.fortran_vec ();
+              double *control = Control.rwdata ();
+              double *info = Info.rwdata ();
               const octave_idx_type *Ap = cidx ();
               const octave_idx_type *Ai = ridx ();
               const double *Ax = data ();
@@ -6440,7 +6456,7 @@
   else
     {
       // Print spparms("spumoni") info if requested
-      volatile int typ = mattype.type ();
+      int typ = mattype.type ();
       mattype.info ();
 
       if (typ == MatrixType::Hermitian)
@@ -6529,7 +6545,8 @@
             }
           else
             {
-              volatile double rcond_plus_one = rcond + 1.0;
+              // Prevent use of extra precision.
+              double rcond_plus_one = rcond + 1.0;
 
               if (rcond_plus_one == 1.0 || octave::math::isnan (rcond))
                 {
@@ -6595,8 +6612,8 @@
               octave_idx_type b_nr = b.rows ();
               octave_idx_type b_nc = b.cols ();
               int status = 0;
-              double *control = Control.fortran_vec ();
-              double *info = Info.fortran_vec ();
+              double *control = Control.rwdata ();
+              double *info = Info.rwdata ();
               const octave_idx_type *Ap = cidx ();
               const octave_idx_type *Ai = ridx ();
               const double *Ax = data ();
@@ -6748,11 +6765,7 @@
   if (singular_fallback && mattype.type (false) == MatrixType::Rectangular)
     {
       rcond = 1.;
-#if defined (USE_QRSOLVE)
-      retval = qrsolve (*this, b, err);
-#else
       retval = dmsolve<Matrix, SparseMatrix, Matrix> (*this, b, err);
-#endif
     }
 
   return retval;
@@ -6812,12 +6825,8 @@
   if (singular_fallback && mattype.type (false) == MatrixType::Rectangular)
     {
       rcond = 1.;
-#if defined (USE_QRSOLVE)
-      retval = qrsolve (*this, b, err);
-#else
       retval = dmsolve<SparseMatrix, SparseMatrix, SparseMatrix>
                (*this, b, err);
-#endif
     }
 
   return retval;
@@ -6877,12 +6886,8 @@
   if (singular_fallback && mattype.type (false) == MatrixType::Rectangular)
     {
       rcond = 1.;
-#if defined (USE_QRSOLVE)
-      retval = qrsolve (*this, b, err);
-#else
       retval = dmsolve<ComplexMatrix, SparseMatrix, ComplexMatrix>
                (*this, b, err);
-#endif
     }
 
   return retval;
@@ -6942,12 +6947,8 @@
   if (singular_fallback && mattype.type (false) == MatrixType::Rectangular)
     {
       rcond = 1.;
-#if defined (USE_QRSOLVE)
-      retval = qrsolve (*this, b, err);
-#else
       retval = dmsolve<SparseComplexMatrix, SparseMatrix, SparseComplexMatrix>
                (*this, b, err);
-#endif
     }
 
   return retval;
@@ -7207,7 +7208,7 @@
   if (neg_zero)
     {
       for (octave_idx_type i = 0; i < nel; i++)
-        if (lo_ieee_signbit (data (i)))
+        if (octave::math::signbit (data (i)))
           return true;
     }
   else
--- a/liboctave/array/dSparse.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/dSparse.h	Mon Feb 26 23:30:33 2024 -0500
@@ -40,8 +40,7 @@
 #include "dMatrix.h"
 #include "dNDArray.h"
 
-class
-SparseMatrix : public MSparse<double>
+class SparseMatrix : public MSparse<double>
 {
 public:
 
--- a/liboctave/array/dim-vector.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/dim-vector.h	Mon Feb 26 23:30:33 2024 -0500
@@ -88,9 +88,7 @@
 //! that rep points to the beginning of dims to grant faster access
 //! (reinterpret_cast is assumed to be an inexpensive operation).
 
-class
-OCTAVE_API
-dim_vector
+class OCTAVE_API dim_vector
 {
 private:
 
--- a/liboctave/array/fCColVector.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/fCColVector.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -265,7 +265,7 @@
   if (len == 0)
     return *this;
 
-  FloatComplex *d = fortran_vec (); // Ensures only 1 reference to my privates!
+  FloatComplex *d = rwdata (); // Ensures only 1 reference to my privates!
 
   mx_inline_add2 (len, d, a.data ());
   return *this;
@@ -284,7 +284,7 @@
   if (len == 0)
     return *this;
 
-  FloatComplex *d = fortran_vec (); // Ensures only 1 reference to my privates!
+  FloatComplex *d = rwdata (); // Ensures only 1 reference to my privates!
 
   mx_inline_sub2 (len, d, a.data ());
   return *this;
@@ -320,7 +320,7 @@
         retval.fill (0.0);
       else
         {
-          FloatComplex *y = retval.fortran_vec ();
+          FloatComplex *y = retval.rwdata ();
 
           F77_XFCN (cgemv, CGEMV, (F77_CONST_CHAR_ARG2 ("N", 1),
                                    nr, nc, 1.0f, F77_CONST_CMPLX_ARG (m.data ()), nr,
--- a/liboctave/array/fCColVector.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/fCColVector.h	Mon Feb 26 23:30:33 2024 -0500
@@ -31,9 +31,7 @@
 #include "MArray.h"
 #include "mx-defs.h"
 
-class
-OCTAVE_API
-FloatComplexColumnVector : public MArray<FloatComplex>
+class OCTAVE_API FloatComplexColumnVector : public MArray<FloatComplex>
 {
   friend class FloatComplexMatrix;
   friend class FloatComplexRowVector;
--- a/liboctave/array/fCDiagMatrix.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/fCDiagMatrix.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -380,7 +380,7 @@
   if (r == 0 || c == 0)
     return *this;
 
-  FloatComplex *d = fortran_vec (); // Ensures only 1 reference to my privates!
+  FloatComplex *d = rwdata (); // Ensures only 1 reference to my privates!
 
   mx_inline_add2 (length (), d, a.data ());
   return *this;
--- a/liboctave/array/fCDiagMatrix.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/fCDiagMatrix.h	Mon Feb 26 23:30:33 2024 -0500
@@ -36,9 +36,7 @@
 #include "fRowVector.h"
 #include "mx-defs.h"
 
-class
-OCTAVE_API
-FloatComplexDiagMatrix : public MDiagArray2<FloatComplex>
+class OCTAVE_API FloatComplexDiagMatrix : public MDiagArray2<FloatComplex>
 {
 public:
 
--- a/liboctave/array/fCMatrix.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/fCMatrix.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -742,7 +742,7 @@
   octave_idx_type info;
   float rcon;
   MatrixType mattype (*this);
-  return inverse (mattype, info, rcon, 0, 0);
+  return inverse (mattype, info, rcon, false, false);
 }
 
 FloatComplexMatrix
@@ -750,7 +750,7 @@
 {
   float rcon;
   MatrixType mattype (*this);
-  return inverse (mattype, info, rcon, 0, 0);
+  return inverse (mattype, info, rcon, false, false);
 }
 
 FloatComplexMatrix
@@ -766,14 +766,14 @@
 {
   octave_idx_type info;
   float rcon;
-  return inverse (mattype, info, rcon, 0, 0);
+  return inverse (mattype, info, rcon, false, false);
 }
 
 FloatComplexMatrix
 FloatComplexMatrix::inverse (MatrixType& mattype, octave_idx_type& info) const
 {
   float rcon;
-  return inverse (mattype, info, rcon, 0, 0);
+  return inverse (mattype, info, rcon, false, false);
 }
 
 FloatComplexMatrix
@@ -792,7 +792,7 @@
   char uplo = (typ == MatrixType::Lower ? 'L' : 'U');
   char udiag = 'N';
   retval = *this;
-  FloatComplex *tmp_data = retval.fortran_vec ();
+  FloatComplex *tmp_data = retval.rwdata ();
 
   F77_INT tmp_info = 0;
 
@@ -848,10 +848,10 @@
     (*current_liboctave_error_handler) ("inverse requires square matrix");
 
   Array<F77_INT> ipvt (dim_vector (nr, 1));
-  F77_INT *pipvt = ipvt.fortran_vec ();
+  F77_INT *pipvt = ipvt.rwdata ();
 
   retval = *this;
-  FloatComplex *tmp_data = retval.fortran_vec ();
+  FloatComplex *tmp_data = retval.rwdata ();
 
   Array<FloatComplex> z (dim_vector (1, 1));
   F77_INT lwork = -1;
@@ -861,13 +861,13 @@
   F77_INT tmp_info = 0;
 
   F77_XFCN (cgetri, CGETRI, (nc, F77_CMPLX_ARG (tmp_data), nr, pipvt,
-                             F77_CMPLX_ARG (z.fortran_vec ()), lwork,
+                             F77_CMPLX_ARG (z.rwdata ()), lwork,
                              tmp_info));
 
   lwork = static_cast<F77_INT> (std::real (z(0)));
   lwork = (lwork < 2 * nc ? 2 * nc : lwork);
   z.resize (dim_vector (lwork, 1));
-  FloatComplex *pz = z.fortran_vec ();
+  FloatComplex *pz = z.rwdata ();
 
   info = 0;
   tmp_info = 0;
@@ -902,7 +902,7 @@
           // Now calculate the condition number for non-singular matrix.
           char job = '1';
           Array<float> rz (dim_vector (2 * nc, 1));
-          float *prz = rz.fortran_vec ();
+          float *prz = rz.rwdata ();
           F77_XFCN (cgecon, CGECON, (F77_CONST_CHAR_ARG2 (&job, 1),
                                      nc, F77_CMPLX_ARG (tmp_data), nr, anorm,
                                      rcon, F77_CMPLX_ARG (pz), prz, cgecon_info
@@ -1066,7 +1066,7 @@
     }
 
   const FloatComplex *in (data ());
-  FloatComplex *out (retval.fortran_vec ());
+  FloatComplex *out (retval.rwdata ());
 
   octave::fftw::fft (in, out, npts, nsamples);
 
@@ -1095,7 +1095,7 @@
     }
 
   const FloatComplex *in (data ());
-  FloatComplex *out (retval.fortran_vec ());
+  FloatComplex *out (retval.rwdata ());
 
   octave::fftw::ifft (in, out, npts, nsamples);
 
@@ -1109,7 +1109,7 @@
 
   FloatComplexMatrix retval (rows (), cols ());
   const FloatComplex *in (data ());
-  FloatComplex *out (retval.fortran_vec ());
+  FloatComplex *out (retval.rwdata ());
 
   octave::fftw::fftNd (in, out, 2, dv);
 
@@ -1123,7 +1123,7 @@
 
   FloatComplexMatrix retval (rows (), cols ());
   const FloatComplex *in (data ());
-  FloatComplex *out (retval.fortran_vec ());
+  FloatComplex *out (retval.rwdata ());
 
   octave::fftw::ifftNd (in, out, 2, dv);
 
@@ -1209,7 +1209,7 @@
   if (nr != nc)
     (*current_liboctave_error_handler) ("matrix must be square");
 
-  volatile int typ = mattype.type ();
+  int typ = mattype.type ();
 
   // Even though the matrix is marked as singular (Rectangular), we may
   // still get a useful number from the LU factorization, because it always
@@ -1228,7 +1228,7 @@
   else if (typ == MatrixType::Hermitian)
     {
       FloatComplexMatrix atmp = *this;
-      FloatComplex *tmp_data = atmp.fortran_vec ();
+      FloatComplex *tmp_data = atmp.rwdata ();
 
       float anorm;
       if (calc_cond)
@@ -1254,9 +1254,9 @@
           if (calc_cond)
             {
               Array<FloatComplex> z (dim_vector (2 * nc, 1));
-              FloatComplex *pz = z.fortran_vec ();
+              FloatComplex *pz = z.rwdata ();
               Array<float> rz (dim_vector (nc, 1));
-              float *prz = rz.fortran_vec ();
+              float *prz = rz.rwdata ();
 
               F77_XFCN (cpocon, CPOCON, (F77_CONST_CHAR_ARG2 (&job, 1),
                                          nr, F77_CMPLX_ARG (tmp_data), nr, anorm,
@@ -1281,10 +1281,10 @@
   if (typ == MatrixType::Full)
     {
       Array<F77_INT> ipvt (dim_vector (nr, 1));
-      F77_INT *pipvt = ipvt.fortran_vec ();
+      F77_INT *pipvt = ipvt.rwdata ();
 
       FloatComplexMatrix atmp = *this;
-      FloatComplex *tmp_data = atmp.fortran_vec ();
+      FloatComplex *tmp_data = atmp.rwdata ();
 
       info = 0;
 
@@ -1318,9 +1318,9 @@
               // Now calc the condition number for non-singular matrix.
               char job = '1';
               Array<FloatComplex> z (dim_vector (2 * nc, 1));
-              FloatComplex *pz = z.fortran_vec ();
+              FloatComplex *pz = z.rwdata ();
               Array<float> rz (dim_vector (2 * nc, 1));
-              float *prz = rz.fortran_vec ();
+              float *prz = rz.rwdata ();
 
               F77_XFCN (cgecon, CGECON, (F77_CONST_CHAR_ARG2 (&job, 1),
                                          nc, F77_CMPLX_ARG (tmp_data), nr, anorm,
@@ -1370,7 +1370,7 @@
     rcon = octave::numeric_limits<float>::Inf ();
   else
     {
-      volatile int typ = mattype.type ();
+      int typ = mattype.type ();
 
       if (typ == MatrixType::Unknown)
         typ = mattype.type (*this);
@@ -1385,9 +1385,9 @@
           char dia = 'N';
 
           Array<FloatComplex> z (dim_vector (2 * nc, 1));
-          FloatComplex *pz = z.fortran_vec ();
+          FloatComplex *pz = z.rwdata ();
           Array<float> rz (dim_vector (nc, 1));
-          float *prz = rz.fortran_vec ();
+          float *prz = rz.rwdata ();
 
           F77_XFCN (ctrcon, CTRCON, (F77_CONST_CHAR_ARG2 (&norm, 1),
                                      F77_CONST_CHAR_ARG2 (&uplo, 1),
@@ -1413,9 +1413,9 @@
           char dia = 'N';
 
           Array<FloatComplex> z (dim_vector (2 * nc, 1));
-          FloatComplex *pz = z.fortran_vec ();
+          FloatComplex *pz = z.rwdata ();
           Array<float> rz (dim_vector (nc, 1));
-          float *prz = rz.fortran_vec ();
+          float *prz = rz.rwdata ();
 
           F77_XFCN (ctrcon, CTRCON, (F77_CONST_CHAR_ARG2 (&norm, 1),
                                      F77_CONST_CHAR_ARG2 (&uplo, 1),
@@ -1442,7 +1442,7 @@
               char job = 'L';
 
               FloatComplexMatrix atmp = *this;
-              FloatComplex *tmp_data = atmp.fortran_vec ();
+              FloatComplex *tmp_data = atmp.rwdata ();
 
               anorm = norm1 (atmp);
 
@@ -1460,9 +1460,9 @@
               else
                 {
                   Array<FloatComplex> z (dim_vector (2 * nc, 1));
-                  FloatComplex *pz = z.fortran_vec ();
+                  FloatComplex *pz = z.rwdata ();
                   Array<float> rz (dim_vector (nc, 1));
-                  float *prz = rz.fortran_vec ();
+                  float *prz = rz.rwdata ();
 
                   F77_XFCN (cpocon, CPOCON, (F77_CONST_CHAR_ARG2 (&job, 1),
                                              nr, F77_CMPLX_ARG (tmp_data), nr, anorm,
@@ -1479,18 +1479,18 @@
               F77_INT info = 0;
 
               FloatComplexMatrix atmp = *this;
-              FloatComplex *tmp_data = atmp.fortran_vec ();
+              FloatComplex *tmp_data = atmp.rwdata ();
 
               Array<F77_INT> ipvt (dim_vector (nr, 1));
-              F77_INT *pipvt = ipvt.fortran_vec ();
+              F77_INT *pipvt = ipvt.rwdata ();
 
               if (anorm < 0.0)
                 anorm = norm1 (atmp);
 
               Array<FloatComplex> z (dim_vector (2 * nc, 1));
-              FloatComplex *pz = z.fortran_vec ();
+              FloatComplex *pz = z.rwdata ();
               Array<float> rz (dim_vector (2 * nc, 1));
-              float *prz = rz.fortran_vec ();
+              float *prz = rz.rwdata ();
 
               // Work around bug #45577, LAPACK crashes Octave if norm is NaN
               if (octave::math::isnan (anorm))
@@ -1546,7 +1546,7 @@
     retval = FloatComplexMatrix (nc, b_nc, FloatComplex (0.0, 0.0));
   else
     {
-      volatile int typ = mattype.type ();
+      int typ = mattype.type ();
 
       if (typ == MatrixType::Permuted_Upper || typ == MatrixType::Upper)
         {
@@ -1561,7 +1561,7 @@
               const FloatComplex *tmp_data = data ();
 
               retval = b;
-              FloatComplex *result = retval.fortran_vec ();
+              FloatComplex *result = retval.rwdata ();
 
               char uplo = 'U';
               char trans = get_blas_char (transt);
@@ -1587,9 +1587,9 @@
                   dia = 'N';
 
                   Array<FloatComplex> z (dim_vector (2 * nc, 1));
-                  FloatComplex *pz = z.fortran_vec ();
+                  FloatComplex *pz = z.rwdata ();
                   Array<float> rz (dim_vector (nc, 1));
-                  float *prz = rz.fortran_vec ();
+                  float *prz = rz.rwdata ();
 
                   F77_XFCN (ctrcon, CTRCON, (F77_CONST_CHAR_ARG2 (&norm, 1),
                                              F77_CONST_CHAR_ARG2 (&uplo, 1),
@@ -1605,7 +1605,8 @@
                   if (info != 0)
                     info = -2;
 
-                  volatile float rcond_plus_one = rcon + 1.0;
+                  // Prevent use of extra precision.
+                  float rcond_plus_one = rcon + 1.0;
 
                   if (rcond_plus_one == 1.0 || octave::math::isnan (rcon))
                     {
@@ -1648,7 +1649,7 @@
     retval = FloatComplexMatrix (nc, b_nc, FloatComplex (0.0, 0.0));
   else
     {
-      volatile int typ = mattype.type ();
+      int typ = mattype.type ();
 
       if (typ == MatrixType::Permuted_Lower || typ == MatrixType::Lower)
         {
@@ -1663,7 +1664,7 @@
               const FloatComplex *tmp_data = data ();
 
               retval = b;
-              FloatComplex *result = retval.fortran_vec ();
+              FloatComplex *result = retval.rwdata ();
 
               char uplo = 'L';
               char trans = get_blas_char (transt);
@@ -1689,9 +1690,9 @@
                   dia = 'N';
 
                   Array<FloatComplex> z (dim_vector (2 * nc, 1));
-                  FloatComplex *pz = z.fortran_vec ();
+                  FloatComplex *pz = z.rwdata ();
                   Array<float> rz (dim_vector (nc, 1));
-                  float *prz = rz.fortran_vec ();
+                  float *prz = rz.rwdata ();
 
                   F77_XFCN (ctrcon, CTRCON, (F77_CONST_CHAR_ARG2 (&norm, 1),
                                              F77_CONST_CHAR_ARG2 (&uplo, 1),
@@ -1707,7 +1708,8 @@
                   if (info != 0)
                     info = -2;
 
-                  volatile float rcond_plus_one = rcon + 1.0;
+                  // Prevent use of extra precision.
+                  float rcond_plus_one = rcon + 1.0;
 
                   if (rcond_plus_one == 1.0 || octave::math::isnan (rcon))
                     {
@@ -1750,7 +1752,7 @@
     retval = FloatComplexMatrix (nc, b_nc, FloatComplex (0.0, 0.0));
   else
     {
-      volatile int typ = mattype.type ();
+      int typ = mattype.type ();
 
       // Calculate the norm of the matrix for later use when determining rcon.
       float anorm = -1.0;
@@ -1761,7 +1763,7 @@
           char job = 'L';
 
           FloatComplexMatrix atmp = *this;
-          FloatComplex *tmp_data = atmp.fortran_vec ();
+          FloatComplex *tmp_data = atmp.rwdata ();
 
           // The norm of the matrix for later use when determining rcon.
           if (calc_cond)
@@ -1789,9 +1791,9 @@
               if (calc_cond)
                 {
                   Array<FloatComplex> z (dim_vector (2 * nc, 1));
-                  FloatComplex *pz = z.fortran_vec ();
+                  FloatComplex *pz = z.rwdata ();
                   Array<float> rz (dim_vector (nc, 1));
-                  float *prz = rz.fortran_vec ();
+                  float *prz = rz.rwdata ();
 
                   F77_XFCN (cpocon, CPOCON, (F77_CONST_CHAR_ARG2 (&job, 1),
                                              nr, F77_CMPLX_ARG (tmp_data), nr, anorm,
@@ -1803,7 +1805,8 @@
                   if (info != 0)
                     info = -2;
 
-                  volatile float rcond_plus_one = rcon + 1.0;
+                  // Prevent use of extra precision.
+                  float rcond_plus_one = rcon + 1.0;
 
                   if (rcond_plus_one == 1.0 || octave::math::isnan (rcon))
                     {
@@ -1819,7 +1822,7 @@
               if (info == 0)
                 {
                   retval = b;
-                  FloatComplex *result = retval.fortran_vec ();
+                  FloatComplex *result = retval.rwdata ();
 
                   F77_XFCN (cpotrs, CPOTRS, (F77_CONST_CHAR_ARG2 (&job, 1),
                                              nr, b_nc, F77_CMPLX_ARG (tmp_data), nr,
@@ -1841,15 +1844,15 @@
           info = 0;
 
           Array<F77_INT> ipvt (dim_vector (nr, 1));
-          F77_INT *pipvt = ipvt.fortran_vec ();
+          F77_INT *pipvt = ipvt.rwdata ();
 
           FloatComplexMatrix atmp = *this;
-          FloatComplex *tmp_data = atmp.fortran_vec ();
+          FloatComplex *tmp_data = atmp.rwdata ();
 
           Array<FloatComplex> z (dim_vector (2 * nc, 1));
-          FloatComplex *pz = z.fortran_vec ();
+          FloatComplex *pz = z.rwdata ();
           Array<float> rz (dim_vector (2 * nc, 1));
-          float *prz = rz.fortran_vec ();
+          float *prz = rz.rwdata ();
 
           // Calculate the norm of the matrix, for later use.
           if (calc_cond && anorm < 0.0)
@@ -1898,7 +1901,8 @@
                   if (info != 0)
                     info = -2;
 
-                  volatile float rcond_plus_one = rcon + 1.0;
+                  // Prevent use of extra precision.
+                  float rcond_plus_one = rcon + 1.0;
 
                   if (rcond_plus_one == 1.0 || octave::math::isnan (rcon))
                     {
@@ -1912,7 +1916,7 @@
               if (info == 0)
                 {
                   retval = b;
-                  FloatComplex *result = retval.fortran_vec ();
+                  FloatComplex *result = retval.rwdata ();
 
                   char job = 'N';
                   F77_XFCN (cgetrs, CGETRS, (F77_CONST_CHAR_ARG2 (&job, 1),
@@ -2320,7 +2324,7 @@
     retval = FloatComplexMatrix (n, b_nc, FloatComplex (0.0, 0.0));
   else
     {
-      volatile F77_INT minmn = (m < n ? m : n);
+      F77_INT minmn = (m < n ? m : n);
       F77_INT maxmn = (m > n ? m : n);
       rcon = -1.0;
 
@@ -2336,11 +2340,11 @@
         retval = b;
 
       FloatComplexMatrix atmp = *this;
-      FloatComplex *tmp_data = atmp.fortran_vec ();
-
-      FloatComplex *pretval = retval.fortran_vec ();
+      FloatComplex *tmp_data = atmp.rwdata ();
+
+      FloatComplex *pretval = retval.rwdata ();
       Array<float> s (dim_vector (minmn, 1));
-      float *ps = s.fortran_vec ();
+      float *ps = s.rwdata ();
 
       // Ask ZGELSD what the dimension of WORK should be.
       F77_INT lwork = -1;
@@ -2379,20 +2383,20 @@
       if (lrwork < 1)
         lrwork = 1;
       Array<float> rwork (dim_vector (lrwork, 1));
-      float *prwork = rwork.fortran_vec ();
+      float *prwork = rwork.rwdata ();
 
       F77_INT liwork = 3 * minmn * nlvl + 11 * minmn;
       if (liwork < 1)
         liwork = 1;
       Array<F77_INT> iwork (dim_vector (liwork, 1));
-      F77_INT *piwork = iwork.fortran_vec ();
+      F77_INT *piwork = iwork.rwdata ();
 
       F77_INT tmp_info = 0;
       F77_INT tmp_rank = 0;
 
       F77_XFCN (cgelsd, CGELSD, (m, n, nrhs, F77_CMPLX_ARG (tmp_data), m,
                                  F77_CMPLX_ARG (pretval), maxmn,
-                                 ps, rcon, tmp_rank, F77_CMPLX_ARG (work.fortran_vec ()),
+                                 ps, rcon, tmp_rank, F77_CMPLX_ARG (work.rwdata ()),
                                  lwork, prwork, piwork, tmp_info));
 
       info = tmp_info;
@@ -2449,7 +2453,7 @@
           F77_XFCN (cgelsd, CGELSD, (m, n, nrhs, F77_CMPLX_ARG (tmp_data),
                                      m, F77_CMPLX_ARG (pretval),
                                      maxmn, ps, rcon, tmp_rank,
-                                     F77_CMPLX_ARG (work.fortran_vec ()),
+                                     F77_CMPLX_ARG (work.rwdata ()),
                                      lwork, prwork, piwork, tmp_info));
 
           info = tmp_info;
@@ -2550,7 +2554,7 @@
     retval = FloatComplexColumnVector (n, FloatComplex (0.0, 0.0));
   else
     {
-      volatile F77_INT minmn = (m < n ? m : n);
+      F77_INT minmn = (m < n ? m : n);
       F77_INT maxmn = (m > n ? m : n);
       rcon = -1.0;
 
@@ -2565,11 +2569,11 @@
         retval = b;
 
       FloatComplexMatrix atmp = *this;
-      FloatComplex *tmp_data = atmp.fortran_vec ();
-
-      FloatComplex *pretval = retval.fortran_vec ();
+      FloatComplex *tmp_data = atmp.rwdata ();
+
+      FloatComplex *pretval = retval.rwdata ();
       Array<float> s (dim_vector (minmn, 1));
-      float *ps = s.fortran_vec ();
+      float *ps = s.rwdata ();
 
       // Ask ZGELSD what the dimension of WORK should be.
       F77_INT lwork = -1;
@@ -2599,20 +2603,20 @@
       if (lrwork < 1)
         lrwork = 1;
       Array<float> rwork (dim_vector (lrwork, 1));
-      float *prwork = rwork.fortran_vec ();
+      float *prwork = rwork.rwdata ();
 
       F77_INT liwork = 3 * minmn * nlvl + 11 * minmn;
       if (liwork < 1)
         liwork = 1;
       Array<F77_INT> iwork (dim_vector (liwork, 1));
-      F77_INT *piwork = iwork.fortran_vec ();
+      F77_INT *piwork = iwork.rwdata ();
 
       F77_INT tmp_info = 0;
       F77_INT tmp_rank = 0;
 
       F77_XFCN (cgelsd, CGELSD, (m, n, nrhs, F77_CMPLX_ARG (tmp_data), m,
                                  F77_CMPLX_ARG (pretval), maxmn,
-                                 ps, rcon, tmp_rank, F77_CMPLX_ARG (work.fortran_vec ()),
+                                 ps, rcon, tmp_rank, F77_CMPLX_ARG (work.rwdata ()),
                                  lwork, prwork, piwork, tmp_info));
 
       info = tmp_info;
@@ -2626,7 +2630,7 @@
       F77_XFCN (cgelsd, CGELSD, (m, n, nrhs, F77_CMPLX_ARG (tmp_data), m,
                                  F77_CMPLX_ARG (pretval),
                                  maxmn, ps, rcon, tmp_rank,
-                                 F77_CMPLX_ARG (work.fortran_vec ()), lwork,
+                                 F77_CMPLX_ARG (work.rwdata ()), lwork,
                                  prwork, piwork, tmp_info));
 
       info = tmp_info;
@@ -2674,7 +2678,7 @@
       F77_INT a_len = octave::to_f77_int (a.numel ());
 
       retval = FloatComplexMatrix (len, a_len);
-      FloatComplex *c = retval.fortran_vec ();
+      FloatComplex *c = retval.rwdata ();
 
       F77_XFCN (cgemm, CGEMM, (F77_CONST_CHAR_ARG2 ("N", 1),
                                F77_CONST_CHAR_ARG2 ("N", 1),
@@ -2778,7 +2782,7 @@
   if (nr == 0 || nc == 0)
     return *this;
 
-  FloatComplex *d = fortran_vec (); // Ensures only 1 reference to my privates!
+  FloatComplex *d = rwdata (); // Ensures only 1 reference to my privates!
 
   mx_inline_add2 (numel (), d, a.data ());
   return *this;
@@ -2799,7 +2803,7 @@
   if (nr == 0 || nc == 0)
     return *this;
 
-  FloatComplex *d = fortran_vec (); // Ensures only 1 reference to my privates!
+  FloatComplex *d = rwdata (); // Ensures only 1 reference to my privates!
 
   mx_inline_sub2 (numel (), d, a.data ());
   return *this;
@@ -3307,9 +3311,9 @@
   float scale;
   F77_INT info;
 
-  FloatComplex *pa = sch_a.fortran_vec ();
-  FloatComplex *pb = sch_b.fortran_vec ();
-  FloatComplex *px = cx.fortran_vec ();
+  FloatComplex *pa = sch_a.rwdata ();
+  FloatComplex *pb = sch_b.rwdata ();
+  FloatComplex *px = cx.rwdata ();
 
   F77_XFCN (ctrsyl, CTRSYL, (F77_CONST_CHAR_ARG2 ("N", 1),
                              F77_CONST_CHAR_ARG2 ("N", 1),
@@ -3406,7 +3410,7 @@
       // use the result matrix before zeroing the elements.
 
       retval = FloatComplexMatrix (a_nr, b_nc, 0.0);
-      FloatComplex *c = retval.fortran_vec ();
+      FloatComplex *c = retval.rwdata ();
 
       const char ctra = get_blas_trans_arg (tra, cja);
       if (cja || cjb)
@@ -3444,7 +3448,7 @@
       F77_INT tdb = octave::to_f77_int (b.cols ());
 
       retval = FloatComplexMatrix (a_nr, b_nc, 0.0);
-      FloatComplex *c = retval.fortran_vec ();
+      FloatComplex *c = retval.rwdata ();
 
       if (b_nc == 1 && a_nr == 1)
         {
--- a/liboctave/array/fCMatrix.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/fCMatrix.h	Mon Feb 26 23:30:33 2024 -0500
@@ -37,9 +37,7 @@
 #include "mx-op-decl.h"
 #include "oct-cmplx.h"
 
-class
-OCTAVE_API
-FloatComplexMatrix : public FloatComplexNDArray
+class OCTAVE_API FloatComplexMatrix : public FloatComplexNDArray
 {
 public:
 
@@ -215,8 +213,8 @@
   OCTAVE_API FloatComplexMatrix inverse () const;
   OCTAVE_API FloatComplexMatrix inverse (octave_idx_type& info) const;
   OCTAVE_API FloatComplexMatrix
-  inverse (octave_idx_type& info, float& rcon, bool force = false,
-           bool calc_cond = true) const;
+  inverse (octave_idx_type& info, float& rcon,
+           bool force = false, bool calc_cond = true) const;
 
   OCTAVE_API FloatComplexMatrix inverse (MatrixType& mattype) const;
   OCTAVE_API FloatComplexMatrix
--- a/liboctave/array/fCNDArray.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/fCNDArray.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -57,7 +57,7 @@
 FloatComplexNDArray
 FloatComplexNDArray::fourier (int dim) const
 {
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
 
   if (dim > dv.ndims () || dim < 0)
     return FloatComplexNDArray ();
@@ -75,7 +75,7 @@
 
   const FloatComplex *in (data ());
   FloatComplexNDArray retval (dv);
-  FloatComplex *out (retval.fortran_vec ());
+  FloatComplex *out (retval.rwdata ());
 
   // Need to be careful here about the distance between fft's
   for (octave_idx_type k = 0; k < nloop; k++)
@@ -88,7 +88,7 @@
 FloatComplexNDArray
 FloatComplexNDArray::ifourier (int dim) const
 {
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
 
   if (dim > dv.ndims () || dim < 0)
     return FloatComplexNDArray ();
@@ -106,7 +106,7 @@
 
   const FloatComplex *in (data ());
   FloatComplexNDArray retval (dv);
-  FloatComplex *out (retval.fortran_vec ());
+  FloatComplex *out (retval.rwdata ());
 
   // Need to be careful here about the distance between fft's
   for (octave_idx_type k = 0; k < nloop; k++)
@@ -119,14 +119,14 @@
 FloatComplexNDArray
 FloatComplexNDArray::fourier2d () const
 {
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
   if (dv.ndims () < 2)
     return FloatComplexNDArray ();
 
   dim_vector dv2 (dv(0), dv(1));
   const FloatComplex *in = data ();
   FloatComplexNDArray retval (dv);
-  FloatComplex *out = retval.fortran_vec ();
+  FloatComplex *out = retval.rwdata ();
   octave_idx_type howmany = numel () / dv(0) / dv(1);
   octave_idx_type dist = dv(0) * dv(1);
 
@@ -139,14 +139,14 @@
 FloatComplexNDArray
 FloatComplexNDArray::ifourier2d () const
 {
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
   if (dv.ndims () < 2)
     return FloatComplexNDArray ();
 
   dim_vector dv2 (dv(0), dv(1));
   const FloatComplex *in = data ();
   FloatComplexNDArray retval (dv);
-  FloatComplex *out = retval.fortran_vec ();
+  FloatComplex *out = retval.rwdata ();
   octave_idx_type howmany = numel () / dv(0) / dv(1);
   octave_idx_type dist = dv(0) * dv(1);
 
@@ -159,12 +159,12 @@
 FloatComplexNDArray
 FloatComplexNDArray::fourierNd () const
 {
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
   int rank = dv.ndims ();
 
   const FloatComplex *in (data ());
   FloatComplexNDArray retval (dv);
-  FloatComplex *out (retval.fortran_vec ());
+  FloatComplex *out (retval.rwdata ());
 
   octave::fftw::fftNd (in, out, rank, dv);
 
@@ -174,12 +174,12 @@
 FloatComplexNDArray
 FloatComplexNDArray::ifourierNd () const
 {
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
   int rank = dv.ndims ();
 
   const FloatComplex *in (data ());
   FloatComplexNDArray retval (dv);
-  FloatComplex *out (retval.fortran_vec ());
+  FloatComplex *out (retval.rwdata ());
 
   octave::fftw::ifftNd (in, out, rank, dv);
 
@@ -520,8 +520,8 @@
 FloatComplexNDArray::insert (const NDArray& a,
                              octave_idx_type r, octave_idx_type c)
 {
-  dim_vector a_dv = a.dims ();
-  dim_vector dv = dims ();
+  const dim_vector& a_dv = a.dims ();
+  const dim_vector& dv = dims ();
 
   int n = a_dv.ndims ();
 
--- a/liboctave/array/fCNDArray.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/fCNDArray.h	Mon Feb 26 23:30:33 2024 -0500
@@ -33,9 +33,7 @@
 #include "mx-defs.h"
 #include "mx-op-decl.h"
 
-class
-OCTAVE_API
-FloatComplexNDArray : public MArray<FloatComplex>
+class OCTAVE_API FloatComplexNDArray : public MArray<FloatComplex>
 {
 public:
 
--- a/liboctave/array/fCRowVector.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/fCRowVector.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -254,7 +254,7 @@
   if (len == 0)
     return *this;
 
-  FloatComplex *d = fortran_vec (); // Ensures only 1 reference to my privates!
+  FloatComplex *d = rwdata (); // Ensures only 1 reference to my privates!
 
   mx_inline_add2 (len, d, a.data ());
   return *this;
@@ -273,7 +273,7 @@
   if (len == 0)
     return *this;
 
-  FloatComplex *d = fortran_vec (); // Ensures only 1 reference to my privates!
+  FloatComplex *d = rwdata (); // Ensures only 1 reference to my privates!
 
   mx_inline_sub2 (len, d, a.data ());
   return *this;
@@ -303,7 +303,7 @@
       F77_INT ld = a_nr;
 
       retval.resize (a_nc);
-      FloatComplex *y = retval.fortran_vec ();
+      FloatComplex *y = retval.rwdata ();
 
       F77_XFCN (cgemv, CGEMV, (F77_CONST_CHAR_ARG2 ("T", 1),
                                a_nr, a_nc, 1.0, F77_CONST_CMPLX_ARG (a.data ()),
--- a/liboctave/array/fCRowVector.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/fCRowVector.h	Mon Feb 26 23:30:33 2024 -0500
@@ -32,9 +32,7 @@
 #include "fRowVector.h"
 #include "mx-defs.h"
 
-class
-OCTAVE_API
-FloatComplexRowVector : public MArray<FloatComplex>
+class OCTAVE_API FloatComplexRowVector : public MArray<FloatComplex>
 {
   friend class FloatComplexColumnVector;
 
--- a/liboctave/array/fColVector.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/fColVector.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -196,7 +196,7 @@
         retval.fill (0.0);
       else
         {
-          float *y = retval.fortran_vec ();
+          float *y = retval.rwdata ();
 
           F77_XFCN (sgemv, SGEMV, (F77_CONST_CHAR_ARG2 ("N", 1),
                                    nr, nc, 1.0f, m.data (), nr,
--- a/liboctave/array/fColVector.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/fColVector.h	Mon Feb 26 23:30:33 2024 -0500
@@ -31,9 +31,7 @@
 #include "MArray.h"
 #include "mx-defs.h"
 
-class
-OCTAVE_API
-FloatColumnVector : public MArray<float>
+class OCTAVE_API FloatColumnVector : public MArray<float>
 {
 public:
 
--- a/liboctave/array/fDiagMatrix.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/fDiagMatrix.h	Mon Feb 26 23:30:33 2024 -0500
@@ -34,9 +34,7 @@
 #include "fRowVector.h"
 #include "mx-defs.h"
 
-class
-OCTAVE_API
-FloatDiagMatrix : public MDiagArray2<float>
+class OCTAVE_API FloatDiagMatrix : public MDiagArray2<float>
 {
 public:
 
--- a/liboctave/array/fMatrix.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/fMatrix.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -459,7 +459,7 @@
   octave_idx_type info;
   float rcon;
   MatrixType mattype (*this);
-  return inverse (mattype, info, rcon, 0, 0);
+  return inverse (mattype, info, rcon, false, false);
 }
 
 FloatMatrix
@@ -467,12 +467,12 @@
 {
   float rcon;
   MatrixType mattype (*this);
-  return inverse (mattype, info, rcon, 0, 0);
+  return inverse (mattype, info, rcon, false, false);
 }
 
 FloatMatrix
-FloatMatrix::inverse (octave_idx_type& info, float& rcon, bool force,
-                      bool calc_cond) const
+FloatMatrix::inverse (octave_idx_type& info, float& rcon,
+                      bool force, bool calc_cond) const
 {
   MatrixType mattype (*this);
   return inverse (mattype, info, rcon, force, calc_cond);
@@ -483,14 +483,14 @@
 {
   octave_idx_type info;
   float rcon;
-  return inverse (mattype, info, rcon, 0, 0);
+  return inverse (mattype, info, rcon, false, false);
 }
 
 FloatMatrix
 FloatMatrix::inverse (MatrixType& mattype, octave_idx_type& info) const
 {
   float rcon;
-  return inverse (mattype, info, rcon, 0, 0);
+  return inverse (mattype, info, rcon, false, false);
 }
 
 FloatMatrix
@@ -509,7 +509,7 @@
   char uplo = (typ == MatrixType::Lower ? 'L' : 'U');
   char udiag = 'N';
   retval = *this;
-  float *tmp_data = retval.fortran_vec ();
+  float *tmp_data = retval.rwdata ();
 
   F77_INT tmp_info = 0;
 
@@ -565,10 +565,10 @@
     (*current_liboctave_error_handler) ("inverse requires square matrix");
 
   Array<F77_INT> ipvt (dim_vector (nr, 1));
-  F77_INT *pipvt = ipvt.fortran_vec ();
+  F77_INT *pipvt = ipvt.rwdata ();
 
   retval = *this;
-  float *tmp_data = retval.fortran_vec ();
+  float *tmp_data = retval.rwdata ();
 
   Array<float> z (dim_vector (1, 1));
   F77_INT lwork = -1;
@@ -577,12 +577,12 @@
 
   // Query the optimum work array size.
   F77_XFCN (sgetri, SGETRI, (nc, tmp_data, nr, pipvt,
-                             z.fortran_vec (), lwork, tmp_info));
+                             z.rwdata (), lwork, tmp_info));
 
   lwork = static_cast<F77_INT> (z(0));
   lwork = (lwork < 4 * nc ? 4 * nc : lwork);
   z.resize (dim_vector (lwork, 1));
-  float *pz = z.fortran_vec ();
+  float *pz = z.rwdata ();
 
   info = 0;
   tmp_info = 0;
@@ -611,7 +611,7 @@
           // Now calculate the condition number for non-singular matrix.
           char job = '1';
           Array<F77_INT> iz (dim_vector (nc, 1));
-          F77_INT *piz = iz.fortran_vec ();
+          F77_INT *piz = iz.rwdata ();
           F77_XFCN (sgecon, SGECON, (F77_CONST_CHAR_ARG2 (&job, 1),
                                      nc, tmp_data, nr, anorm,
                                      rcon, pz, piz, sgecon_info
@@ -758,7 +758,7 @@
     }
 
   const float *in (data ());
-  FloatComplex *out (retval.fortran_vec ());
+  FloatComplex *out (retval.rwdata ());
 
   octave::fftw::fft (in, out, npts, nsamples);
 
@@ -787,8 +787,8 @@
     }
 
   FloatComplexMatrix tmp (*this);
-  FloatComplex *in (tmp.fortran_vec ());
-  FloatComplex *out (retval.fortran_vec ());
+  FloatComplex *in (tmp.rwdata ());
+  FloatComplex *out (retval.rwdata ());
 
   octave::fftw::ifft (in, out, npts, nsamples);
 
@@ -802,7 +802,7 @@
 
   const float *in = data ();
   FloatComplexMatrix retval (rows (), cols ());
-  octave::fftw::fftNd (in, retval.fortran_vec (), 2, dv);
+  octave::fftw::fftNd (in, retval.rwdata (), 2, dv);
 
   return retval;
 }
@@ -813,7 +813,7 @@
   dim_vector dv (rows (), cols ());
 
   FloatComplexMatrix retval (*this);
-  FloatComplex *out (retval.fortran_vec ());
+  FloatComplex *out (retval.rwdata ());
 
   octave::fftw::ifftNd (out, out, 2, dv);
 
@@ -899,7 +899,7 @@
   if (nr != nc)
     (*current_liboctave_error_handler) ("matrix must be square");
 
-  volatile int typ = mattype.type ();
+  int typ = mattype.type ();
 
   // Even though the matrix is marked as singular (Rectangular), we may
   // still get a useful number from the LU factorization, because it always
@@ -918,7 +918,7 @@
   else if (typ == MatrixType::Hermitian)
     {
       FloatMatrix atmp = *this;
-      float *tmp_data = atmp.fortran_vec ();
+      float *tmp_data = atmp.rwdata ();
 
       // Calculate the norm of the matrix for later use when determining rcon.
       float anorm;
@@ -945,9 +945,9 @@
           if (calc_cond)
             {
               Array<float> z (dim_vector (3 * nc, 1));
-              float *pz = z.fortran_vec ();
+              float *pz = z.rwdata ();
               Array<F77_INT> iz (dim_vector (nc, 1));
-              F77_INT *piz = iz.fortran_vec ();
+              F77_INT *piz = iz.rwdata ();
 
               F77_XFCN (spocon, SPOCON, (F77_CONST_CHAR_ARG2 (&job, 1),
                                          nr, tmp_data, nr, anorm,
@@ -972,10 +972,10 @@
   if (typ == MatrixType::Full)
     {
       Array<F77_INT> ipvt (dim_vector (nr, 1));
-      F77_INT *pipvt = ipvt.fortran_vec ();
+      F77_INT *pipvt = ipvt.rwdata ();
 
       FloatMatrix atmp = *this;
-      float *tmp_data = atmp.fortran_vec ();
+      float *tmp_data = atmp.rwdata ();
 
       info = 0;
       F77_INT tmp_info = 0;
@@ -1003,9 +1003,9 @@
               // Now calc the condition number for non-singular matrix.
               char job = '1';
               Array<float> z (dim_vector (4 * nc, 1));
-              float *pz = z.fortran_vec ();
+              float *pz = z.rwdata ();
               Array<F77_INT> iz (dim_vector (nc, 1));
-              F77_INT *piz = iz.fortran_vec ();
+              F77_INT *piz = iz.rwdata ();
 
               F77_XFCN (sgecon, SGECON, (F77_CONST_CHAR_ARG2 (&job, 1),
                                          nc, tmp_data, nr, anorm,
@@ -1055,7 +1055,7 @@
     rcon = octave::numeric_limits<float>::Inf ();
   else
     {
-      volatile int typ = mattype.type ();
+      int typ = mattype.type ();
 
       if (typ == MatrixType::Unknown)
         typ = mattype.type (*this);
@@ -1070,9 +1070,9 @@
           char dia = 'N';
 
           Array<float> z (dim_vector (3 * nc, 1));
-          float *pz = z.fortran_vec ();
+          float *pz = z.rwdata ();
           Array<F77_INT> iz (dim_vector (nc, 1));
-          F77_INT *piz = iz.fortran_vec ();
+          F77_INT *piz = iz.rwdata ();
 
           F77_XFCN (strcon, STRCON, (F77_CONST_CHAR_ARG2 (&norm, 1),
                                      F77_CONST_CHAR_ARG2 (&uplo, 1),
@@ -1098,9 +1098,9 @@
           char dia = 'N';
 
           Array<float> z (dim_vector (3 * nc, 1));
-          float *pz = z.fortran_vec ();
+          float *pz = z.rwdata ();
           Array<F77_INT> iz (dim_vector (nc, 1));
-          F77_INT *piz = iz.fortran_vec ();
+          F77_INT *piz = iz.rwdata ();
 
           F77_XFCN (strcon, STRCON, (F77_CONST_CHAR_ARG2 (&norm, 1),
                                      F77_CONST_CHAR_ARG2 (&uplo, 1),
@@ -1127,7 +1127,7 @@
               char job = 'L';
 
               FloatMatrix atmp = *this;
-              float *tmp_data = atmp.fortran_vec ();
+              float *tmp_data = atmp.rwdata ();
 
               anorm = norm1 (atmp);
 
@@ -1144,9 +1144,9 @@
               else
                 {
                   Array<float> z (dim_vector (3 * nc, 1));
-                  float *pz = z.fortran_vec ();
+                  float *pz = z.rwdata ();
                   Array<F77_INT> iz (dim_vector (nc, 1));
-                  F77_INT *piz = iz.fortran_vec ();
+                  F77_INT *piz = iz.rwdata ();
 
                   F77_XFCN (spocon, SPOCON, (F77_CONST_CHAR_ARG2 (&job, 1),
                                              nr, tmp_data, nr, anorm,
@@ -1163,18 +1163,18 @@
               F77_INT info = 0;
 
               FloatMatrix atmp = *this;
-              float *tmp_data = atmp.fortran_vec ();
+              float *tmp_data = atmp.rwdata ();
 
               Array<F77_INT> ipvt (dim_vector (nr, 1));
-              F77_INT *pipvt = ipvt.fortran_vec ();
+              F77_INT *pipvt = ipvt.rwdata ();
 
               if (anorm < 0.0)
                 anorm = norm1 (atmp);
 
               Array<float> z (dim_vector (4 * nc, 1));
-              float *pz = z.fortran_vec ();
+              float *pz = z.rwdata ();
               Array<F77_INT> iz (dim_vector (nc, 1));
-              F77_INT *piz = iz.fortran_vec ();
+              F77_INT *piz = iz.rwdata ();
 
               F77_XFCN (sgetrf, SGETRF, (nr, nr, tmp_data, nr, pipvt, info));
 
@@ -1225,7 +1225,7 @@
     retval = FloatMatrix (nc, b_nc, 0.0);
   else
     {
-      volatile int typ = mattype.type ();
+      int typ = mattype.type ();
 
       if (typ == MatrixType::Permuted_Upper || typ == MatrixType::Upper)
         {
@@ -1240,7 +1240,7 @@
               const float *tmp_data = data ();
 
               retval = b;
-              float *result = retval.fortran_vec ();
+              float *result = retval.rwdata ();
 
               char uplo = 'U';
               char trans = get_blas_char (transt);
@@ -1266,9 +1266,9 @@
                   dia = 'N';
 
                   Array<float> z (dim_vector (3 * nc, 1));
-                  float *pz = z.fortran_vec ();
+                  float *pz = z.rwdata ();
                   Array<F77_INT> iz (dim_vector (nc, 1));
-                  F77_INT *piz = iz.fortran_vec ();
+                  F77_INT *piz = iz.rwdata ();
 
                   F77_XFCN (strcon, STRCON, (F77_CONST_CHAR_ARG2 (&norm, 1),
                                              F77_CONST_CHAR_ARG2 (&uplo, 1),
@@ -1284,7 +1284,8 @@
                   if (info != 0)
                     info = -2;
 
-                  volatile float rcond_plus_one = rcon + 1.0;
+                  // Prevent use of extra precision.
+                  float rcond_plus_one = rcon + 1.0;
 
                   if (rcond_plus_one == 1.0 || octave::math::isnan (rcon))
                     {
@@ -1328,7 +1329,7 @@
     retval = FloatMatrix (nc, b_nc, 0.0);
   else
     {
-      volatile int typ = mattype.type ();
+      int typ = mattype.type ();
 
       if (typ == MatrixType::Permuted_Lower || typ == MatrixType::Lower)
         {
@@ -1343,7 +1344,7 @@
               const float *tmp_data = data ();
 
               retval = b;
-              float *result = retval.fortran_vec ();
+              float *result = retval.rwdata ();
 
               char uplo = 'L';
               char trans = get_blas_char (transt);
@@ -1369,9 +1370,9 @@
                   dia = 'N';
 
                   Array<float> z (dim_vector (3 * nc, 1));
-                  float *pz = z.fortran_vec ();
+                  float *pz = z.rwdata ();
                   Array<F77_INT> iz (dim_vector (nc, 1));
-                  F77_INT *piz = iz.fortran_vec ();
+                  F77_INT *piz = iz.rwdata ();
 
                   F77_XFCN (strcon, STRCON, (F77_CONST_CHAR_ARG2 (&norm, 1),
                                              F77_CONST_CHAR_ARG2 (&uplo, 1),
@@ -1387,7 +1388,8 @@
                   if (info != 0)
                     info = -2;
 
-                  volatile float rcond_plus_one = rcon + 1.0;
+                  // Prevent use of extra precision.
+                  float rcond_plus_one = rcon + 1.0;
 
                   if (rcond_plus_one == 1.0 || octave::math::isnan (rcon))
                     {
@@ -1430,7 +1432,7 @@
     retval = FloatMatrix (nc, b_nc, 0.0);
   else
     {
-      volatile int typ = mattype.type ();
+      int typ = mattype.type ();
 
       // Calculate the norm of the matrix for later use when determining rcon.
       float anorm = -1.0;
@@ -1441,7 +1443,7 @@
           char job = 'L';
 
           FloatMatrix atmp = *this;
-          float *tmp_data = atmp.fortran_vec ();
+          float *tmp_data = atmp.rwdata ();
 
           // The norm of the matrix for later use when determining rcon.
           if (calc_cond)
@@ -1469,9 +1471,9 @@
               if (calc_cond)
                 {
                   Array<float> z (dim_vector (3 * nc, 1));
-                  float *pz = z.fortran_vec ();
+                  float *pz = z.rwdata ();
                   Array<F77_INT> iz (dim_vector (nc, 1));
-                  F77_INT *piz = iz.fortran_vec ();
+                  F77_INT *piz = iz.rwdata ();
 
                   F77_XFCN (spocon, SPOCON, (F77_CONST_CHAR_ARG2 (&job, 1),
                                              nr, tmp_data, nr, anorm,
@@ -1483,7 +1485,8 @@
                   if (info != 0)
                     info = -2;
 
-                  volatile float rcond_plus_one = rcon + 1.0;
+                  // Prevent use of extra precision.
+                  float rcond_plus_one = rcon + 1.0;
 
                   if (rcond_plus_one == 1.0 || octave::math::isnan (rcon))
                     {
@@ -1499,7 +1502,7 @@
               if (info == 0)
                 {
                   retval = b;
-                  float *result = retval.fortran_vec ();
+                  float *result = retval.rwdata ();
 
                   F77_XFCN (spotrs, SPOTRS, (F77_CONST_CHAR_ARG2 (&job, 1),
                                              nr, b_nc, tmp_data, nr,
@@ -1521,18 +1524,18 @@
           info = 0;
 
           Array<F77_INT> ipvt (dim_vector (nr, 1));
-          F77_INT *pipvt = ipvt.fortran_vec ();
+          F77_INT *pipvt = ipvt.rwdata ();
 
           FloatMatrix atmp = *this;
-          float *tmp_data = atmp.fortran_vec ();
+          float *tmp_data = atmp.rwdata ();
 
           if (calc_cond && anorm < 0.0)
             anorm = norm1 (atmp);
 
           Array<float> z (dim_vector (4 * nc, 1));
-          float *pz = z.fortran_vec ();
+          float *pz = z.rwdata ();
           Array<F77_INT> iz (dim_vector (nc, 1));
-          F77_INT *piz = iz.fortran_vec ();
+          F77_INT *piz = iz.rwdata ();
 
           F77_INT tmp_info = 0;
 
@@ -1569,7 +1572,8 @@
                   if (info != 0)
                     info = -2;
 
-                  volatile float rcond_plus_one = rcon + 1.0;
+                  // Prevent use of extra precision.
+                  float rcond_plus_one = rcon + 1.0;
 
                   if (rcond_plus_one == 1.0 || octave::math::isnan (rcon))
                     {
@@ -1583,7 +1587,7 @@
               if (info == 0)
                 {
                   retval = b;
-                  float *result = retval.fortran_vec ();
+                  float *result = retval.rwdata ();
 
                   char job = 'N';
                   F77_XFCN (sgetrs, SGETRS, (F77_CONST_CHAR_ARG2 (&job, 1),
@@ -1694,7 +1698,7 @@
   octave_idx_type nel = m*n;
   FloatMatrix retval (m, 2*n);
   const FloatComplex *cmd = cm.data ();
-  float *rd = retval.fortran_vec ();
+  float *rd = retval.rwdata ();
   for (octave_idx_type i = 0; i < nel; i++)
     {
       rd[i] = std::real (cmd[i]);
@@ -1711,7 +1715,7 @@
   octave_idx_type nel = m*n;
   FloatComplexMatrix retval (m, n);
   const float *smd = sm.data ();
-  FloatComplex *rd = retval.fortran_vec ();
+  FloatComplex *rd = retval.rwdata ();
   for (octave_idx_type i = 0; i < nel; i++)
     rd[i] = FloatComplex (smd[i], smd[nel+i]);
   return retval;
@@ -1970,7 +1974,7 @@
     retval = FloatMatrix (n, b_nc, 0.0);
   else
     {
-      volatile F77_INT minmn = (m < n ? m : n);
+      F77_INT minmn = (m < n ? m : n);
       F77_INT maxmn = (m > n ? m : n);
       rcon = -1.0;
       if (m != n)
@@ -1985,11 +1989,11 @@
         retval = b;
 
       FloatMatrix atmp = *this;
-      float *tmp_data = atmp.fortran_vec ();
-
-      float *pretval = retval.fortran_vec ();
+      float *tmp_data = atmp.rwdata ();
+
+      float *pretval = retval.rwdata ();
       Array<float> s (dim_vector (minmn, 1));
-      float *ps = s.fortran_vec ();
+      float *ps = s.rwdata ();
 
       // Ask DGELSD what the dimension of WORK should be.
       F77_INT lwork = -1;
@@ -2024,13 +2028,13 @@
       if (liwork < 1)
         liwork = 1;
       Array<F77_INT> iwork (dim_vector (liwork, 1));
-      F77_INT *piwork = iwork.fortran_vec ();
+      F77_INT *piwork = iwork.rwdata ();
 
       F77_INT tmp_info = 0;
       F77_INT tmp_rank = 0;
 
       F77_XFCN (sgelsd, SGELSD, (m, n, nrhs, tmp_data, m, pretval, maxmn,
-                                 ps, rcon, tmp_rank, work.fortran_vec (),
+                                 ps, rcon, tmp_rank, work.rwdata (),
                                  lwork, piwork, tmp_info));
 
       info = tmp_info;
@@ -2093,7 +2097,7 @@
         {
           F77_XFCN (sgelsd, SGELSD, (m, n, nrhs, tmp_data, m, pretval,
                                      maxmn, ps, rcon, tmp_rank,
-                                     work.fortran_vec (), lwork,
+                                     work.rwdata (), lwork,
                                      piwork, tmp_info));
 
           info = tmp_info;
@@ -2191,7 +2195,7 @@
     retval = FloatColumnVector (n, 0.0);
   else
     {
-      volatile F77_INT minmn = (m < n ? m : n);
+      F77_INT minmn = (m < n ? m : n);
       F77_INT maxmn = (m > n ? m : n);
       rcon = -1.0;
 
@@ -2206,11 +2210,11 @@
         retval = b;
 
       FloatMatrix atmp = *this;
-      float *tmp_data = atmp.fortran_vec ();
-
-      float *pretval = retval.fortran_vec ();
+      float *tmp_data = atmp.rwdata ();
+
+      float *pretval = retval.rwdata ();
       Array<float> s (dim_vector (minmn, 1));
-      float *ps = s.fortran_vec ();
+      float *ps = s.rwdata ();
 
       // Ask DGELSD what the dimension of WORK should be.
       F77_INT lwork = -1;
@@ -2238,13 +2242,13 @@
       if (liwork < 1)
         liwork = 1;
       Array<F77_INT> iwork (dim_vector (liwork, 1));
-      F77_INT *piwork = iwork.fortran_vec ();
+      F77_INT *piwork = iwork.rwdata ();
 
       F77_INT tmp_info = 0;
       F77_INT tmp_rank = 0;
 
       F77_XFCN (sgelsd, SGELSD, (m, n, nrhs, tmp_data, m, pretval, maxmn,
-                                 ps, rcon, tmp_rank, work.fortran_vec (),
+                                 ps, rcon, tmp_rank, work.rwdata (),
                                  lwork, piwork, tmp_info));
 
       info = tmp_info;
@@ -2255,7 +2259,7 @@
 
       F77_XFCN (sgelsd, SGELSD, (m, n, nrhs, tmp_data, m, pretval,
                                  maxmn, ps, rcon, tmp_rank,
-                                 work.fortran_vec (), lwork,
+                                 work.rwdata (), lwork,
                                  piwork, tmp_info));
 
       info = tmp_info;
@@ -2362,7 +2366,7 @@
       F77_INT a_len = octave::to_f77_int (a.numel ());
 
       retval = FloatMatrix (len, a_len);
-      float *c = retval.fortran_vec ();
+      float *c = retval.rwdata ();
 
       F77_XFCN (sgemm, SGEMM, (F77_CONST_CHAR_ARG2 ("N", 1),
                                F77_CONST_CHAR_ARG2 ("N", 1),
@@ -2741,9 +2745,9 @@
   float scale;
   F77_INT info;
 
-  float *pa = sch_a.fortran_vec ();
-  float *pb = sch_b.fortran_vec ();
-  float *px = cx.fortran_vec ();
+  float *pa = sch_a.rwdata ();
+  float *pb = sch_b.rwdata ();
+  float *px = cx.rwdata ();
 
   F77_XFCN (strsyl, STRSYL, (F77_CONST_CHAR_ARG2 ("N", 1),
                              F77_CONST_CHAR_ARG2 ("N", 1),
@@ -2813,7 +2817,7 @@
       F77_INT lda = octave::to_f77_int (a.rows ());
 
       retval = FloatMatrix (a_nr, b_nc);
-      float *c = retval.fortran_vec ();
+      float *c = retval.rwdata ();
 
       const char ctra = get_blas_trans_arg (tra);
       F77_XFCN (ssyrk, SSYRK, (F77_CONST_CHAR_ARG2 ("U", 1),
@@ -2835,7 +2839,7 @@
       F77_INT tdb = octave::to_f77_int (b.cols ());
 
       retval = FloatMatrix (a_nr, b_nc);
-      float *c = retval.fortran_vec ();
+      float *c = retval.rwdata ();
 
       if (b_nc == 1)
         {
--- a/liboctave/array/fMatrix.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/fMatrix.h	Mon Feb 26 23:30:33 2024 -0500
@@ -36,9 +36,7 @@
 #include "mx-defs.h"
 #include "mx-op-decl.h"
 
-class
-OCTAVE_API
-FloatMatrix : public FloatNDArray
+class OCTAVE_API FloatMatrix : public FloatNDArray
 {
 public:
 
@@ -171,8 +169,8 @@
   OCTAVE_API FloatMatrix inverse () const;
   OCTAVE_API FloatMatrix inverse (octave_idx_type& info) const;
   OCTAVE_API FloatMatrix
-  inverse (octave_idx_type& info, float& rcon, bool force = false,
-           bool calc_cond = true) const;
+  inverse (octave_idx_type& info, float& rcon,
+           bool force = false, bool calc_cond = true) const;
 
   OCTAVE_API FloatMatrix inverse (MatrixType& mattype) const;
   OCTAVE_API FloatMatrix
--- a/liboctave/array/fNDArray.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/fNDArray.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -57,7 +57,7 @@
 FloatComplexNDArray
 FloatNDArray::fourier (int dim) const
 {
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
 
   if (dim > dv.ndims () || dim < 0)
     return FloatComplexNDArray ();
@@ -75,7 +75,7 @@
 
   const float *in (data ());
   FloatComplexNDArray retval (dv);
-  FloatComplex *out (retval.fortran_vec ());
+  FloatComplex *out (retval.rwdata ());
 
   // Need to be careful here about the distance between fft's
   for (octave_idx_type k = 0; k < nloop; k++)
@@ -88,7 +88,7 @@
 FloatComplexNDArray
 FloatNDArray::ifourier (int dim) const
 {
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
 
   if (dim > dv.ndims () || dim < 0)
     return FloatComplexNDArray ();
@@ -105,7 +105,7 @@
   octave_idx_type dist = (stride == 1 ? n : 1);
 
   FloatComplexNDArray retval (*this);
-  FloatComplex *out (retval.fortran_vec ());
+  FloatComplex *out (retval.rwdata ());
 
   // Need to be careful here about the distance between fft's
   for (octave_idx_type k = 0; k < nloop; k++)
@@ -118,14 +118,14 @@
 FloatComplexNDArray
 FloatNDArray::fourier2d () const
 {
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
   if (dv.ndims () < 2)
     return FloatComplexNDArray ();
 
   dim_vector dv2 (dv(0), dv(1));
   const float *in = data ();
   FloatComplexNDArray retval (dv);
-  FloatComplex *out = retval.fortran_vec ();
+  FloatComplex *out = retval.rwdata ();
   octave_idx_type howmany = numel () / dv(0) / dv(1);
   octave_idx_type dist = dv(0) * dv(1);
 
@@ -138,13 +138,13 @@
 FloatComplexNDArray
 FloatNDArray::ifourier2d () const
 {
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
   if (dv.ndims () < 2)
     return FloatComplexNDArray ();
 
   dim_vector dv2 (dv(0), dv(1));
   FloatComplexNDArray retval (*this);
-  FloatComplex *out = retval.fortran_vec ();
+  FloatComplex *out = retval.rwdata ();
   octave_idx_type howmany = numel () / dv(0) / dv(1);
   octave_idx_type dist = dv(0) * dv(1);
 
@@ -157,12 +157,12 @@
 FloatComplexNDArray
 FloatNDArray::fourierNd () const
 {
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
   int rank = dv.ndims ();
 
   const float *in (data ());
   FloatComplexNDArray retval (dv);
-  FloatComplex *out (retval.fortran_vec ());
+  FloatComplex *out (retval.rwdata ());
 
   octave::fftw::fftNd (in, out, rank, dv);
 
@@ -172,13 +172,13 @@
 FloatComplexNDArray
 FloatNDArray::ifourierNd () const
 {
-  dim_vector dv = dims ();
+  const dim_vector& dv = dims ();
   int rank = dv.ndims ();
 
   FloatComplexNDArray tmp (*this);
-  FloatComplex *in (tmp.fortran_vec ());
+  FloatComplex *in (tmp.rwdata ());
   FloatComplexNDArray retval (dv);
-  FloatComplex *out (retval.fortran_vec ());
+  FloatComplex *out (retval.rwdata ());
 
   octave::fftw::ifftNd (in, out, rank, dv);
 
--- a/liboctave/array/fNDArray.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/fNDArray.h	Mon Feb 26 23:30:33 2024 -0500
@@ -34,9 +34,7 @@
 #include "mx-defs.h"
 #include "mx-op-decl.h"
 
-class
-OCTAVE_API
-FloatNDArray : public MArray<float>
+class OCTAVE_API FloatNDArray : public MArray<float>
 {
 public:
 
--- a/liboctave/array/fRowVector.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/fRowVector.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -190,7 +190,7 @@
       F77_INT ld = a_nr;
 
       retval.resize (a_nc);
-      float *y = retval.fortran_vec ();
+      float *y = retval.rwdata ();
 
       F77_XFCN (sgemv, SGEMV, (F77_CONST_CHAR_ARG2 ("T", 1),
                                a_nr, a_nc, 1.0, a.data (),
--- a/liboctave/array/fRowVector.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/fRowVector.h	Mon Feb 26 23:30:33 2024 -0500
@@ -31,9 +31,7 @@
 #include "MArray.h"
 #include "mx-defs.h"
 
-class
-OCTAVE_API
-FloatRowVector : public MArray<float>
+class OCTAVE_API FloatRowVector : public MArray<float>
 {
 public:
 
--- a/liboctave/array/idx-vector.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/idx-vector.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -536,7 +536,7 @@
     {
       // Use standard sort via octave_sort.
       idx.clear (m_orig_dims);
-      octave_idx_type *idx_data = idx.fortran_vec ();
+      octave_idx_type *idx_data = idx.rwdata ();
       for (octave_idx_type i = 0; i < m_len; i++)
         idx_data[i] = i;
 
@@ -557,7 +557,7 @@
         cnt[m_data[i]]++;
 
       idx.clear (m_orig_dims);
-      octave_idx_type *idx_data = idx.fortran_vec ();
+      octave_idx_type *idx_data = idx.rwdata ();
 
       octave_idx_type *new_data = new octave_idx_type [m_len];
       new_rep->m_data = new_data;
@@ -617,12 +617,12 @@
 
       if (m_data)
         {
-          std::memcpy (retval.fortran_vec (), m_data, m_len* sizeof (octave_idx_type));
+          std::memcpy (retval.rwdata (), m_data, m_len* sizeof (octave_idx_type));
           // Delete the old copy and share the m_data instead to save memory.
           delete [] m_data;
         }
 
-      m_data = retval.fortran_vec ();
+      m_data = retval.rwdata ();
       m_aowner = new Array<octave_idx_type> (retval);
 
       return retval;
@@ -761,7 +761,7 @@
   : m_rep (nullptr)
 {
   // Convert only if it means saving at least half the memory.
-  static const int factor = (2 * sizeof (octave_idx_type));
+  static constexpr int factor = (2 * sizeof (octave_idx_type));
   octave_idx_type nnz = bnda.nnz ();
   if (nnz <= bnda.numel () / factor)
     m_rep = new idx_vector_rep (bnda, nnz);
@@ -1108,7 +1108,7 @@
       octave_idx_type m_ext = r->extent (0);
       Array<bool> mask (dim_vector (n, 1));
       const bool *m_data = r->get_data ();
-      bool *ndata = mask.fortran_vec ();
+      bool *ndata = mask.rwdata ();
       for (octave_idx_type i = 0; i < m_ext; i++)
         ndata[i] = ! m_data[i];
       std::fill_n (ndata + m_ext, n - m_ext, true);
@@ -1117,7 +1117,7 @@
   else
     {
       Array<bool> mask (dim_vector (n, 1), true);
-      fill (false, length (n), mask.fortran_vec ());
+      fill (false, length (n), mask.rwdata ());
       retval = idx_vector (mask);
     }
 
--- a/liboctave/array/idx-vector.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/idx-vector.h	Mon Feb 26 23:30:33 2024 -0500
@@ -54,9 +54,7 @@
 // as templates implementing "early dispatch", i.e., hoisting the checks
 // for index type out of loops.
 
-class
-OCTAVE_API
-idx_vector
+class OCTAVE_API idx_vector
 {
 public:
 
--- a/liboctave/array/intNDArray.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/array/intNDArray.h	Mon Feb 26 23:30:33 2024 -0500
@@ -34,8 +34,7 @@
 #include "boolNDArray.h"
 
 template <typename T>
-class
-intNDArray : public MArray<T>
+class intNDArray : public MArray<T>
 {
 public:
 
--- a/liboctave/external/Faddeeva/Faddeeva.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/external/Faddeeva/Faddeeva.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -184,10 +184,7 @@
 #  define FADDEEVA_RE(name) Faddeeva::name
 
 // isnan/isinf were introduced in C++11
-#  if defined (lo_ieee_isnan) && defined (lo_ieee_isinf)
-#    define isnan lo_ieee_isnan
-#    define isinf lo_ieee_isinf
-#  elif (__cplusplus < 201103L) && (!defined(HAVE_ISNAN) || !defined(HAVE_ISINF))
+#  if (__cplusplus < 201103L) && (!defined(HAVE_ISNAN) || !defined(HAVE_ISINF))
 static inline bool my_isnan(double x) { return x != x; }
 #    define isnan my_isnan
 static inline bool my_isinf(double x) { return 1/x == 0.; }
--- a/liboctave/numeric/CollocWt.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/CollocWt.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -426,23 +426,23 @@
     return;
 
   Array<double> dif1 (dim_vector (nt, 1));
-  double *pdif1 = dif1.fortran_vec ();
+  double *pdif1 = dif1.rwdata ();
 
   Array<double> dif2 (dim_vector (nt, 1));
-  double *pdif2 = dif2.fortran_vec ();
+  double *pdif2 = dif2.rwdata ();
 
   Array<double> dif3 (dim_vector (nt, 1));
-  double *pdif3 = dif3.fortran_vec ();
+  double *pdif3 = dif3.rwdata ();
 
   Array<double> vect (dim_vector (nt, 1));
-  double *pvect = vect.fortran_vec ();
+  double *pvect = vect.rwdata ();
 
   m_r.resize (nt, 1);
   m_q.resize (nt, 1);
   m_A.resize (nt, nt);
   m_B.resize (nt, nt);
 
-  double *pr = m_r.fortran_vec ();
+  double *pr = m_r.rwdata ();
 
   // Compute roots.
 
@@ -479,7 +479,7 @@
   // Gaussian quadrature weights.
 
   id = 3;
-  double *pq = m_q.fortran_vec ();
+  double *pq = m_q.rwdata ();
   dfopr (m_n, m_inc_left, m_inc_right, id, id, pdif1, pdif2, pdif3, pr, pq);
 
   m_initialized = 1;
--- a/liboctave/numeric/DAE.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/DAE.h	Mon Feb 26 23:30:33 2024 -0500
@@ -31,9 +31,7 @@
 #include "DAEFunc.h"
 #include "base-dae.h"
 
-class
-OCTAVE_API
-DAE : public base_diff_alg_eqn, public DAEFunc
+class OCTAVE_API DAE : public base_diff_alg_eqn, public DAEFunc
 {
 public:
 
--- a/liboctave/numeric/DAEFunc.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/DAEFunc.h	Mon Feb 26 23:30:33 2024 -0500
@@ -30,8 +30,7 @@
 
 #include "mx-fwd.h"
 
-class
-DAEFunc
+class DAEFunc
 {
 public:
 
--- a/liboctave/numeric/DAERT.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/DAERT.h	Mon Feb 26 23:30:33 2024 -0500
@@ -32,8 +32,7 @@
 #include "DAERTFunc.h"
 #include "base-dae.h"
 
-class
-DAERT : public base_diff_alg_eqn, public DAERTFunc
+class DAERT : public base_diff_alg_eqn, public DAERTFunc
 {
 public:
 
--- a/liboctave/numeric/DAERTFunc.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/DAERTFunc.h	Mon Feb 26 23:30:33 2024 -0500
@@ -30,8 +30,7 @@
 
 #include "DAEFunc.h"
 
-class
-DAERTFunc : public DAEFunc
+class DAERTFunc : public DAEFunc
 {
 public:
 
--- a/liboctave/numeric/DASPK.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/DASPK.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -455,16 +455,16 @@
       m_restart = false;
     }
 
-  double *px = m_x.fortran_vec ();
-  double *pxdot = m_xdot.fortran_vec ();
+  double *px = m_x.rwdata ();
+  double *pxdot = m_xdot.rwdata ();
 
-  F77_INT *pinfo = m_info.fortran_vec ();
+  F77_INT *pinfo = m_info.rwdata ();
 
-  double *prel_tol = m_rel_tol.fortran_vec ();
-  double *pabs_tol = m_abs_tol.fortran_vec ();
+  double *prel_tol = m_rel_tol.rwdata ();
+  double *pabs_tol = m_abs_tol.rwdata ();
 
-  double *prwork = m_rwork.fortran_vec ();
-  F77_INT *piwork = m_iwork.fortran_vec ();
+  double *prwork = m_rwork.rwdata ();
+  F77_INT *piwork = m_iwork.rwdata ();
 
   double *dummy = nullptr;
   F77_INT *idummy = nullptr;
--- a/liboctave/numeric/DASPK.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/DASPK.h	Mon Feb 26 23:30:33 2024 -0500
@@ -35,9 +35,7 @@
 
 #include "mx-fwd.h"
 
-class
-OCTAVE_API
-DASPK : public DAE, public DASPK_options
+class OCTAVE_API DASPK : public DAE, public DASPK_options
 {
 public:
 
--- a/liboctave/numeric/DASRT.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/DASRT.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -297,18 +297,18 @@
       DASRT_options::m_reset = false;
     }
 
-  double *px = m_x.fortran_vec ();
-  double *pxdot = m_xdot.fortran_vec ();
+  double *px = m_x.rwdata ();
+  double *pxdot = m_xdot.rwdata ();
 
-  F77_INT *pinfo = m_info.fortran_vec ();
+  F77_INT *pinfo = m_info.rwdata ();
 
-  double *prel_tol = m_rel_tol.fortran_vec ();
-  double *pabs_tol = m_abs_tol.fortran_vec ();
+  double *prel_tol = m_rel_tol.rwdata ();
+  double *pabs_tol = m_abs_tol.rwdata ();
 
-  double *prwork = m_rwork.fortran_vec ();
-  F77_INT *piwork = m_iwork.fortran_vec ();
+  double *prwork = m_rwork.rwdata ();
+  F77_INT *piwork = m_iwork.rwdata ();
 
-  F77_INT *pjroot = m_jroot.fortran_vec ();
+  F77_INT *pjroot = m_jroot.rwdata ();
 
   double *dummy = nullptr;
   F77_INT *idummy = nullptr;
--- a/liboctave/numeric/DASRT.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/DASRT.h	Mon Feb 26 23:30:33 2024 -0500
@@ -34,8 +34,7 @@
 #include "DASRT-opts.h"
 #include "dMatrix.h"
 
-class
-DASRT_result
+class DASRT_result
 {
 public:
 
@@ -72,9 +71,7 @@
   ColumnVector m_t;
 };
 
-class
-OCTAVE_API
-DASRT : public DAERT, public DASRT_options
+class OCTAVE_API DASRT : public DAERT, public DASRT_options
 {
 public:
 
--- a/liboctave/numeric/DASSL.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/DASSL.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -272,16 +272,16 @@
       DASSL_options::m_reset = false;
     }
 
-  double *px = m_x.fortran_vec ();
-  double *pxdot = m_xdot.fortran_vec ();
+  double *px = m_x.rwdata ();
+  double *pxdot = m_xdot.rwdata ();
 
-  F77_INT *pinfo = m_info.fortran_vec ();
+  F77_INT *pinfo = m_info.rwdata ();
 
-  double *prel_tol = m_rel_tol.fortran_vec ();
-  double *pabs_tol = m_abs_tol.fortran_vec ();
+  double *prel_tol = m_rel_tol.rwdata ();
+  double *pabs_tol = m_abs_tol.rwdata ();
 
-  double *prwork = m_rwork.fortran_vec ();
-  F77_INT *piwork = m_iwork.fortran_vec ();
+  double *prwork = m_rwork.rwdata ();
+  F77_INT *piwork = m_iwork.rwdata ();
 
   double *dummy = nullptr;
   F77_INT *idummy = nullptr;
--- a/liboctave/numeric/DASSL.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/DASSL.h	Mon Feb 26 23:30:33 2024 -0500
@@ -35,9 +35,7 @@
 #include "Array.h"
 #include "DASSL-opts.h"
 
-class
-OCTAVE_API
-DASSL : public DAE, public DASSL_options
+class OCTAVE_API DASSL : public DAE, public DASSL_options
 {
 public:
 
--- a/liboctave/numeric/DET.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/DET.h	Mon Feb 26 23:30:33 2024 -0500
@@ -34,8 +34,7 @@
 #include "oct-cmplx.h"
 
 template <typename T>
-class
-base_det
+class base_det
 {
 public:
 
--- a/liboctave/numeric/EIG.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/EIG.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -53,21 +53,21 @@
   F77_INT info = 0;
 
   Matrix atmp = a;
-  double *tmp_data = atmp.fortran_vec ();
+  double *tmp_data = atmp.rwdata ();
 
   Array<double> wr (dim_vector (n, 1));
-  double *pwr = wr.fortran_vec ();
+  double *pwr = wr.rwdata ();
 
   Array<double> wi (dim_vector (n, 1));
-  double *pwi = wi.fortran_vec ();
+  double *pwi = wi.rwdata ();
 
   F77_INT tnvr = (calc_rev ? n : 0);
   Matrix vr (tnvr, tnvr);
-  double *pvr = vr.fortran_vec ();
+  double *pvr = vr.rwdata ();
 
   F77_INT tnvl = (calc_lev ? n : 0);
   Matrix vl (tnvl, tnvl);
-  double *pvl = vl.fortran_vec ();
+  double *pvl = vl.rwdata ();
 
   F77_INT lwork = -1;
   double dummy_work;
@@ -76,15 +76,15 @@
   F77_INT ihi;
 
   Array<double> scale (dim_vector (n, 1));
-  double *pscale = scale.fortran_vec ();
+  double *pscale = scale.rwdata ();
 
   double abnrm;
 
   Array<double> rconde (dim_vector (n, 1));
-  double *prconde = rconde.fortran_vec ();
+  double *prconde = rconde.rwdata ();
 
   Array<double> rcondv (dim_vector (n, 1));
-  double *prcondv = rcondv.fortran_vec ();
+  double *prcondv = rcondv.rwdata ();
 
   F77_INT dummy_iwork;
 
@@ -106,7 +106,7 @@
 
   lwork = static_cast<F77_INT> (dummy_work);
   Array<double> work (dim_vector (lwork, 1));
-  double *pwork = work.fortran_vec ();
+  double *pwork = work.rwdata ();
 
   F77_XFCN (dgeevx, DGEEVX, (F77_CONST_CHAR_ARG2 (balance ? "B" : "N", 1),
                              F77_CONST_CHAR_ARG2 (calc_lev ? "V" : "N", 1),
@@ -186,10 +186,10 @@
   F77_INT info = 0;
 
   Matrix atmp = a;
-  double *tmp_data = atmp.fortran_vec ();
+  double *tmp_data = atmp.rwdata ();
 
   ColumnVector wr (n);
-  double *pwr = wr.fortran_vec ();
+  double *pwr = wr.rwdata ();
 
   F77_INT lwork = -1;
   double dummy_work;
@@ -205,7 +205,7 @@
 
   lwork = static_cast<F77_INT> (dummy_work);
   Array<double> work (dim_vector (lwork, 1));
-  double *pwork = work.fortran_vec ();
+  double *pwork = work.rwdata ();
 
   F77_XFCN (dsyev, DSYEV, (F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
                            F77_CONST_CHAR_ARG2 ("U", 1),
@@ -245,39 +245,39 @@
   F77_INT info = 0;
 
   ComplexMatrix atmp = a;
-  Complex *tmp_data = atmp.fortran_vec ();
+  Complex *tmp_data = atmp.rwdata ();
 
   ComplexColumnVector wr (n);
-  Complex *pw = wr.fortran_vec ();
+  Complex *pw = wr.rwdata ();
 
   F77_INT nvr = (calc_rev ? n : 0);
   ComplexMatrix vrtmp (nvr, nvr);
-  Complex *pvr = vrtmp.fortran_vec ();
+  Complex *pvr = vrtmp.rwdata ();
 
   F77_INT nvl = (calc_lev ? n : 0);
   ComplexMatrix vltmp (nvl, nvl);
-  Complex *pvl = vltmp.fortran_vec ();
+  Complex *pvl = vltmp.rwdata ();
 
   F77_INT lwork = -1;
   Complex dummy_work;
 
   F77_INT lrwork = 2*n;
   Array<double> rwork (dim_vector (lrwork, 1));
-  double *prwork = rwork.fortran_vec ();
+  double *prwork = rwork.rwdata ();
 
   F77_INT ilo;
   F77_INT ihi;
 
   Array<double> scale (dim_vector (n, 1));
-  double *pscale = scale.fortran_vec ();
+  double *pscale = scale.rwdata ();
 
   double abnrm;
 
   Array<double> rconde (dim_vector (n, 1));
-  double *prconde = rconde.fortran_vec ();
+  double *prconde = rconde.rwdata ();
 
   Array<double> rcondv (dim_vector (n, 1));
-  double *prcondv = rcondv.fortran_vec ();
+  double *prcondv = rcondv.rwdata ();
 
   F77_XFCN (zgeevx, ZGEEVX, (F77_CONST_CHAR_ARG2 (balance ? "B" : "N", 1),
                              F77_CONST_CHAR_ARG2 (calc_lev ? "V" : "N", 1),
@@ -299,7 +299,7 @@
 
   lwork = static_cast<F77_INT> (dummy_work.real ());
   Array<Complex> work (dim_vector (lwork, 1));
-  Complex *pwork = work.fortran_vec ();
+  Complex *pwork = work.rwdata ();
 
   F77_XFCN (zgeevx, ZGEEVX, (F77_CONST_CHAR_ARG2 (balance ? "B" : "N", 1),
                              F77_CONST_CHAR_ARG2 (calc_lev ? "V" : "N", 1),
@@ -340,17 +340,17 @@
   F77_INT info = 0;
 
   ComplexMatrix atmp = a;
-  Complex *tmp_data = atmp.fortran_vec ();
+  Complex *tmp_data = atmp.rwdata ();
 
   ColumnVector wr (n);
-  double *pwr = wr.fortran_vec ();
+  double *pwr = wr.rwdata ();
 
   F77_INT lwork = -1;
   Complex dummy_work;
 
   F77_INT lrwork = 3*n;
   Array<double> rwork (dim_vector (lrwork, 1));
-  double *prwork = rwork.fortran_vec ();
+  double *prwork = rwork.rwdata ();
 
   F77_XFCN (zheev, ZHEEV, (F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
                            F77_CONST_CHAR_ARG2 ("U", 1),
@@ -365,7 +365,7 @@
 
   lwork = static_cast<F77_INT> (dummy_work.real ());
   Array<Complex> work (dim_vector (lwork, 1));
-  Complex *pwork = work.fortran_vec ();
+  Complex *pwork = work.rwdata ();
 
   F77_XFCN (zheev, ZHEEV, (F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
                            F77_CONST_CHAR_ARG2 ("U", 1),
@@ -410,7 +410,7 @@
   F77_INT info = 0;
 
   Matrix tmp = b;
-  double *tmp_data = tmp.fortran_vec ();
+  double *tmp_data = tmp.rwdata ();
 
   if (! force_qz)
     {
@@ -424,27 +424,27 @@
     }
 
   Matrix atmp = a;
-  double *atmp_data = atmp.fortran_vec ();
+  double *atmp_data = atmp.rwdata ();
 
   Matrix btmp = b;
-  double *btmp_data = btmp.fortran_vec ();
+  double *btmp_data = btmp.rwdata ();
 
   Array<double> ar (dim_vector (n, 1));
-  double *par = ar.fortran_vec ();
+  double *par = ar.rwdata ();
 
   Array<double> ai (dim_vector (n, 1));
-  double *pai = ai.fortran_vec ();
+  double *pai = ai.rwdata ();
 
   Array<double> beta (dim_vector (n, 1));
-  double *pbeta = beta.fortran_vec ();
+  double *pbeta = beta.rwdata ();
 
   F77_INT tnvr = (calc_rev ? n : 0);
   Matrix vr (tnvr, tnvr);
-  double *pvr = vr.fortran_vec ();
+  double *pvr = vr.rwdata ();
 
   F77_INT tnvl = (calc_lev ? n : 0);
   Matrix vl (tnvl, tnvl);
-  double *pvl = vl.fortran_vec ();
+  double *pvl = vl.rwdata ();
 
   F77_INT lwork = -1;
   double dummy_work;
@@ -463,7 +463,7 @@
 
   lwork = static_cast<F77_INT> (dummy_work);
   Array<double> work (dim_vector (lwork, 1));
-  double *pwork = work.fortran_vec ();
+  double *pwork = work.rwdata ();
 
   F77_XFCN (dggev, DGGEV, (F77_CONST_CHAR_ARG2 (calc_lev ? "V" : "N", 1),
                            F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
@@ -547,13 +547,13 @@
   F77_INT info = 0;
 
   Matrix atmp = a;
-  double *atmp_data = atmp.fortran_vec ();
+  double *atmp_data = atmp.rwdata ();
 
   Matrix btmp = b;
-  double *btmp_data = btmp.fortran_vec ();
+  double *btmp_data = btmp.rwdata ();
 
   ColumnVector wr (n);
-  double *pwr = wr.fortran_vec ();
+  double *pwr = wr.rwdata ();
 
   F77_INT lwork = -1;
   double dummy_work;
@@ -571,7 +571,7 @@
 
   lwork = static_cast<F77_INT> (dummy_work);
   Array<double> work (dim_vector (lwork, 1));
-  double *pwork = work.fortran_vec ();
+  double *pwork = work.rwdata ();
 
   F77_XFCN (dsygv, DSYGV, (1, F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
                            F77_CONST_CHAR_ARG2 ("U", 1),
@@ -617,7 +617,7 @@
   F77_INT info = 0;
 
   ComplexMatrix tmp = b;
-  Complex *tmp_data = tmp.fortran_vec ();
+  Complex *tmp_data = tmp.rwdata ();
 
   if (! force_qz)
     {
@@ -631,31 +631,31 @@
     }
 
   ComplexMatrix atmp = a;
-  Complex *atmp_data = atmp.fortran_vec ();
+  Complex *atmp_data = atmp.rwdata ();
 
   ComplexMatrix btmp = b;
-  Complex *btmp_data = btmp.fortran_vec ();
+  Complex *btmp_data = btmp.rwdata ();
 
   ComplexColumnVector alpha (n);
-  Complex *palpha = alpha.fortran_vec ();
+  Complex *palpha = alpha.rwdata ();
 
   ComplexColumnVector beta (n);
-  Complex *pbeta = beta.fortran_vec ();
+  Complex *pbeta = beta.rwdata ();
 
   F77_INT nvr = (calc_rev ? n : 0);
   ComplexMatrix vrtmp (nvr, nvr);
-  Complex *pvr = vrtmp.fortran_vec ();
+  Complex *pvr = vrtmp.rwdata ();
 
   F77_INT nvl = (calc_lev ? n : 0);
   ComplexMatrix vltmp (nvl, nvl);
-  Complex *pvl = vltmp.fortran_vec ();
+  Complex *pvl = vltmp.rwdata ();
 
   F77_INT lwork = -1;
   Complex dummy_work;
 
   F77_INT lrwork = 8*n;
   Array<double> rwork (dim_vector (lrwork, 1));
-  double *prwork = rwork.fortran_vec ();
+  double *prwork = rwork.rwdata ();
 
   F77_XFCN (zggev, ZGGEV, (F77_CONST_CHAR_ARG2 (calc_lev ? "V" : "N", 1),
                            F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
@@ -675,7 +675,7 @@
 
   lwork = static_cast<F77_INT> (dummy_work.real ());
   Array<Complex> work (dim_vector (lwork, 1));
-  Complex *pwork = work.fortran_vec ();
+  Complex *pwork = work.rwdata ();
 
   F77_XFCN (zggev, ZGGEV, (F77_CONST_CHAR_ARG2 (calc_lev ? "V" : "N", 1),
                            F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
@@ -725,20 +725,20 @@
   F77_INT info = 0;
 
   ComplexMatrix atmp = a;
-  Complex *atmp_data = atmp.fortran_vec ();
+  Complex *atmp_data = atmp.rwdata ();
 
   ComplexMatrix btmp = b;
-  Complex *btmp_data = btmp.fortran_vec ();
+  Complex *btmp_data = btmp.rwdata ();
 
   ColumnVector wr (n);
-  double *pwr = wr.fortran_vec ();
+  double *pwr = wr.rwdata ();
 
   F77_INT lwork = -1;
   Complex dummy_work;
 
   F77_INT lrwork = 3*n;
   Array<double> rwork (dim_vector (lrwork, 1));
-  double *prwork = rwork.fortran_vec ();
+  double *prwork = rwork.rwdata ();
 
   F77_XFCN (zhegv, ZHEGV, (1, F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
                            F77_CONST_CHAR_ARG2 ("U", 1),
@@ -754,7 +754,7 @@
 
   lwork = static_cast<F77_INT> (dummy_work.real ());
   Array<Complex> work (dim_vector (lwork, 1));
-  Complex *pwork = work.fortran_vec ();
+  Complex *pwork = work.rwdata ();
 
   F77_XFCN (zhegv, ZHEGV, (1, F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
                            F77_CONST_CHAR_ARG2 ("U", 1),
--- a/liboctave/numeric/EIG.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/EIG.h	Mon Feb 26 23:30:33 2024 -0500
@@ -35,9 +35,7 @@
 #include "CColVector.h"
 #include "CMatrix.h"
 
-class
-OCTAVE_API
-EIG
+class OCTAVE_API EIG
 {
   friend class Matrix;
   friend class ComplexMatrix;
--- a/liboctave/numeric/LSODE.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/LSODE.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -301,12 +301,12 @@
       LSODE_options::m_reset = false;
     }
 
-  double *px = m_x.fortran_vec ();
+  double *px = m_x.rwdata ();
 
-  double *pabs_tol = m_abs_tol.fortran_vec ();
+  double *pabs_tol = m_abs_tol.rwdata ();
 
-  F77_INT *piwork = m_iwork.fortran_vec ();
-  double *prwork = m_rwork.fortran_vec ();
+  F77_INT *piwork = m_iwork.rwdata ();
+  double *prwork = m_rwork.rwdata ();
 
   F77_INT tmp_istate = octave::to_f77_int (m_istate);
 
--- a/liboctave/numeric/LSODE.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/LSODE.h	Mon Feb 26 23:30:33 2024 -0500
@@ -33,9 +33,7 @@
 #include "Array.h"
 #include "LSODE-opts.h"
 
-class
-OCTAVE_API
-LSODE : public ODE, public LSODE_options
+class OCTAVE_API LSODE : public ODE, public LSODE_options
 {
 public:
 
--- a/liboctave/numeric/ODE.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/ODE.h	Mon Feb 26 23:30:33 2024 -0500
@@ -32,8 +32,7 @@
 #include "base-de.h"
 #include "dMatrix.h"
 
-class
-ODE : public base_diff_eqn, public ODEFunc
+class ODE : public base_diff_eqn, public ODEFunc
 {
 public:
 
--- a/liboctave/numeric/ODEFunc.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/ODEFunc.h	Mon Feb 26 23:30:33 2024 -0500
@@ -30,8 +30,7 @@
 
 #include "mx-fwd.h"
 
-class
-ODEFunc
+class ODEFunc
 {
 public:
 
--- a/liboctave/numeric/ODES.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/ODES.h	Mon Feb 26 23:30:33 2024 -0500
@@ -31,8 +31,7 @@
 #include "ODESFunc.h"
 #include "base-de.h"
 
-class
-ODES : public base_diff_eqn, public ODESFunc
+class ODES : public base_diff_eqn, public ODESFunc
 {
 public:
 
--- a/liboctave/numeric/ODESFunc.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/ODESFunc.h	Mon Feb 26 23:30:33 2024 -0500
@@ -32,8 +32,7 @@
 
 #include "dMatrix.h"
 
-class
-ODESFunc
+class ODESFunc
 {
 public:
 
--- a/liboctave/numeric/Quad.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/Quad.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -97,16 +97,16 @@
                        double& abserr)
 {
   F77_INT npts = octave::to_f77_int (m_singularities.numel () + 2);
-  double *points = m_singularities.fortran_vec ();
+  double *points = m_singularities.rwdata ();
   double result = 0.0;
 
   F77_INT leniw = 183*npts - 122;
   Array<F77_INT> iwork (dim_vector (leniw, 1));
-  F77_INT *piwork = iwork.fortran_vec ();
+  F77_INT *piwork = iwork.rwdata ();
 
   F77_INT lenw = 2*leniw - npts;
   Array<double> work (dim_vector (lenw, 1));
-  double *pwork = work.fortran_vec ();
+  double *pwork = work.rwdata ();
 
   user_fcn = m_f;
   F77_INT last;
@@ -147,11 +147,11 @@
 
   F77_INT leniw = 128;
   Array<F77_INT> iwork (dim_vector (leniw, 1));
-  F77_INT *piwork = iwork.fortran_vec ();
+  F77_INT *piwork = iwork.rwdata ();
 
   F77_INT lenw = 8*leniw;
   Array<double> work (dim_vector (lenw, 1));
-  double *pwork = work.fortran_vec ();
+  double *pwork = work.rwdata ();
 
   user_fcn = m_f;
   F77_INT last;
@@ -214,16 +214,16 @@
                             float& abserr)
 {
   F77_INT npts = octave::to_f77_int (m_singularities.numel () + 2);
-  float *points = m_singularities.fortran_vec ();
+  float *points = m_singularities.rwdata ();
   float result = 0.0;
 
   F77_INT leniw = 183*npts - 122;
   Array<F77_INT> iwork (dim_vector (leniw, 1));
-  F77_INT *piwork = iwork.fortran_vec ();
+  F77_INT *piwork = iwork.rwdata ();
 
   F77_INT lenw = 2*leniw - npts;
   Array<float> work (dim_vector (lenw, 1));
-  float *pwork = work.fortran_vec ();
+  float *pwork = work.rwdata ();
 
   float_user_fcn = m_ff;
   F77_INT last;
@@ -264,11 +264,11 @@
 
   F77_INT leniw = 128;
   Array<F77_INT> iwork (dim_vector (leniw, 1));
-  F77_INT *piwork = iwork.fortran_vec ();
+  F77_INT *piwork = iwork.rwdata ();
 
   F77_INT lenw = 8*leniw;
   Array<float> work (dim_vector (lenw, 1));
-  float *pwork = work.fortran_vec ();
+  float *pwork = work.rwdata ();
 
   float_user_fcn = m_ff;
   F77_INT last;
--- a/liboctave/numeric/Quad.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/Quad.h	Mon Feb 26 23:30:33 2024 -0500
@@ -36,9 +36,7 @@
 
 #include "Quad-opts.h"
 
-class
-OCTAVE_API
-Quad : public Quad_options
+class OCTAVE_API Quad : public Quad_options
 {
 public:
 
@@ -118,9 +116,7 @@
   float_integrand_fcn m_ff;
 };
 
-class
-OCTAVE_API
-DefQuad : public Quad
+class OCTAVE_API DefQuad : public Quad
 {
 public:
 
@@ -159,9 +155,7 @@
   ColumnVector m_singularities;
 };
 
-class
-OCTAVE_API
-IndefQuad : public Quad
+class OCTAVE_API IndefQuad : public Quad
 {
 public:
 
@@ -189,9 +183,7 @@
   IntegralType m_type;
 };
 
-class
-OCTAVE_API
-FloatDefQuad : public Quad
+class OCTAVE_API FloatDefQuad : public Quad
 {
 public:
 
@@ -230,9 +222,7 @@
   FloatColumnVector m_singularities;
 };
 
-class
-OCTAVE_API
-FloatIndefQuad : public Quad
+class OCTAVE_API FloatIndefQuad : public Quad
 {
 public:
 
--- a/liboctave/numeric/aepbalance.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/aepbalance.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -64,8 +64,8 @@
   F77_INT info, t_ilo, t_ihi;
 
   F77_XFCN (dgebal, DGEBAL, (F77_CONST_CHAR_ARG2 (&m_job, 1), n,
-                             m_balanced_mat.fortran_vec (), n,
-                             t_ilo, t_ihi, m_scale.fortran_vec (), info
+                             m_balanced_mat.rwdata (), n,
+                             t_ilo, t_ihi, m_scale.rwdata (), info
                              F77_CHAR_ARG_LEN (1)));
 
   m_ilo = t_ilo;
@@ -91,7 +91,7 @@
   F77_XFCN (dgebak, DGEBAK, (F77_CONST_CHAR_ARG2 (&m_job, 1),
                              F77_CONST_CHAR_ARG2 (&side, 1),
                              n, t_ilo, t_ihi, m_scale.data (), n,
-                             balancing_mat.fortran_vec (), n, info
+                             balancing_mat.rwdata (), n, info
                              F77_CHAR_ARG_LEN (1)
                              F77_CHAR_ARG_LEN (1)));
 
@@ -116,8 +116,8 @@
   F77_INT info, t_ilo, t_ihi;
 
   F77_XFCN (sgebal, SGEBAL, (F77_CONST_CHAR_ARG2 (&m_job, 1), n,
-                             m_balanced_mat.fortran_vec (), n, t_ilo,
-                             t_ihi, m_scale.fortran_vec (), info
+                             m_balanced_mat.rwdata (), n, t_ilo,
+                             t_ihi, m_scale.rwdata (), info
                              F77_CHAR_ARG_LEN (1)));
 
   m_ilo = t_ilo;
@@ -143,7 +143,7 @@
   F77_XFCN (sgebak, SGEBAK, (F77_CONST_CHAR_ARG2 (&m_job, 1),
                              F77_CONST_CHAR_ARG2 (&side, 1),
                              n, t_ilo, t_ihi, m_scale.data (), n,
-                             balancing_mat.fortran_vec (), n, info
+                             balancing_mat.rwdata (), n, info
                              F77_CHAR_ARG_LEN (1)
                              F77_CHAR_ARG_LEN (1)));
 
@@ -169,8 +169,8 @@
 
   F77_XFCN (zgebal, ZGEBAL,
             (F77_CONST_CHAR_ARG2 (&m_job, 1), n,
-             F77_DBLE_CMPLX_ARG (m_balanced_mat.fortran_vec ()),
-             n, t_ilo, t_ihi, m_scale.fortran_vec (), info
+             F77_DBLE_CMPLX_ARG (m_balanced_mat.rwdata ()),
+             n, t_ilo, t_ihi, m_scale.rwdata (), info
              F77_CHAR_ARG_LEN (1)));
 
   m_ilo = t_ilo;
@@ -197,7 +197,7 @@
             (F77_CONST_CHAR_ARG2 (&m_job, 1),
              F77_CONST_CHAR_ARG2 (&side, 1),
              n, t_ilo, t_ihi, m_scale.data (), n,
-             F77_DBLE_CMPLX_ARG (balancing_mat.fortran_vec ()),
+             F77_DBLE_CMPLX_ARG (balancing_mat.rwdata ()),
              n, info
              F77_CHAR_ARG_LEN (1)
              F77_CHAR_ARG_LEN (1)));
@@ -223,8 +223,8 @@
   F77_INT info, t_ilo, t_ihi;
 
   F77_XFCN (cgebal, CGEBAL, (F77_CONST_CHAR_ARG2 (&m_job, 1), n,
-                             F77_CMPLX_ARG (m_balanced_mat.fortran_vec ()),
-                             n, t_ilo, t_ihi, m_scale.fortran_vec (), info
+                             F77_CMPLX_ARG (m_balanced_mat.rwdata ()),
+                             n, t_ilo, t_ihi, m_scale.rwdata (), info
                              F77_CHAR_ARG_LEN (1)));
 
   m_ilo = t_ilo;
@@ -250,7 +250,7 @@
   F77_XFCN (cgebak, CGEBAK, (F77_CONST_CHAR_ARG2 (&m_job, 1),
                              F77_CONST_CHAR_ARG2 (&side, 1),
                              n, t_ilo, t_ihi, m_scale.data (), n,
-                             F77_CMPLX_ARG (balancing_mat.fortran_vec ()),
+                             F77_CMPLX_ARG (balancing_mat.rwdata ()),
                              n, info
                              F77_CHAR_ARG_LEN (1)
                              F77_CHAR_ARG_LEN (1)));
--- a/liboctave/numeric/aepbalance.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/aepbalance.h	Mon Feb 26 23:30:33 2024 -0500
@@ -35,8 +35,7 @@
 OCTAVE_BEGIN_NAMESPACE(math)
 
 template <typename MT>
-class
-aepbalance
+class aepbalance
 {
 public:
 
--- a/liboctave/numeric/base-dae.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/base-dae.h	Mon Feb 26 23:30:33 2024 -0500
@@ -30,8 +30,7 @@
 
 #include "base-de.h"
 
-class
-base_diff_alg_eqn : public base_diff_eqn
+class base_diff_alg_eqn : public base_diff_eqn
 {
 public:
 
--- a/liboctave/numeric/base-de.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/base-de.h	Mon Feb 26 23:30:33 2024 -0500
@@ -32,8 +32,7 @@
 
 #include "dColVector.h"
 
-class
-base_diff_eqn
+class base_diff_eqn
 {
 public:
 
--- a/liboctave/numeric/bsxfun-defs.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/bsxfun-defs.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -44,8 +44,8 @@
               void (*op_vs) (std::size_t, R *, const X *, Y))
 {
   int nd = std::max (x.ndims (), y.ndims ());
-  dim_vector dvx = x.dims ().redim (nd);
-  dim_vector dvy = y.dims ().redim (nd);
+  const dim_vector& dvx = x.dims ().redim (nd);
+  const dim_vector& dvy = y.dims ().redim (nd);
 
   // Construct the result dimensions.
   dim_vector dvr;
@@ -68,7 +68,7 @@
 
   const X *xvec = x.data ();
   const Y *yvec = y.data ();
-  R *rvec = retval.fortran_vec ();
+  R *rvec = retval.rwdata ();
 
   // Fold the common leading dimensions.
   octave_idx_type start, ldr = 1;
@@ -143,13 +143,13 @@
                       void (*op_vv) (std::size_t, R *, const X *),
                       void (*op_vs) (std::size_t, R *, X))
 {
-  dim_vector dvr = r.dims ();
+  const dim_vector& dvr = r.dims ();
   dim_vector dvx = x.dims ();
   octave_idx_type nd = r.ndims ();
   dvx = dvx.redim (nd);
 
   const X *xvec = x.data ();
-  R *rvec = r.fortran_vec ();
+  R *rvec = r.rwdata ();
 
   // Fold the common leading dimensions.
   octave_idx_type start, ldr = 1;
--- a/liboctave/numeric/chol.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/chol.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -64,7 +64,7 @@
   F77_INT info;
 
   Matrix tmp = r;
-  double *v = tmp.fortran_vec ();
+  double *v = tmp.rwdata ();
 
   if (is_upper)
     F77_XFCN (dpotri, DPOTRI, (F77_CONST_CHAR_ARG2 ("U", 1), n,
@@ -112,7 +112,7 @@
   F77_INT info;
 
   FloatMatrix tmp = r;
-  float *v = tmp.fortran_vec ();
+  float *v = tmp.rwdata ();
 
   if (is_upper)
     F77_XFCN (spotri, SPOTRI, (F77_CONST_CHAR_ARG2 ("U", 1), n,
@@ -163,11 +163,11 @@
 
   if (is_upper)
     F77_XFCN (zpotri, ZPOTRI, (F77_CONST_CHAR_ARG2 ("U", 1), n,
-                               F77_DBLE_CMPLX_ARG (tmp.fortran_vec ()), n, info
+                               F77_DBLE_CMPLX_ARG (tmp.rwdata ()), n, info
                                F77_CHAR_ARG_LEN (1)));
   else
     F77_XFCN (zpotri, ZPOTRI, (F77_CONST_CHAR_ARG2 ("L", 1), n,
-                               F77_DBLE_CMPLX_ARG (tmp.fortran_vec ()), n, info
+                               F77_DBLE_CMPLX_ARG (tmp.rwdata ()), n, info
                                F77_CHAR_ARG_LEN (1)));
 
   // If someone thinks of a more graceful way of doing this (or
@@ -208,11 +208,11 @@
 
   if (is_upper)
     F77_XFCN (cpotri, CPOTRI, (F77_CONST_CHAR_ARG2 ("U", 1), n,
-                               F77_CMPLX_ARG (tmp.fortran_vec ()), n, info
+                               F77_CMPLX_ARG (tmp.rwdata ()), n, info
                                F77_CHAR_ARG_LEN (1)));
   else
     F77_XFCN (cpotri, CPOTRI, (F77_CONST_CHAR_ARG2 ("L", 1), n,
-                               F77_CMPLX_ARG (tmp.fortran_vec ()), n, info
+                               F77_CMPLX_ARG (tmp.rwdata ()), n, info
                                F77_CHAR_ARG_LEN (1)));
 
   // If someone thinks of a more graceful way of doing this (or
@@ -437,7 +437,7 @@
         for (octave_idx_type i = j; i < n; i++)
           m_chol_mat.xelem (i, j) = a(i, j);
       }
-  double *h = m_chol_mat.fortran_vec ();
+  double *h = m_chol_mat.rwdata ();
 
   // Calculate the norm of the matrix, for later use.
   double anorm = 0;
@@ -460,7 +460,7 @@
 
       // Now calculate the condition number for non-singular matrix.
       Array<double> z (dim_vector (3*n, 1));
-      double *pz = z.fortran_vec ();
+      double *pz = z.rwdata ();
       OCTAVE_LOCAL_BUFFER (F77_INT, iz, n);
       if (m_is_upper)
         F77_XFCN (dpocon, DPOCON, (F77_CONST_CHAR_ARG2 ("U", 1), n, h,
@@ -493,8 +493,8 @@
 
   OCTAVE_LOCAL_BUFFER (double, w, n);
 
-  F77_XFCN (dch1up, DCH1UP, (n, m_chol_mat.fortran_vec (), n,
-                             utmp.fortran_vec (), w));
+  F77_XFCN (dch1up, DCH1UP, (n, m_chol_mat.rwdata (), n,
+                             utmp.rwdata (), w));
 }
 
 template <>
@@ -512,8 +512,8 @@
 
   OCTAVE_LOCAL_BUFFER (double, w, n);
 
-  F77_XFCN (dch1dn, DCH1DN, (n, m_chol_mat.fortran_vec (), n,
-                             utmp.fortran_vec (), w, info));
+  F77_XFCN (dch1dn, DCH1DN, (n, m_chol_mat.rwdata (), n,
+                             utmp.rwdata (), w, info));
 
   return info;
 }
@@ -539,8 +539,8 @@
   m_chol_mat.resize (n+1, n+1);
   F77_INT ldcm = to_f77_int (m_chol_mat.rows ());
 
-  F77_XFCN (dchinx, DCHINX, (n, m_chol_mat.fortran_vec (), ldcm,
-                             j + 1, utmp.fortran_vec (), w, info));
+  F77_XFCN (dchinx, DCHINX, (n, m_chol_mat.rwdata (), ldcm,
+                             j + 1, utmp.rwdata (), w, info));
 
   return info;
 }
@@ -557,7 +557,7 @@
 
   OCTAVE_LOCAL_BUFFER (double, w, n);
 
-  F77_XFCN (dchdex, DCHDEX, (n, m_chol_mat.fortran_vec (), n, j + 1, w));
+  F77_XFCN (dchdex, DCHDEX, (n, m_chol_mat.rwdata (), n, j + 1, w));
 
   m_chol_mat.resize (n-1, n-1);
 }
@@ -575,7 +575,7 @@
 
   OCTAVE_LOCAL_BUFFER (double, w, 2*n);
 
-  F77_XFCN (dchshx, DCHSHX, (n, m_chol_mat.fortran_vec (), n,
+  F77_XFCN (dchshx, DCHSHX, (n, m_chol_mat.rwdata (), n,
                              i + 1, j + 1, w));
 }
 
@@ -613,7 +613,7 @@
         for (octave_idx_type i = j; i < n; i++)
           m_chol_mat.xelem (i, j) = a(i, j);
       }
-  float *h = m_chol_mat.fortran_vec ();
+  float *h = m_chol_mat.rwdata ();
 
   // Calculate the norm of the matrix, for later use.
   float anorm = 0;
@@ -636,7 +636,7 @@
 
       // Now calculate the condition number for non-singular matrix.
       Array<float> z (dim_vector (3*n, 1));
-      float *pz = z.fortran_vec ();
+      float *pz = z.rwdata ();
       OCTAVE_LOCAL_BUFFER (F77_INT, iz, n);
       if (m_is_upper)
         F77_XFCN (spocon, SPOCON, (F77_CONST_CHAR_ARG2 ("U", 1), n, h,
@@ -669,8 +669,8 @@
 
   OCTAVE_LOCAL_BUFFER (float, w, n);
 
-  F77_XFCN (sch1up, SCH1UP, (n, m_chol_mat.fortran_vec (), n,
-                             utmp.fortran_vec (), w));
+  F77_XFCN (sch1up, SCH1UP, (n, m_chol_mat.rwdata (), n,
+                             utmp.rwdata (), w));
 }
 
 template <>
@@ -688,8 +688,8 @@
 
   OCTAVE_LOCAL_BUFFER (float, w, n);
 
-  F77_XFCN (sch1dn, SCH1DN, (n, m_chol_mat.fortran_vec (), n,
-                             utmp.fortran_vec (), w, info));
+  F77_XFCN (sch1dn, SCH1DN, (n, m_chol_mat.rwdata (), n,
+                             utmp.rwdata (), w, info));
 
   return info;
 }
@@ -716,8 +716,8 @@
   m_chol_mat.resize (n+1, n+1);
   F77_INT ldcm = to_f77_int (m_chol_mat.rows ());
 
-  F77_XFCN (schinx, SCHINX, (n, m_chol_mat.fortran_vec (), ldcm,
-                             j + 1, utmp.fortran_vec (), w, info));
+  F77_XFCN (schinx, SCHINX, (n, m_chol_mat.rwdata (), ldcm,
+                             j + 1, utmp.rwdata (), w, info));
 
   return info;
 }
@@ -734,7 +734,7 @@
 
   OCTAVE_LOCAL_BUFFER (float, w, n);
 
-  F77_XFCN (schdex, SCHDEX, (n, m_chol_mat.fortran_vec (), n,
+  F77_XFCN (schdex, SCHDEX, (n, m_chol_mat.rwdata (), n,
                              j + 1, w));
 
   m_chol_mat.resize (n-1, n-1);
@@ -753,7 +753,7 @@
 
   OCTAVE_LOCAL_BUFFER (float, w, 2*n);
 
-  F77_XFCN (schshx, SCHSHX, (n, m_chol_mat.fortran_vec (), n,
+  F77_XFCN (schshx, SCHSHX, (n, m_chol_mat.rwdata (), n,
                              i + 1, j + 1, w));
 }
 
@@ -791,7 +791,7 @@
         for (octave_idx_type i = j; i < n; i++)
           m_chol_mat.xelem (i, j) = a(i, j);
       }
-  Complex *h = m_chol_mat.fortran_vec ();
+  Complex *h = m_chol_mat.rwdata ();
 
   // Calculate the norm of the matrix, for later use.
   double anorm = 0;
@@ -816,9 +816,9 @@
 
       // Now calculate the condition number for non-singular matrix.
       Array<Complex> z (dim_vector (2*n, 1));
-      Complex *pz = z.fortran_vec ();
+      Complex *pz = z.rwdata ();
       Array<double> rz (dim_vector (n, 1));
-      double *prz = rz.fortran_vec ();
+      double *prz = rz.rwdata ();
       F77_XFCN (zpocon, ZPOCON, (F77_CONST_CHAR_ARG2 ("U", 1), n,
                                  F77_DBLE_CMPLX_ARG (h), n, anorm, m_rcond,
                                  F77_DBLE_CMPLX_ARG (pz), prz, zpocon_info
@@ -847,9 +847,9 @@
   OCTAVE_LOCAL_BUFFER (double, rw, n);
 
   F77_XFCN (zch1up, ZCH1UP, (n,
-                             F77_DBLE_CMPLX_ARG (m_chol_mat.fortran_vec ()),
+                             F77_DBLE_CMPLX_ARG (m_chol_mat.rwdata ()),
                              n,
-                             F77_DBLE_CMPLX_ARG (utmp.fortran_vec ()),
+                             F77_DBLE_CMPLX_ARG (utmp.rwdata ()),
                              rw));
 }
 
@@ -869,9 +869,9 @@
   OCTAVE_LOCAL_BUFFER (double, rw, n);
 
   F77_XFCN (zch1dn, ZCH1DN, (n,
-                             F77_DBLE_CMPLX_ARG (m_chol_mat.fortran_vec ()),
+                             F77_DBLE_CMPLX_ARG (m_chol_mat.rwdata ()),
                              n,
-                             F77_DBLE_CMPLX_ARG (utmp.fortran_vec ()),
+                             F77_DBLE_CMPLX_ARG (utmp.rwdata ()),
                              rw, info));
 
   return info;
@@ -900,9 +900,9 @@
   F77_INT ldcm = to_f77_int (m_chol_mat.rows ());
 
   F77_XFCN (zchinx, ZCHINX, (n,
-                             F77_DBLE_CMPLX_ARG (m_chol_mat.fortran_vec ()),
+                             F77_DBLE_CMPLX_ARG (m_chol_mat.rwdata ()),
                              ldcm, j + 1,
-                             F77_DBLE_CMPLX_ARG (utmp.fortran_vec ()),
+                             F77_DBLE_CMPLX_ARG (utmp.rwdata ()),
                              rw, info));
 
   return info;
@@ -921,7 +921,7 @@
   OCTAVE_LOCAL_BUFFER (double, rw, n);
 
   F77_XFCN (zchdex, ZCHDEX, (n,
-                             F77_DBLE_CMPLX_ARG (m_chol_mat.fortran_vec ()),
+                             F77_DBLE_CMPLX_ARG (m_chol_mat.rwdata ()),
                              n, j + 1, rw));
 
   m_chol_mat.resize (n-1, n-1);
@@ -943,7 +943,7 @@
   OCTAVE_LOCAL_BUFFER (double, rw, n);
 
   F77_XFCN (zchshx, ZCHSHX, (n,
-                             F77_DBLE_CMPLX_ARG (m_chol_mat.fortran_vec ()),
+                             F77_DBLE_CMPLX_ARG (m_chol_mat.rwdata ()),
                              n, i + 1, j + 1,
                              F77_DBLE_CMPLX_ARG (w), rw));
 }
@@ -983,7 +983,7 @@
         for (octave_idx_type i = j; i < n; i++)
           m_chol_mat.xelem (i, j) = a(i, j);
       }
-  FloatComplex *h = m_chol_mat.fortran_vec ();
+  FloatComplex *h = m_chol_mat.rwdata ();
 
   // Calculate the norm of the matrix, for later use.
   float anorm = 0;
@@ -1008,9 +1008,9 @@
 
       // Now calculate the condition number for non-singular matrix.
       Array<FloatComplex> z (dim_vector (2*n, 1));
-      FloatComplex *pz = z.fortran_vec ();
+      FloatComplex *pz = z.rwdata ();
       Array<float> rz (dim_vector (n, 1));
-      float *prz = rz.fortran_vec ();
+      float *prz = rz.rwdata ();
       F77_XFCN (cpocon, CPOCON, (F77_CONST_CHAR_ARG2 ("U", 1), n,
                                  F77_CMPLX_ARG (h), n, anorm, m_rcond,
                                  F77_CMPLX_ARG (pz), prz, cpocon_info
@@ -1038,8 +1038,8 @@
 
   OCTAVE_LOCAL_BUFFER (float, rw, n);
 
-  F77_XFCN (cch1up, CCH1UP, (n, F77_CMPLX_ARG (m_chol_mat.fortran_vec ()),
-                             n, F77_CMPLX_ARG (utmp.fortran_vec ()), rw));
+  F77_XFCN (cch1up, CCH1UP, (n, F77_CMPLX_ARG (m_chol_mat.rwdata ()),
+                             n, F77_CMPLX_ARG (utmp.rwdata ()), rw));
 }
 
 template <>
@@ -1057,8 +1057,8 @@
 
   OCTAVE_LOCAL_BUFFER (float, rw, n);
 
-  F77_XFCN (cch1dn, CCH1DN, (n, F77_CMPLX_ARG (m_chol_mat.fortran_vec ()),
-                             n, F77_CMPLX_ARG (utmp.fortran_vec ()),
+  F77_XFCN (cch1dn, CCH1DN, (n, F77_CMPLX_ARG (m_chol_mat.rwdata ()),
+                             n, F77_CMPLX_ARG (utmp.rwdata ()),
                              rw, info));
 
   return info;
@@ -1086,9 +1086,9 @@
   m_chol_mat.resize (n+1, n+1);
   F77_INT ldcm = to_f77_int (m_chol_mat.rows ());
 
-  F77_XFCN (cchinx, CCHINX, (n, F77_CMPLX_ARG (m_chol_mat.fortran_vec ()),
+  F77_XFCN (cchinx, CCHINX, (n, F77_CMPLX_ARG (m_chol_mat.rwdata ()),
                              ldcm, j + 1,
-                             F77_CMPLX_ARG (utmp.fortran_vec ()),
+                             F77_CMPLX_ARG (utmp.rwdata ()),
                              rw, info));
 
   return info;
@@ -1106,7 +1106,7 @@
 
   OCTAVE_LOCAL_BUFFER (float, rw, n);
 
-  F77_XFCN (cchdex, CCHDEX, (n, F77_CMPLX_ARG (m_chol_mat.fortran_vec ()),
+  F77_XFCN (cchdex, CCHDEX, (n, F77_CMPLX_ARG (m_chol_mat.rwdata ()),
                              n, j + 1, rw));
 
   m_chol_mat.resize (n-1, n-1);
@@ -1127,7 +1127,7 @@
   OCTAVE_LOCAL_BUFFER (FloatComplex, w, n);
   OCTAVE_LOCAL_BUFFER (float, rw, n);
 
-  F77_XFCN (cchshx, CCHSHX, (n, F77_CMPLX_ARG (m_chol_mat.fortran_vec ()),
+  F77_XFCN (cchshx, CCHSHX, (n, F77_CMPLX_ARG (m_chol_mat.rwdata ()),
                              n, i + 1, j + 1, F77_CMPLX_ARG (w), rw));
 }
 
--- a/liboctave/numeric/chol.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/chol.h	Mon Feb 26 23:30:33 2024 -0500
@@ -33,8 +33,7 @@
 OCTAVE_BEGIN_NAMESPACE(math)
 
 template <typename T>
-class
-chol
+class chol
 {
 public:
 
--- a/liboctave/numeric/eigs-base.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/eigs-base.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -509,7 +509,8 @@
     }
 
   double rcond = (minU / maxU);
-  volatile double rcond_plus_one = rcond + 1.0;
+  // Prevent use of extra precision.
+  double rcond_plus_one = rcond + 1.0;
 
   if (rcond_plus_one == 1.0 || octave::math::isnan (rcond))
     warn_convergence ();
@@ -538,7 +539,7 @@
             {
               Matrix tmp = sigma * b.transpose () * b;
               const double *pB = permB.data ();
-              double *p = AminusSigmaB.fortran_vec ();
+              double *p = AminusSigmaB.rwdata ();
 
               if (permB.numel ())
                 {
@@ -557,7 +558,7 @@
         }
       else
         {
-          double *p = AminusSigmaB.fortran_vec ();
+          double *p = AminusSigmaB.rwdata ();
 
           for (octave_idx_type i = 0; i < n; i++)
             p[i*(n+1)] -= sigma;
@@ -591,7 +592,8 @@
     }
 
   double rcond = (minU / maxU);
-  volatile double rcond_plus_one = rcond + 1.0;
+  // Prevent use of extra precision.
+  double rcond_plus_one = rcond + 1.0;
 
   if (rcond_plus_one == 1.0 || octave::math::isnan (rcond))
     warn_convergence ();
@@ -691,7 +693,8 @@
     }
 
   double rcond = (minU / maxU);
-  volatile double rcond_plus_one = rcond + 1.0;
+  // Prevent use of extra precision.
+  double rcond_plus_one = rcond + 1.0;
 
   if (rcond_plus_one == 1.0 || octave::math::isnan (rcond))
     warn_convergence ();
@@ -720,7 +723,7 @@
             {
               ComplexMatrix tmp = sigma * b.hermitian () * b;
               const double *pB = permB.data ();
-              Complex *p = AminusSigmaB.fortran_vec ();
+              Complex *p = AminusSigmaB.rwdata ();
 
               if (permB.numel ())
                 {
@@ -739,7 +742,7 @@
         }
       else
         {
-          Complex *p = AminusSigmaB.fortran_vec ();
+          Complex *p = AminusSigmaB.rwdata ();
 
           for (octave_idx_type i = 0; i < n; i++)
             p[i*(n+1)] -= sigma;
@@ -773,7 +776,8 @@
     }
 
   double rcond = (minU / maxU);
-  volatile double rcond_plus_one = rcond + 1.0;
+  // Prevent use of extra precision.
+  double rcond_plus_one = rcond + 1.0;
 
   if (rcond_plus_one == 1.0 || octave::math::isnan (rcond))
     warn_convergence ();
@@ -892,7 +896,7 @@
     }
 
   Array<F77_INT> ip (dim_vector (11, 1));
-  F77_INT *iparam = ip.fortran_vec ();
+  F77_INT *iparam = ip.rwdata ();
 
   ip(0) = 1; //ishift
   ip(1) = 0;   // ip(1) not referenced
@@ -908,7 +912,7 @@
   // ip(7) to ip(10) return values
 
   Array<F77_INT> iptr (dim_vector (14, 1));
-  F77_INT *ipntr = iptr.fortran_vec ();
+  F77_INT *ipntr = iptr.rwdata ();
 
   F77_INT ido = 0;
   int iter = 0;
@@ -917,7 +921,7 @@
   OCTAVE_LOCAL_BUFFER (double, v, n * p);
   OCTAVE_LOCAL_BUFFER (double, workl, lwork);
   OCTAVE_LOCAL_BUFFER (double, workd, 3 * n);
-  double *presid = resid.fortran_vec ();
+  double *presid = resid.rwdata ();
 
   do
     {
@@ -1000,13 +1004,13 @@
   // is just workspace for ARPACK, so use int type to
   // avoid problems.
   Array<F77_INT> s (dim_vector (p, 1));
-  F77_INT *sel = s.fortran_vec ();
+  F77_INT *sel = s.rwdata ();
 
   eig_vec.resize (n, k);
-  double *z = eig_vec.fortran_vec ();
+  double *z = eig_vec.rwdata ();
 
   eig_val.resize (k);
-  double *d = eig_val.fortran_vec ();
+  double *d = eig_val.rwdata ();
 
   F77_FUNC (dseupd, DSEUPD)
   (rvec, F77_CONST_CHAR_ARG2 ("A", 1), sel, d, z, n, sigma,
@@ -1159,7 +1163,7 @@
     bmat = 'G';
 
   Array<F77_INT> ip (dim_vector (11, 1));
-  F77_INT *iparam = ip.fortran_vec ();
+  F77_INT *iparam = ip.rwdata ();
 
   ip(0) = 1; //ishift
   ip(1) = 0;   // ip(1) not referenced
@@ -1175,7 +1179,7 @@
   // ip(7) to ip(10) return values
 
   Array<F77_INT> iptr (dim_vector (14, 1));
-  F77_INT *ipntr = iptr.fortran_vec ();
+  F77_INT *ipntr = iptr.rwdata ();
 
   F77_INT ido = 0;
   int iter = 0;
@@ -1193,7 +1197,7 @@
   OCTAVE_LOCAL_BUFFER (double, v, n * p);
   OCTAVE_LOCAL_BUFFER (double, workl, lwork);
   OCTAVE_LOCAL_BUFFER (double, workd, 3 * n);
-  double *presid = resid.fortran_vec ();
+  double *presid = resid.rwdata ();
 
   do
     {
@@ -1312,13 +1316,13 @@
   // is just workspace for ARPACK, so use int type to
   // avoid problems.
   Array<F77_INT> s (dim_vector (p, 1));
-  F77_INT *sel = s.fortran_vec ();
+  F77_INT *sel = s.rwdata ();
 
   eig_vec.resize (n, k);
-  double *z = eig_vec.fortran_vec ();
+  double *z = eig_vec.rwdata ();
 
   eig_val.resize (k);
-  double *d = eig_val.fortran_vec ();
+  double *d = eig_val.rwdata ();
 
   F77_FUNC (dseupd, DSEUPD)
   (rvec, F77_CONST_CHAR_ARG2 ("A", 1), sel, d, z, n, sigma,
@@ -1512,7 +1516,7 @@
     }
 
   Array<F77_INT> ip (dim_vector (11, 1));
-  F77_INT *iparam = ip.fortran_vec ();
+  F77_INT *iparam = ip.rwdata ();
 
   ip(0) = 1; //ishift
   ip(1) = 0;   // ip(1) not referenced
@@ -1528,7 +1532,7 @@
   // ip(7) to ip(10) return values
 
   Array<F77_INT> iptr (dim_vector (14, 1));
-  F77_INT *ipntr = iptr.fortran_vec ();
+  F77_INT *ipntr = iptr.rwdata ();
 
   F77_INT ido = 0;
   int iter = 0;
@@ -1537,7 +1541,7 @@
   OCTAVE_LOCAL_BUFFER (double, v, n * p);
   OCTAVE_LOCAL_BUFFER (double, workl, lwork);
   OCTAVE_LOCAL_BUFFER (double, workd, 3 * n);
-  double *presid = resid.fortran_vec ();
+  double *presid = resid.rwdata ();
 
   do
     {
@@ -1685,13 +1689,13 @@
   // is just workspace for ARPACK, so use int type to
   // avoid problems.
   Array<F77_INT> s (dim_vector (p, 1));
-  F77_INT *sel = s.fortran_vec ();
+  F77_INT *sel = s.rwdata ();
 
   eig_vec.resize (n, k);
-  double *z = eig_vec.fortran_vec ();
+  double *z = eig_vec.rwdata ();
 
   eig_val.resize (k);
-  double *d = eig_val.fortran_vec ();
+  double *d = eig_val.rwdata ();
 
   F77_FUNC (dseupd, DSEUPD)
   (rvec, F77_CONST_CHAR_ARG2 ("A", 1), sel, d, z, n, sigma,
@@ -1869,7 +1873,7 @@
     }
 
   Array<F77_INT> ip (dim_vector (11, 1));
-  F77_INT *iparam = ip.fortran_vec ();
+  F77_INT *iparam = ip.rwdata ();
 
   ip(0) = 1; //ishift
   ip(1) = 0;   // ip(1) not referenced
@@ -1885,7 +1889,7 @@
   // ip(7) to ip(10) return values
 
   Array<F77_INT> iptr (dim_vector (14, 1));
-  F77_INT *ipntr = iptr.fortran_vec ();
+  F77_INT *ipntr = iptr.rwdata ();
 
   F77_INT ido = 0;
   int iter = 0;
@@ -1894,7 +1898,7 @@
   OCTAVE_LOCAL_BUFFER (double, v, n * (p + 1));
   OCTAVE_LOCAL_BUFFER (double, workl, lwork + 1);
   OCTAVE_LOCAL_BUFFER (double, workd, 3 * n + 1);
-  double *presid = resid.fortran_vec ();
+  double *presid = resid.rwdata ();
 
   do
     {
@@ -1981,7 +1985,7 @@
   // is just workspace for ARPACK, so use int type to
   // avoid problems.
   Array<F77_INT> s (dim_vector (p, 1));
-  F77_INT *sel = s.fortran_vec ();
+  F77_INT *sel = s.rwdata ();
 
   // FIXME: initialize eig_vec2 to zero; apparently dneupd can skip
   // the assignment to elements of Z that represent imaginary parts.
@@ -1991,7 +1995,7 @@
   //   [vecs, vals, f] = eigs (A, 1)
 
   Matrix eig_vec2 (n, k + 1, 0.0);
-  double *z = eig_vec2.fortran_vec ();
+  double *z = eig_vec2.rwdata ();
 
   OCTAVE_LOCAL_BUFFER (double, dr, k + 1);
   OCTAVE_LOCAL_BUFFER (double, di, k + 1);
@@ -2013,7 +2017,7 @@
     k = ip(4);
 
   eig_val.resize (k);
-  Complex *d = eig_val.fortran_vec ();
+  Complex *d = eig_val.rwdata ();
 
   if (info2 == 0)
     {
@@ -2196,7 +2200,7 @@
     bmat = 'G';
 
   Array<F77_INT> ip (dim_vector (11, 1));
-  F77_INT *iparam = ip.fortran_vec ();
+  F77_INT *iparam = ip.rwdata ();
 
   ip(0) = 1; //ishift
   ip(1) = 0;   // ip(1) not referenced
@@ -2212,7 +2216,7 @@
   // ip(7) to ip(10) return values
 
   Array<F77_INT> iptr (dim_vector (14, 1));
-  F77_INT *ipntr = iptr.fortran_vec ();
+  F77_INT *ipntr = iptr.rwdata ();
 
   F77_INT ido = 0;
   int iter = 0;
@@ -2230,7 +2234,7 @@
   OCTAVE_LOCAL_BUFFER (double, v, n * (p + 1));
   OCTAVE_LOCAL_BUFFER (double, workl, lwork + 1);
   OCTAVE_LOCAL_BUFFER (double, workd, 3 * n + 1);
-  double *presid = resid.fortran_vec ();
+  double *presid = resid.rwdata ();
 
   do
     {
@@ -2354,7 +2358,7 @@
   // is just workspace for ARPACK, so use int type to
   // avoid problems.
   Array<F77_INT> s (dim_vector (p, 1));
-  F77_INT *sel = s.fortran_vec ();
+  F77_INT *sel = s.rwdata ();
 
   // FIXME: initialize eig_vec2 to zero; apparently dneupd can skip
   // the assignment to elements of Z that represent imaginary parts.
@@ -2364,7 +2368,7 @@
   //   [vecs, vals, f] = eigs (A, 1)
 
   Matrix eig_vec2 (n, k + 1, 0.0);
-  double *z = eig_vec2.fortran_vec ();
+  double *z = eig_vec2.rwdata ();
 
   OCTAVE_LOCAL_BUFFER (double, dr, k + 1);
   OCTAVE_LOCAL_BUFFER (double, di, k + 1);
@@ -2386,7 +2390,7 @@
     k = ip(4);
 
   eig_val.resize (k);
-  Complex *d = eig_val.fortran_vec ();
+  Complex *d = eig_val.rwdata ();
 
   if (info2 == 0)
     {
@@ -2617,7 +2621,7 @@
     }
 
   Array<F77_INT> ip (dim_vector (11, 1));
-  F77_INT *iparam = ip.fortran_vec ();
+  F77_INT *iparam = ip.rwdata ();
 
   ip(0) = 1; //ishift
   ip(1) = 0;   // ip(1) not referenced
@@ -2633,7 +2637,7 @@
   // ip(7) to ip(10) return values
 
   Array<F77_INT> iptr (dim_vector (14, 1));
-  F77_INT *ipntr = iptr.fortran_vec ();
+  F77_INT *ipntr = iptr.rwdata ();
 
   F77_INT ido = 0;
   int iter = 0;
@@ -2642,7 +2646,7 @@
   OCTAVE_LOCAL_BUFFER (double, v, n * (p + 1));
   OCTAVE_LOCAL_BUFFER (double, workl, lwork + 1);
   OCTAVE_LOCAL_BUFFER (double, workd, 3 * n + 1);
-  double *presid = resid.fortran_vec ();
+  double *presid = resid.rwdata ();
 
   do
     {
@@ -2794,7 +2798,7 @@
   // is just workspace for ARPACK, so use int type to
   // avoid problems.
   Array<F77_INT> s (dim_vector (p, 1));
-  F77_INT *sel = s.fortran_vec ();
+  F77_INT *sel = s.rwdata ();
 
   // FIXME: initialize eig_vec2 to zero; apparently dneupd can skip
   // the assignment to elements of Z that represent imaginary parts.
@@ -2804,7 +2808,7 @@
   //   [vecs, vals, f] = eigs (A, 1)
 
   Matrix eig_vec2 (n, k + 1, 0.0);
-  double *z = eig_vec2.fortran_vec ();
+  double *z = eig_vec2.rwdata ();
 
   OCTAVE_LOCAL_BUFFER (double, dr, k + 1);
   OCTAVE_LOCAL_BUFFER (double, di, k + 1);
@@ -2826,7 +2830,7 @@
     k = ip(4);
 
   eig_val.resize (k);
-  Complex *d = eig_val.fortran_vec ();
+  Complex *d = eig_val.rwdata ();
 
   if (info2 == 0)
     {
@@ -3038,7 +3042,7 @@
     }
 
   Array<F77_INT> ip (dim_vector (11, 1));
-  F77_INT *iparam = ip.fortran_vec ();
+  F77_INT *iparam = ip.rwdata ();
 
   ip(0) = 1; //ishift
   ip(1) = 0;   // ip(1) not referenced
@@ -3054,7 +3058,7 @@
   // ip(7) to ip(10) return values
 
   Array<F77_INT> iptr (dim_vector (14, 1));
-  F77_INT *ipntr = iptr.fortran_vec ();
+  F77_INT *ipntr = iptr.rwdata ();
 
   F77_INT ido = 0;
   int iter = 0;
@@ -3064,7 +3068,7 @@
   OCTAVE_LOCAL_BUFFER (Complex, workl, lwork);
   OCTAVE_LOCAL_BUFFER (Complex, workd, 3 * n);
   OCTAVE_LOCAL_BUFFER (double, rwork, p);
-  Complex *presid = cresid.fortran_vec ();
+  Complex *presid = cresid.rwdata ();
 
   do
     {
@@ -3147,13 +3151,13 @@
   // is just workspace for ARPACK, so use int type to
   // avoid problems.
   Array<F77_INT> s (dim_vector (p, 1));
-  F77_INT *sel = s.fortran_vec ();
+  F77_INT *sel = s.rwdata ();
 
   eig_vec.resize (n, k);
-  Complex *z = eig_vec.fortran_vec ();
+  Complex *z = eig_vec.rwdata ();
 
   eig_val.resize (k+1);
-  Complex *d = eig_val.fortran_vec ();
+  Complex *d = eig_val.rwdata ();
 
   OCTAVE_LOCAL_BUFFER (Complex, workev, 2 * p);
 
@@ -3317,7 +3321,7 @@
     bmat = 'G';
 
   Array<F77_INT> ip (dim_vector (11, 1));
-  F77_INT *iparam = ip.fortran_vec ();
+  F77_INT *iparam = ip.rwdata ();
 
   ip(0) = 1; //ishift
   ip(1) = 0;   // ip(1) not referenced
@@ -3333,7 +3337,7 @@
   // ip(7) to ip(10) return values
 
   Array<F77_INT> iptr (dim_vector (14, 1));
-  F77_INT *ipntr = iptr.fortran_vec ();
+  F77_INT *ipntr = iptr.rwdata ();
 
   F77_INT ido = 0;
   int iter = 0;
@@ -3352,7 +3356,7 @@
   OCTAVE_LOCAL_BUFFER (Complex, workl, lwork);
   OCTAVE_LOCAL_BUFFER (Complex, workd, 3 * n);
   OCTAVE_LOCAL_BUFFER (double, rwork, p);
-  Complex *presid = cresid.fortran_vec ();
+  Complex *presid = cresid.rwdata ();
 
   do
     {
@@ -3473,13 +3477,13 @@
   // is just workspace for ARPACK, so use int type to
   // avoid problems.
   Array<F77_INT> s (dim_vector (p, 1));
-  F77_INT *sel = s.fortran_vec ();
+  F77_INT *sel = s.rwdata ();
 
   eig_vec.resize (n, k);
-  Complex *z = eig_vec.fortran_vec ();
+  Complex *z = eig_vec.rwdata ();
 
   eig_val.resize (k+1);
-  Complex *d = eig_val.fortran_vec ();
+  Complex *d = eig_val.rwdata ();
 
   OCTAVE_LOCAL_BUFFER (Complex, workev, 2 * p);
 
@@ -3688,7 +3692,7 @@
     }
 
   Array<F77_INT> ip (dim_vector (11, 1));
-  F77_INT *iparam = ip.fortran_vec ();
+  F77_INT *iparam = ip.rwdata ();
 
   ip(0) = 1; //ishift
   ip(1) = 0;   // ip(1) not referenced
@@ -3704,7 +3708,7 @@
   // ip(7) to ip(10) return values
 
   Array<F77_INT> iptr (dim_vector (14, 1));
-  F77_INT *ipntr = iptr.fortran_vec ();
+  F77_INT *ipntr = iptr.rwdata ();
 
   F77_INT ido = 0;
   int iter = 0;
@@ -3714,7 +3718,7 @@
   OCTAVE_LOCAL_BUFFER (Complex, workl, lwork);
   OCTAVE_LOCAL_BUFFER (Complex, workd, 3 * n);
   OCTAVE_LOCAL_BUFFER (double, rwork, p);
-  Complex *presid = cresid.fortran_vec ();
+  Complex *presid = cresid.rwdata ();
 
   do
     {
@@ -3863,13 +3867,13 @@
   // is just workspace for ARPACK, so use int type to
   // avoid problems.
   Array<F77_INT> s (dim_vector (p, 1));
-  F77_INT *sel = s.fortran_vec ();
+  F77_INT *sel = s.rwdata ();
 
   eig_vec.resize (n, k);
-  Complex *z = eig_vec.fortran_vec ();
+  Complex *z = eig_vec.rwdata ();
 
   eig_val.resize (k+1);
-  Complex *d = eig_val.fortran_vec ();
+  Complex *d = eig_val.rwdata ();
 
   OCTAVE_LOCAL_BUFFER (Complex, workev, 2 * p);
 
--- a/liboctave/numeric/fEIG.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/fEIG.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -54,21 +54,21 @@
   F77_INT info = 0;
 
   FloatMatrix atmp = a;
-  float *tmp_data = atmp.fortran_vec ();
+  float *tmp_data = atmp.rwdata ();
 
   Array<float> wr (dim_vector (n, 1));
-  float *pwr = wr.fortran_vec ();
+  float *pwr = wr.rwdata ();
 
   Array<float> wi (dim_vector (n, 1));
-  float *pwi = wi.fortran_vec ();
+  float *pwi = wi.rwdata ();
 
-  volatile F77_INT nvr = (calc_rev ? n : 0);
+  F77_INT nvr = (calc_rev ? n : 0);
   FloatMatrix vr (nvr, nvr);
-  float *pvr = vr.fortran_vec ();
+  float *pvr = vr.rwdata ();
 
-  volatile F77_INT nvl = (calc_lev ? n : 0);
+  F77_INT nvl = (calc_lev ? n : 0);
   FloatMatrix vl (nvl, nvl);
-  float *pvl = vl.fortran_vec ();
+  float *pvl = vl.rwdata ();
 
   F77_INT lwork = -1;
   float dummy_work;
@@ -77,15 +77,15 @@
   F77_INT ihi;
 
   Array<float> scale (dim_vector (n, 1));
-  float *pscale = scale.fortran_vec ();
+  float *pscale = scale.rwdata ();
 
   float abnrm;
 
   Array<float> rconde (dim_vector (n, 1));
-  float *prconde = rconde.fortran_vec ();
+  float *prconde = rconde.rwdata ();
 
   Array<float> rcondv (dim_vector (n, 1));
-  float *prcondv = rcondv.fortran_vec ();
+  float *prcondv = rcondv.rwdata ();
 
   F77_INT dummy_iwork;
 
@@ -107,7 +107,7 @@
 
   lwork = static_cast<F77_INT> (dummy_work);
   Array<float> work (dim_vector (lwork, 1));
-  float *pwork = work.fortran_vec ();
+  float *pwork = work.rwdata ();
 
   F77_XFCN (sgeevx, SGEEVX, (F77_CONST_CHAR_ARG2 (balance ? "B" : "N", 1),
                              F77_CONST_CHAR_ARG2 ("N", 1),
@@ -184,10 +184,10 @@
   F77_INT info = 0;
 
   FloatMatrix atmp = a;
-  float *tmp_data = atmp.fortran_vec ();
+  float *tmp_data = atmp.rwdata ();
 
   FloatColumnVector wr (n);
-  float *pwr = wr.fortran_vec ();
+  float *pwr = wr.rwdata ();
 
   F77_INT lwork = -1;
   float dummy_work;
@@ -203,7 +203,7 @@
 
   lwork = static_cast<F77_INT> (dummy_work);
   Array<float> work (dim_vector (lwork, 1));
-  float *pwork = work.fortran_vec ();
+  float *pwork = work.rwdata ();
 
   F77_XFCN (ssyev, SSYEV, (F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
                            F77_CONST_CHAR_ARG2 ("U", 1),
@@ -244,39 +244,39 @@
   F77_INT info = 0;
 
   FloatComplexMatrix atmp = a;
-  FloatComplex *tmp_data = atmp.fortran_vec ();
+  FloatComplex *tmp_data = atmp.rwdata ();
 
   FloatComplexColumnVector wr (n);
-  FloatComplex *pw = wr.fortran_vec ();
+  FloatComplex *pw = wr.rwdata ();
 
   F77_INT nvr = (calc_rev ? n : 0);
   FloatComplexMatrix vrtmp (nvr, nvr);
-  FloatComplex *pvr = vrtmp.fortran_vec ();
+  FloatComplex *pvr = vrtmp.rwdata ();
 
   F77_INT nvl = (calc_lev ? n : 0);
   FloatComplexMatrix vltmp (nvl, nvl);
-  FloatComplex *pvl = vltmp.fortran_vec ();
+  FloatComplex *pvl = vltmp.rwdata ();
 
   F77_INT lwork = -1;
   FloatComplex dummy_work;
 
   F77_INT lrwork = 2*n;
   Array<float> rwork (dim_vector (lrwork, 1));
-  float *prwork = rwork.fortran_vec ();
+  float *prwork = rwork.rwdata ();
 
   F77_INT ilo;
   F77_INT ihi;
 
   Array<float> scale (dim_vector (n, 1));
-  float *pscale = scale.fortran_vec ();
+  float *pscale = scale.rwdata ();
 
   float abnrm;
 
   Array<float> rconde (dim_vector (n, 1));
-  float *prconde = rconde.fortran_vec ();
+  float *prconde = rconde.rwdata ();
 
   Array<float> rcondv (dim_vector (n, 1));
-  float *prcondv = rcondv.fortran_vec ();
+  float *prcondv = rcondv.rwdata ();
 
   F77_XFCN (cgeevx, CGEEVX, (F77_CONST_CHAR_ARG2 (balance ? "B" : "N", 1),
                              F77_CONST_CHAR_ARG2 (calc_lev ? "V" : "N", 1),
@@ -296,7 +296,7 @@
 
   lwork = static_cast<F77_INT> (dummy_work.real ());
   Array<FloatComplex> work (dim_vector (lwork, 1));
-  FloatComplex *pwork = work.fortran_vec ();
+  FloatComplex *pwork = work.rwdata ();
 
   F77_XFCN (cgeevx, CGEEVX, (F77_CONST_CHAR_ARG2 (balance ? "B" : "N", 1),
                              F77_CONST_CHAR_ARG2 (calc_lev ? "V" : "N", 1),
@@ -337,17 +337,17 @@
   F77_INT info = 0;
 
   FloatComplexMatrix atmp = a;
-  FloatComplex *tmp_data = atmp.fortran_vec ();
+  FloatComplex *tmp_data = atmp.rwdata ();
 
   FloatColumnVector wr (n);
-  float *pwr = wr.fortran_vec ();
+  float *pwr = wr.rwdata ();
 
   F77_INT lwork = -1;
   FloatComplex dummy_work;
 
   F77_INT lrwork = 3*n;
   Array<float> rwork (dim_vector (lrwork, 1));
-  float *prwork = rwork.fortran_vec ();
+  float *prwork = rwork.rwdata ();
 
   F77_XFCN (cheev, CHEEV, (F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
                            F77_CONST_CHAR_ARG2 ("U", 1),
@@ -362,7 +362,7 @@
 
   lwork = static_cast<F77_INT> (dummy_work.real ());
   Array<FloatComplex> work (dim_vector (lwork, 1));
-  FloatComplex *pwork = work.fortran_vec ();
+  FloatComplex *pwork = work.rwdata ();
 
   F77_XFCN (cheev, CHEEV, (F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
                            F77_CONST_CHAR_ARG2 ("U", 1),
@@ -407,7 +407,7 @@
   F77_INT info = 0;
 
   FloatMatrix tmp = b;
-  float *tmp_data = tmp.fortran_vec ();
+  float *tmp_data = tmp.rwdata ();
   if (! force_qz)
     {
       F77_XFCN (spotrf, SPOTRF, (F77_CONST_CHAR_ARG2 ("L", 1),
@@ -420,27 +420,27 @@
     }
 
   FloatMatrix atmp = a;
-  float *atmp_data = atmp.fortran_vec ();
+  float *atmp_data = atmp.rwdata ();
 
   FloatMatrix btmp = b;
-  float *btmp_data = btmp.fortran_vec ();
+  float *btmp_data = btmp.rwdata ();
 
   Array<float> ar (dim_vector (n, 1));
-  float *par = ar.fortran_vec ();
+  float *par = ar.rwdata ();
 
   Array<float> ai (dim_vector (n, 1));
-  float *pai = ai.fortran_vec ();
+  float *pai = ai.rwdata ();
 
   Array<float> beta (dim_vector (n, 1));
-  float *pbeta = beta.fortran_vec ();
+  float *pbeta = beta.rwdata ();
 
-  volatile F77_INT nvr = (calc_rev ? n : 0);
+  F77_INT nvr = (calc_rev ? n : 0);
   FloatMatrix vr (nvr, nvr);
-  float *pvr = vr.fortran_vec ();
+  float *pvr = vr.rwdata ();
 
-  volatile F77_INT nvl = (calc_lev ? n : 0);
+  F77_INT nvl = (calc_lev ? n : 0);
   FloatMatrix vl (nvl, nvl);
-  float *pvl = vl.fortran_vec ();
+  float *pvl = vl.rwdata ();
 
   F77_INT lwork = -1;
   float dummy_work;
@@ -459,7 +459,7 @@
 
   lwork = static_cast<F77_INT> (dummy_work);
   Array<float> work (dim_vector (lwork, 1));
-  float *pwork = work.fortran_vec ();
+  float *pwork = work.rwdata ();
 
   F77_XFCN (sggev, SGGEV, (F77_CONST_CHAR_ARG2 (calc_lev ? "V" : "N", 1),
                            F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
@@ -542,13 +542,13 @@
   F77_INT info = 0;
 
   FloatMatrix atmp = a;
-  float *atmp_data = atmp.fortran_vec ();
+  float *atmp_data = atmp.rwdata ();
 
   FloatMatrix btmp = b;
-  float *btmp_data = btmp.fortran_vec ();
+  float *btmp_data = btmp.rwdata ();
 
   FloatColumnVector wr (n);
-  float *pwr = wr.fortran_vec ();
+  float *pwr = wr.rwdata ();
 
   F77_INT lwork = -1;
   float dummy_work;
@@ -566,7 +566,7 @@
 
   lwork = static_cast<F77_INT> (dummy_work);
   Array<float> work (dim_vector (lwork, 1));
-  float *pwork = work.fortran_vec ();
+  float *pwork = work.rwdata ();
 
   F77_XFCN (ssygv, SSYGV, (1, F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
                            F77_CONST_CHAR_ARG2 ("U", 1),
@@ -612,7 +612,7 @@
   F77_INT info = 0;
 
   FloatComplexMatrix tmp = b;
-  FloatComplex *tmp_data = tmp.fortran_vec ();
+  FloatComplex *tmp_data = tmp.rwdata ();
 
   if (! force_qz)
     {
@@ -626,31 +626,31 @@
     }
 
   FloatComplexMatrix atmp = a;
-  FloatComplex *atmp_data = atmp.fortran_vec ();
+  FloatComplex *atmp_data = atmp.rwdata ();
 
   FloatComplexMatrix btmp = b;
-  FloatComplex *btmp_data = btmp.fortran_vec ();
+  FloatComplex *btmp_data = btmp.rwdata ();
 
   FloatComplexColumnVector alpha (n);
-  FloatComplex *palpha = alpha.fortran_vec ();
+  FloatComplex *palpha = alpha.rwdata ();
 
   FloatComplexColumnVector beta (n);
-  FloatComplex *pbeta = beta.fortran_vec ();
+  FloatComplex *pbeta = beta.rwdata ();
 
   F77_INT nvr = (calc_rev ? n : 0);
   FloatComplexMatrix vrtmp (nvr, nvr);
-  FloatComplex *pvr = vrtmp.fortran_vec ();
+  FloatComplex *pvr = vrtmp.rwdata ();
 
   F77_INT nvl = (calc_lev ? n : 0);
   FloatComplexMatrix vltmp (nvl, nvl);
-  FloatComplex *pvl = vltmp.fortran_vec ();
+  FloatComplex *pvl = vltmp.rwdata ();
 
   F77_INT lwork = -1;
   FloatComplex dummy_work;
 
   F77_INT lrwork = 8*n;
   Array<float> rwork (dim_vector (lrwork, 1));
-  float *prwork = rwork.fortran_vec ();
+  float *prwork = rwork.rwdata ();
 
   F77_XFCN (cggev, CGGEV, (F77_CONST_CHAR_ARG2 (calc_lev ? "V" : "N", 1),
                            F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
@@ -667,7 +667,7 @@
 
   lwork = static_cast<F77_INT> (dummy_work.real ());
   Array<FloatComplex> work (dim_vector (lwork, 1));
-  FloatComplex *pwork = work.fortran_vec ();
+  FloatComplex *pwork = work.rwdata ();
 
   F77_XFCN (cggev, CGGEV, (F77_CONST_CHAR_ARG2 (calc_lev ? "V" : "N", 1),
                            F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
@@ -716,20 +716,20 @@
   F77_INT info = 0;
 
   FloatComplexMatrix atmp = a;
-  FloatComplex *atmp_data = atmp.fortran_vec ();
+  FloatComplex *atmp_data = atmp.rwdata ();
 
   FloatComplexMatrix btmp = b;
-  FloatComplex *btmp_data = btmp.fortran_vec ();
+  FloatComplex *btmp_data = btmp.rwdata ();
 
   FloatColumnVector wr (n);
-  float *pwr = wr.fortran_vec ();
+  float *pwr = wr.rwdata ();
 
   F77_INT lwork = -1;
   FloatComplex dummy_work;
 
   F77_INT lrwork = 3*n;
   Array<float> rwork (dim_vector (lrwork, 1));
-  float *prwork = rwork.fortran_vec ();
+  float *prwork = rwork.rwdata ();
 
   F77_XFCN (chegv, CHEGV, (1, F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
                            F77_CONST_CHAR_ARG2 ("U", 1),
@@ -745,7 +745,7 @@
 
   lwork = static_cast<F77_INT> (dummy_work.real ());
   Array<FloatComplex> work (dim_vector (lwork, 1));
-  FloatComplex *pwork = work.fortran_vec ();
+  FloatComplex *pwork = work.rwdata ();
 
   F77_XFCN (chegv, CHEGV, (1, F77_CONST_CHAR_ARG2 (calc_rev ? "V" : "N", 1),
                            F77_CONST_CHAR_ARG2 ("U", 1),
--- a/liboctave/numeric/fEIG.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/fEIG.h	Mon Feb 26 23:30:33 2024 -0500
@@ -35,9 +35,7 @@
 #include "fCColVector.h"
 #include "fCMatrix.h"
 
-class
-OCTAVE_API
-FloatEIG
+class OCTAVE_API FloatEIG
 {
   friend class FloatMatrix;
   friend class FloatComplexMatrix;
--- a/liboctave/numeric/gepbalance.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/gepbalance.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -65,9 +65,9 @@
   OCTAVE_LOCAL_BUFFER (double, pwork, 6 * n);
 
   m_balanced_mat = a;
-  double *p_balanced_mat = m_balanced_mat.fortran_vec ();
+  double *p_balanced_mat = m_balanced_mat.rwdata ();
   m_balanced_mat2 = b;
-  double *p_balanced_mat2 = m_balanced_mat2.fortran_vec ();
+  double *p_balanced_mat2 = m_balanced_mat2.rwdata ();
 
   char job = balance_job[0];
 
@@ -85,8 +85,8 @@
       m_balancing_mat2.elem (i, i) = 1.0;
     }
 
-  double *p_balancing_mat = m_balancing_mat.fortran_vec ();
-  double *p_balancing_mat2 = m_balancing_mat2.fortran_vec ();
+  double *p_balancing_mat = m_balancing_mat.rwdata ();
+  double *p_balancing_mat2 = m_balancing_mat2.rwdata ();
 
   // first left
   F77_XFCN (dggbak, DGGBAK, (F77_CONST_CHAR_ARG2 (&job, 1),
@@ -131,9 +131,9 @@
   OCTAVE_LOCAL_BUFFER (float, pwork, 6 * n);
 
   m_balanced_mat = a;
-  float *p_balanced_mat = m_balanced_mat.fortran_vec ();
+  float *p_balanced_mat = m_balanced_mat.rwdata ();
   m_balanced_mat2 = b;
-  float *p_balanced_mat2 = m_balanced_mat2.fortran_vec ();
+  float *p_balanced_mat2 = m_balanced_mat2.rwdata ();
 
   char job = balance_job[0];
 
@@ -151,8 +151,8 @@
       m_balancing_mat2.elem (i, i) = 1.0;
     }
 
-  float *p_balancing_mat = m_balancing_mat.fortran_vec ();
-  float *p_balancing_mat2 = m_balancing_mat2.fortran_vec ();
+  float *p_balancing_mat = m_balancing_mat.rwdata ();
+  float *p_balancing_mat2 = m_balancing_mat2.rwdata ();
 
   // first left
   F77_XFCN (sggbak, SGGBAK, (F77_CONST_CHAR_ARG2 (&job, 1),
@@ -198,9 +198,9 @@
   OCTAVE_LOCAL_BUFFER (double, pwork, 6 * n);
 
   m_balanced_mat = a;
-  Complex *p_balanced_mat = m_balanced_mat.fortran_vec ();
+  Complex *p_balanced_mat = m_balanced_mat.rwdata ();
   m_balanced_mat2 = b;
-  Complex *p_balanced_mat2 = m_balanced_mat2.fortran_vec ();
+  Complex *p_balanced_mat2 = m_balanced_mat2.rwdata ();
 
   char job = balance_job[0];
 
@@ -219,8 +219,8 @@
       m_balancing_mat2.elem (i, i) = 1.0;
     }
 
-  double *p_balancing_mat = m_balancing_mat.fortran_vec ();
-  double *p_balancing_mat2 = m_balancing_mat2.fortran_vec ();
+  double *p_balancing_mat = m_balancing_mat.rwdata ();
+  double *p_balancing_mat2 = m_balancing_mat2.rwdata ();
 
   // first left
   F77_XFCN (dggbak, DGGBAK, (F77_CONST_CHAR_ARG2 (&job, 1),
@@ -269,9 +269,9 @@
   OCTAVE_LOCAL_BUFFER (float, pwork, 6 * n);
 
   m_balanced_mat = a;
-  FloatComplex *p_balanced_mat = m_balanced_mat.fortran_vec ();
+  FloatComplex *p_balanced_mat = m_balanced_mat.rwdata ();
   m_balanced_mat2 = b;
-  FloatComplex *p_balanced_mat2 = m_balanced_mat2.fortran_vec ();
+  FloatComplex *p_balanced_mat2 = m_balanced_mat2.rwdata ();
 
   char job = balance_job[0];
 
@@ -290,8 +290,8 @@
       m_balancing_mat2.elem (i, i) = 1.0;
     }
 
-  float *p_balancing_mat = m_balancing_mat.fortran_vec ();
-  float *p_balancing_mat2 = m_balancing_mat2.fortran_vec ();
+  float *p_balancing_mat = m_balancing_mat.rwdata ();
+  float *p_balancing_mat2 = m_balancing_mat2.rwdata ();
 
   // first left
   F77_XFCN (sggbak, SGGBAK, (F77_CONST_CHAR_ARG2 (&job, 1),
--- a/liboctave/numeric/gepbalance.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/gepbalance.h	Mon Feb 26 23:30:33 2024 -0500
@@ -35,8 +35,7 @@
 OCTAVE_BEGIN_NAMESPACE(math)
 
 template <typename T>
-class
-gepbalance
+class gepbalance
 {
 public:
 
--- a/liboctave/numeric/gsvd.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/gsvd.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -253,7 +253,7 @@
              F77_CONST_CHAR_ARG2 (&jobv, 1),
              F77_CONST_CHAR_ARG2 (&jobq, 1),
              m, n, p, k, l, tmp_dataA, m1, tmp_dataB, p1,
-             alpha.fortran_vec (), beta.fortran_vec (),
+             alpha.rwdata (), beta.rwdata (),
              u, nrow_u, v, nrow_v, q, nrow_q,
              work, lwork, iwork, info
              F77_CHAR_ARG_LEN (1)
@@ -267,7 +267,7 @@
              F77_CONST_CHAR_ARG2 (&jobv, 1),
              F77_CONST_CHAR_ARG2 (&jobq, 1),
              m, n, p, k, l, tmp_dataA, m1, tmp_dataB, p1,
-             alpha.fortran_vec (), beta.fortran_vec (),
+             alpha.rwdata (), beta.rwdata (),
              u, nrow_u, v, nrow_v, q, nrow_q,
              work, iwork, info
              F77_CHAR_ARG_LEN (1)
@@ -297,7 +297,7 @@
              F77_CONST_CHAR_ARG2 (&jobv, 1),
              F77_CONST_CHAR_ARG2 (&jobq, 1),
              m, n, p, k, l, tmp_dataA, m1, tmp_dataB, p1,
-             alpha.fortran_vec (), beta.fortran_vec (),
+             alpha.rwdata (), beta.rwdata (),
              u, nrow_u, v, nrow_v, q, nrow_q,
              work, lwork, iwork, info
              F77_CHAR_ARG_LEN (1)
@@ -311,7 +311,7 @@
              F77_CONST_CHAR_ARG2 (&jobv, 1),
              F77_CONST_CHAR_ARG2 (&jobq, 1),
              m, n, p, k, l, tmp_dataA, m1, tmp_dataB, p1,
-             alpha.fortran_vec (), beta.fortran_vec (),
+             alpha.rwdata (), beta.rwdata (),
              u, nrow_u, v, nrow_v, q, nrow_q,
              work, iwork, info
              F77_CHAR_ARG_LEN (1)
@@ -345,7 +345,7 @@
              m, n, p, k, l,
              F77_DBLE_CMPLX_ARG (tmp_dataA), m1,
              F77_DBLE_CMPLX_ARG (tmp_dataB), p1,
-             alpha.fortran_vec (), beta.fortran_vec (),
+             alpha.rwdata (), beta.rwdata (),
              F77_DBLE_CMPLX_ARG (u), nrow_u,
              F77_DBLE_CMPLX_ARG (v), nrow_v,
              F77_DBLE_CMPLX_ARG (q), nrow_q,
@@ -364,7 +364,7 @@
              m, n, p, k, l,
              F77_DBLE_CMPLX_ARG (tmp_dataA), m1,
              F77_DBLE_CMPLX_ARG (tmp_dataB), p1,
-             alpha.fortran_vec (), beta.fortran_vec (),
+             alpha.rwdata (), beta.rwdata (),
              F77_DBLE_CMPLX_ARG (u), nrow_u,
              F77_DBLE_CMPLX_ARG (v), nrow_v,
              F77_DBLE_CMPLX_ARG (q), nrow_q,
@@ -404,7 +404,7 @@
              m, n, p, k, l,
              F77_CMPLX_ARG (tmp_dataA), m1,
              F77_CMPLX_ARG (tmp_dataB), p1,
-             alpha.fortran_vec (), beta.fortran_vec (),
+             alpha.rwdata (), beta.rwdata (),
              F77_CMPLX_ARG (u), nrow_u,
              F77_CMPLX_ARG (v), nrow_v,
              F77_CMPLX_ARG (q), nrow_q,
@@ -423,7 +423,7 @@
              m, n, p, k, l,
              F77_CMPLX_ARG (tmp_dataA), m1,
              F77_CMPLX_ARG (tmp_dataB), p1,
-             alpha.fortran_vec (), beta.fortran_vec (),
+             alpha.rwdata (), beta.rwdata (),
              F77_CMPLX_ARG (u), nrow_u,
              F77_CMPLX_ARG (v), nrow_v,
              F77_CMPLX_ARG (q), nrow_q,
@@ -482,10 +482,10 @@
   F77_INT p = to_f77_int (b.rows ());
 
   T atmp = a;
-  P *tmp_dataA = atmp.fortran_vec ();
+  P *tmp_dataA = atmp.rwdata ();
 
   T btmp = b;
-  P *tmp_dataB = btmp.fortran_vec ();
+  P *tmp_dataB = btmp.rwdata ();
 
   char jobu = 'U';
   char jobv = 'V';
@@ -523,17 +523,17 @@
   if (jobu != 'N')
     m_left_smA.resize (nrow_u, m);
 
-  P *u = m_left_smA.fortran_vec ();
+  P *u = m_left_smA.rwdata ();
 
   if (jobv != 'N')
     m_left_smB.resize (nrow_v, p);
 
-  P *v = m_left_smB.fortran_vec ();
+  P *v = m_left_smB.rwdata ();
 
   if (jobq != 'N')
     m_right_sm.resize (nrow_q, n);
 
-  P *q = m_right_sm.fortran_vec ();
+  P *q = m_right_sm.rwdata ();
 
   real_matrix alpha (n, 1);
   real_matrix beta (n, 1);
--- a/liboctave/numeric/gsvd.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/gsvd.h	Mon Feb 26 23:30:33 2024 -0500
@@ -33,9 +33,7 @@
 OCTAVE_BEGIN_NAMESPACE(math)
 
 template <typename T>
-class
-OCTAVE_API
-gsvd
+class OCTAVE_API gsvd
 {
 public:
 
--- a/liboctave/numeric/hess.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/hess.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -60,26 +60,26 @@
   F77_INT ihi;
 
   m_hess_mat = a;
-  double *h = m_hess_mat.fortran_vec ();
+  double *h = m_hess_mat.rwdata ();
 
   Array<double> scale (dim_vector (n, 1));
-  double *pscale = scale.fortran_vec ();
+  double *pscale = scale.rwdata ();
 
   F77_XFCN (dgebal, DGEBAL, (F77_CONST_CHAR_ARG2 (&job, 1),
                              n, h, n, ilo, ihi, pscale, info
                              F77_CHAR_ARG_LEN (1)));
 
   Array<double> tau (dim_vector (n-1, 1));
-  double *ptau = tau.fortran_vec ();
+  double *ptau = tau.rwdata ();
 
   Array<double> work (dim_vector (lwork, 1));
-  double *pwork = work.fortran_vec ();
+  double *pwork = work.rwdata ();
 
   F77_XFCN (dgehrd, DGEHRD, (n, ilo, ihi, h, n, ptau, pwork,
                              lwork, info));
 
   m_unitary_hess_mat = m_hess_mat;
-  double *z = m_unitary_hess_mat.fortran_vec ();
+  double *z = m_unitary_hess_mat.rwdata ();
 
   F77_XFCN (dorghr, DORGHR, (n, ilo, ihi, z, n, ptau, pwork,
                              lwork, info));
@@ -123,26 +123,26 @@
   F77_INT ihi;
 
   m_hess_mat = a;
-  float *h = m_hess_mat.fortran_vec ();
+  float *h = m_hess_mat.rwdata ();
 
   Array<float> scale (dim_vector (n, 1));
-  float *pscale = scale.fortran_vec ();
+  float *pscale = scale.rwdata ();
 
   F77_XFCN (sgebal, SGEBAL, (F77_CONST_CHAR_ARG2 (&job, 1),
                              n, h, n, ilo, ihi, pscale, info
                              F77_CHAR_ARG_LEN (1)));
 
   Array<float> tau (dim_vector (n-1, 1));
-  float *ptau = tau.fortran_vec ();
+  float *ptau = tau.rwdata ();
 
   Array<float> work (dim_vector (lwork, 1));
-  float *pwork = work.fortran_vec ();
+  float *pwork = work.rwdata ();
 
   F77_XFCN (sgehrd, SGEHRD, (n, ilo, ihi, h, n, ptau, pwork,
                              lwork, info));
 
   m_unitary_hess_mat = m_hess_mat;
-  float *z = m_unitary_hess_mat.fortran_vec ();
+  float *z = m_unitary_hess_mat.rwdata ();
 
   F77_XFCN (sorghr, SORGHR, (n, ilo, ihi, z, n, ptau, pwork,
                              lwork, info));
@@ -186,26 +186,26 @@
   F77_INT ihi;
 
   m_hess_mat = a;
-  Complex *h = m_hess_mat.fortran_vec ();
+  Complex *h = m_hess_mat.rwdata ();
 
   Array<double> scale (dim_vector (n, 1));
-  double *pscale = scale.fortran_vec ();
+  double *pscale = scale.rwdata ();
 
   F77_XFCN (zgebal, ZGEBAL, (F77_CONST_CHAR_ARG2 (&job, 1),
                              n, F77_DBLE_CMPLX_ARG (h), n, ilo, ihi, pscale, info
                              F77_CHAR_ARG_LEN (1)));
 
   Array<Complex> tau (dim_vector (n-1, 1));
-  Complex *ptau = tau.fortran_vec ();
+  Complex *ptau = tau.rwdata ();
 
   Array<Complex> work (dim_vector (lwork, 1));
-  Complex *pwork = work.fortran_vec ();
+  Complex *pwork = work.rwdata ();
 
   F77_XFCN (zgehrd, ZGEHRD, (n, ilo, ihi, F77_DBLE_CMPLX_ARG (h), n,
                              F77_DBLE_CMPLX_ARG (ptau), F77_DBLE_CMPLX_ARG (pwork), lwork, info));
 
   m_unitary_hess_mat = m_hess_mat;
-  Complex *z = m_unitary_hess_mat.fortran_vec ();
+  Complex *z = m_unitary_hess_mat.rwdata ();
 
   F77_XFCN (zunghr, ZUNGHR, (n, ilo, ihi, F77_DBLE_CMPLX_ARG (z), n,
                              F77_DBLE_CMPLX_ARG (ptau), F77_DBLE_CMPLX_ARG (pwork),
@@ -252,26 +252,26 @@
   F77_INT ihi;
 
   m_hess_mat = a;
-  FloatComplex *h = m_hess_mat.fortran_vec ();
+  FloatComplex *h = m_hess_mat.rwdata ();
 
   Array<float> scale (dim_vector (n, 1));
-  float *pscale = scale.fortran_vec ();
+  float *pscale = scale.rwdata ();
 
   F77_XFCN (cgebal, CGEBAL, (F77_CONST_CHAR_ARG2 (&job, 1),
                              n, F77_CMPLX_ARG (h), n, ilo, ihi, pscale, info
                              F77_CHAR_ARG_LEN (1)));
 
   Array<FloatComplex> tau (dim_vector (n-1, 1));
-  FloatComplex *ptau = tau.fortran_vec ();
+  FloatComplex *ptau = tau.rwdata ();
 
   Array<FloatComplex> work (dim_vector (lwork, 1));
-  FloatComplex *pwork = work.fortran_vec ();
+  FloatComplex *pwork = work.rwdata ();
 
   F77_XFCN (cgehrd, CGEHRD, (n, ilo, ihi, F77_CMPLX_ARG (h), n,
                              F77_CMPLX_ARG (ptau), F77_CMPLX_ARG (pwork), lwork, info));
 
   m_unitary_hess_mat = m_hess_mat;
-  FloatComplex *z = m_unitary_hess_mat.fortran_vec ();
+  FloatComplex *z = m_unitary_hess_mat.rwdata ();
 
   F77_XFCN (cunghr, CUNGHR, (n, ilo, ihi, F77_CMPLX_ARG (z), n,
                              F77_CMPLX_ARG (ptau), F77_CMPLX_ARG (pwork),
--- a/liboctave/numeric/hess.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/hess.h	Mon Feb 26 23:30:33 2024 -0500
@@ -35,8 +35,7 @@
 OCTAVE_BEGIN_NAMESPACE(math)
 
 template <typename T>
-class
-hess
+class hess
 {
 public:
 
--- a/liboctave/numeric/lo-mappers.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/lo-mappers.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -178,38 +178,38 @@
 }
 
 bool
-negative_sign (double x) { return __lo_ieee_signbit (x); }
+negative_sign (double x) { return signbit (x); }
 bool
-negative_sign (float x) { return __lo_ieee_float_signbit (x); }
+negative_sign (float x) { return signbit (x); }
 
 // Sometimes you need a large integer, but not always.
 
 octave_idx_type
 nint_big (double x)
 {
-  static const double out_of_range_top
-    = static_cast<double> (std::numeric_limits<octave_idx_type>::max ())+1.;
+  static constexpr double out_of_range_top
+    = static_cast<double> (std::numeric_limits<octave_idx_type>::max ()) + 1.0;
+
   if (x >= out_of_range_top)
     return std::numeric_limits<octave_idx_type>::max ();
   else if (x < std::numeric_limits<octave_idx_type>::min ())
     return std::numeric_limits<octave_idx_type>::min ();
   else
-    return static_cast<octave_idx_type> ((x > 0.0) ? (x + 0.5)
-                                         : (x - 0.5));
+    return static_cast<octave_idx_type> ((x > 0.0) ? (x + 0.5) : (x - 0.5));
 }
 
 octave_idx_type
 nint_big (float x)
 {
-  static const float out_of_range_top
-    = static_cast<float> (std::numeric_limits<octave_idx_type>::max ())+1.;
+  static constexpr float out_of_range_top
+    = static_cast<float> (std::numeric_limits<octave_idx_type>::max ()) + 1.0;
+
   if (x >= out_of_range_top)
     return std::numeric_limits<octave_idx_type>::max ();
   else if (x < std::numeric_limits<octave_idx_type>::min ())
     return std::numeric_limits<octave_idx_type>::min ();
   else
-    return static_cast<octave_idx_type> ((x > 0.0f) ? (x + 0.5f)
-                                         : (x - 0.5f));
+    return static_cast<octave_idx_type> ((x > 0.0f) ? (x + 0.5f) : (x - 0.5f));
 }
 
 int
@@ -226,8 +226,9 @@
 int
 nint (float x)
 {
-  static const float out_of_range_top
-    = static_cast<float> (std::numeric_limits<int>::max ()) + 1.;
+  static constexpr float out_of_range_top
+    = static_cast<float> (std::numeric_limits<int>::max ()) + 1.0;
+
   if (x >= out_of_range_top)
     return std::numeric_limits<int>::max ();
   else if (x < std::numeric_limits<int>::min ())
--- a/liboctave/numeric/lo-mappers.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/lo-mappers.h	Mon Feb 26 23:30:33 2024 -0500
@@ -310,7 +310,7 @@
           T n = std::floor (q);
 
           // Prevent use of extra precision.
-          volatile T tmp = y * n;
+          T tmp = y * n;
 
           retval = x - tmp;
         }
@@ -343,7 +343,7 @@
           T n = std::trunc (q);
 
           // Prevent use of extra precision.
-          volatile T tmp = y * n;
+          T tmp = y * n;
 
           retval = x - tmp;
         }
--- a/liboctave/numeric/lo-specfun.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/lo-specfun.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -170,7 +170,7 @@
 airy (const ComplexNDArray& z, bool deriv, bool scaled,
       Array<octave_idx_type>& ierr)
 {
-  dim_vector dv = z.dims ();
+  const dim_vector& dv = z.dims ();
   octave_idx_type nel = dv.numel ();
   ComplexNDArray retval (dv);
 
@@ -228,7 +228,7 @@
 airy (const FloatComplexNDArray& z, bool deriv, bool scaled,
       Array<octave_idx_type>& ierr)
 {
-  dim_vector dv = z.dims ();
+  const dim_vector& dv = z.dims ();
   octave_idx_type nel = dv.numel ();
   FloatComplexNDArray retval (dv);
 
@@ -643,7 +643,7 @@
 do_bessel (dptr f, const char *, double alpha, const ComplexNDArray& x,
            bool scaled, Array<octave_idx_type>& ierr)
 {
-  dim_vector dv = x.dims ();
+  const dim_vector& dv = x.dims ();
   octave_idx_type nel = dv.numel ();
   ComplexNDArray retval (dv);
 
@@ -659,7 +659,7 @@
 do_bessel (dptr f, const char *, const NDArray& alpha, const Complex& x,
            bool scaled, Array<octave_idx_type>& ierr)
 {
-  dim_vector dv = alpha.dims ();
+  const dim_vector& dv = alpha.dims ();
   octave_idx_type nel = dv.numel ();
   ComplexNDArray retval (dv);
 
@@ -675,7 +675,7 @@
 do_bessel (dptr f, const char *fn, const NDArray& alpha,
            const ComplexNDArray& x, bool scaled, Array<octave_idx_type>& ierr)
 {
-  dim_vector dv = x.dims ();
+  const dim_vector& dv = x.dims ();
   ComplexNDArray retval;
 
   if (dv != alpha.dims ())
@@ -1185,7 +1185,7 @@
 do_bessel (fptr f, const char *, float alpha, const FloatComplexNDArray& x,
            bool scaled, Array<octave_idx_type>& ierr)
 {
-  dim_vector dv = x.dims ();
+  const dim_vector& dv = x.dims ();
   octave_idx_type nel = dv.numel ();
   FloatComplexNDArray retval (dv);
 
@@ -1201,7 +1201,7 @@
 do_bessel (fptr f, const char *, const FloatNDArray& alpha,
            const FloatComplex& x, bool scaled, Array<octave_idx_type>& ierr)
 {
-  dim_vector dv = alpha.dims ();
+  const dim_vector& dv = alpha.dims ();
   octave_idx_type nel = dv.numel ();
   FloatComplexNDArray retval (dv);
 
@@ -1218,7 +1218,7 @@
            const FloatComplexNDArray& x, bool scaled,
            Array<octave_idx_type>& ierr)
 {
-  dim_vector dv = x.dims ();
+  const dim_vector& dv = x.dims ();
   FloatComplexNDArray retval;
 
   if (dv != alpha.dims ())
@@ -1392,7 +1392,7 @@
 biry (const ComplexNDArray& z, bool deriv, bool scaled,
       Array<octave_idx_type>& ierr)
 {
-  dim_vector dv = z.dims ();
+  const dim_vector& dv = z.dims ();
   octave_idx_type nel = dv.numel ();
   ComplexNDArray retval (dv);
 
@@ -1450,7 +1450,7 @@
 biry (const FloatComplexNDArray& z, bool deriv, bool scaled,
       Array<octave_idx_type>& ierr)
 {
-  dim_vector dv = z.dims ();
+  const dim_vector& dv = z.dims ();
   octave_idx_type nel = dv.numel ();
   FloatComplexNDArray retval (dv);
 
--- a/liboctave/numeric/lu.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/lu.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -278,10 +278,10 @@
   F77_INT mn = (a_nr < a_nc ? a_nr : a_nc);
 
   m_ipvt.resize (dim_vector (mn, 1));
-  F77_INT *pipvt = m_ipvt.fortran_vec ();
+  F77_INT *pipvt = m_ipvt.rwdata ();
 
   m_a_fact = a;
-  double *tmp_data = m_a_fact.fortran_vec ();
+  double *tmp_data = m_a_fact.rwdata ();
 
   F77_INT info = 0;
 
@@ -315,8 +315,8 @@
 
   ColumnVector utmp = u;
   ColumnVector vtmp = v;
-  F77_XFCN (dlu1up, DLU1UP, (m, n, l.fortran_vec (), m, r.fortran_vec (),
-                             k, utmp.fortran_vec (), vtmp.fortran_vec ()));
+  F77_XFCN (dlu1up, DLU1UP, (m, n, l.rwdata (), m, r.rwdata (),
+                             k, utmp.rwdata (), vtmp.rwdata ()));
 }
 
 template <>
@@ -342,13 +342,13 @@
   if (u_nr != m || v_nr != n || u_nc != v_nc)
     (*current_liboctave_error_handler) ("luupdate: dimensions mismatch");
 
-  for (volatile F77_INT i = 0; i < u_nc; i++)
+  for (F77_INT i = 0; i < u_nc; i++)
     {
       ColumnVector utmp = u.column (i);
       ColumnVector vtmp = v.column (i);
-      F77_XFCN (dlu1up, DLU1UP, (m, n, l.fortran_vec (),
-                                 m, r.fortran_vec (), k,
-                                 utmp.fortran_vec (), vtmp.fortran_vec ()));
+      F77_XFCN (dlu1up, DLU1UP, (m, n, l.rwdata (),
+                                 m, r.rwdata (), k,
+                                 utmp.rwdata (), vtmp.rwdata ()));
     }
 }
 
@@ -376,9 +376,9 @@
   ColumnVector vtmp = v;
   OCTAVE_LOCAL_BUFFER (double, w, m);
   for (F77_INT i = 0; i < m; i++) m_ipvt(i) += 1; // increment
-  F77_XFCN (dlup1up, DLUP1UP, (m, n, l.fortran_vec (),
-                               m, r.fortran_vec (), k,
-                               m_ipvt.fortran_vec (),
+  F77_XFCN (dlup1up, DLUP1UP, (m, n, l.rwdata (),
+                               m, r.rwdata (), k,
+                               m_ipvt.rwdata (),
                                utmp.data (), vtmp.data (), w));
   for (F77_INT i = 0; i < m; i++) m_ipvt(i) -= 1; // decrement
 }
@@ -408,13 +408,13 @@
 
   OCTAVE_LOCAL_BUFFER (double, w, m);
   for (F77_INT i = 0; i < m; i++) m_ipvt(i) += 1; // increment
-  for (volatile F77_INT i = 0; i < u_nc; i++)
+  for (F77_INT i = 0; i < u_nc; i++)
     {
       ColumnVector utmp = u.column (i);
       ColumnVector vtmp = v.column (i);
-      F77_XFCN (dlup1up, DLUP1UP, (m, n, l.fortran_vec (),
-                                   m, r.fortran_vec (), k,
-                                   m_ipvt.fortran_vec (),
+      F77_XFCN (dlup1up, DLUP1UP, (m, n, l.rwdata (),
+                                   m, r.rwdata (), k,
+                                   m_ipvt.rwdata (),
                                    utmp.data (), vtmp.data (), w));
     }
   for (F77_INT i = 0; i < m; i++) m_ipvt(i) -= 1; // decrement
@@ -431,10 +431,10 @@
   F77_INT mn = (a_nr < a_nc ? a_nr : a_nc);
 
   m_ipvt.resize (dim_vector (mn, 1));
-  F77_INT *pipvt = m_ipvt.fortran_vec ();
+  F77_INT *pipvt = m_ipvt.rwdata ();
 
   m_a_fact = a;
-  float *tmp_data = m_a_fact.fortran_vec ();
+  float *tmp_data = m_a_fact.rwdata ();
 
   F77_INT info = 0;
 
@@ -469,9 +469,9 @@
 
   FloatColumnVector utmp = u;
   FloatColumnVector vtmp = v;
-  F77_XFCN (slu1up, SLU1UP, (m, n, l.fortran_vec (),
-                             m, r.fortran_vec (), k,
-                             utmp.fortran_vec (), vtmp.fortran_vec ()));
+  F77_XFCN (slu1up, SLU1UP, (m, n, l.rwdata (),
+                             m, r.rwdata (), k,
+                             utmp.rwdata (), vtmp.rwdata ()));
 }
 
 template <>
@@ -497,13 +497,13 @@
   if (u_nr != m || v_nr != n || u_nc != v_nc)
     (*current_liboctave_error_handler) ("luupdate: dimensions mismatch");
 
-  for (volatile F77_INT i = 0; i < u_nc; i++)
+  for (F77_INT i = 0; i < u_nc; i++)
     {
       FloatColumnVector utmp = u.column (i);
       FloatColumnVector vtmp = v.column (i);
-      F77_XFCN (slu1up, SLU1UP, (m, n, l.fortran_vec (),
-                                 m, r.fortran_vec (), k,
-                                 utmp.fortran_vec (), vtmp.fortran_vec ()));
+      F77_XFCN (slu1up, SLU1UP, (m, n, l.rwdata (),
+                                 m, r.rwdata (), k,
+                                 utmp.rwdata (), vtmp.rwdata ()));
     }
 }
 
@@ -532,9 +532,9 @@
   FloatColumnVector vtmp = v;
   OCTAVE_LOCAL_BUFFER (float, w, m);
   for (F77_INT i = 0; i < m; i++) m_ipvt(i) += 1; // increment
-  F77_XFCN (slup1up, SLUP1UP, (m, n, l.fortran_vec (),
-                               m, r.fortran_vec (), k,
-                               m_ipvt.fortran_vec (),
+  F77_XFCN (slup1up, SLUP1UP, (m, n, l.rwdata (),
+                               m, r.rwdata (), k,
+                               m_ipvt.rwdata (),
                                utmp.data (), vtmp.data (), w));
   for (F77_INT i = 0; i < m; i++) m_ipvt(i) -= 1; // decrement
 }
@@ -564,13 +564,13 @@
 
   OCTAVE_LOCAL_BUFFER (float, w, m);
   for (F77_INT i = 0; i < m; i++) m_ipvt(i) += 1; // increment
-  for (volatile F77_INT i = 0; i < u_nc; i++)
+  for (F77_INT i = 0; i < u_nc; i++)
     {
       FloatColumnVector utmp = u.column (i);
       FloatColumnVector vtmp = v.column (i);
-      F77_XFCN (slup1up, SLUP1UP, (m, n, l.fortran_vec (),
-                                   m, r.fortran_vec (), k,
-                                   m_ipvt.fortran_vec (),
+      F77_XFCN (slup1up, SLUP1UP, (m, n, l.rwdata (),
+                                   m, r.rwdata (), k,
+                                   m_ipvt.rwdata (),
                                    utmp.data (), vtmp.data (), w));
     }
   for (F77_INT i = 0; i < m; i++) m_ipvt(i) -= 1; // decrement
@@ -587,10 +587,10 @@
   F77_INT mn = (a_nr < a_nc ? a_nr : a_nc);
 
   m_ipvt.resize (dim_vector (mn, 1));
-  F77_INT *pipvt = m_ipvt.fortran_vec ();
+  F77_INT *pipvt = m_ipvt.rwdata ();
 
   m_a_fact = a;
-  Complex *tmp_data = m_a_fact.fortran_vec ();
+  Complex *tmp_data = m_a_fact.rwdata ();
 
   F77_INT info = 0;
 
@@ -626,10 +626,10 @@
 
   ComplexColumnVector utmp = u;
   ComplexColumnVector vtmp = v;
-  F77_XFCN (zlu1up, ZLU1UP, (m, n, F77_DBLE_CMPLX_ARG (l.fortran_vec ()), m,
-                             F77_DBLE_CMPLX_ARG (r.fortran_vec ()), k,
-                             F77_DBLE_CMPLX_ARG (utmp.fortran_vec ()),
-                             F77_DBLE_CMPLX_ARG (vtmp.fortran_vec ())));
+  F77_XFCN (zlu1up, ZLU1UP, (m, n, F77_DBLE_CMPLX_ARG (l.rwdata ()), m,
+                             F77_DBLE_CMPLX_ARG (r.rwdata ()), k,
+                             F77_DBLE_CMPLX_ARG (utmp.rwdata ()),
+                             F77_DBLE_CMPLX_ARG (vtmp.rwdata ())));
 }
 
 template <>
@@ -655,16 +655,16 @@
   if (u_nr != m || v_nr != n || u_nc != v_nc)
     (*current_liboctave_error_handler) ("luupdate: dimensions mismatch");
 
-  for (volatile F77_INT i = 0; i < u_nc; i++)
+  for (F77_INT i = 0; i < u_nc; i++)
     {
       ComplexColumnVector utmp = u.column (i);
       ComplexColumnVector vtmp = v.column (i);
       F77_XFCN (zlu1up, ZLU1UP, (m, n,
-                                 F77_DBLE_CMPLX_ARG (l.fortran_vec ()),
-                                 m, F77_DBLE_CMPLX_ARG (r.fortran_vec ()),
+                                 F77_DBLE_CMPLX_ARG (l.rwdata ()),
+                                 m, F77_DBLE_CMPLX_ARG (r.rwdata ()),
                                  k,
-                                 F77_DBLE_CMPLX_ARG (utmp.fortran_vec ()),
-                                 F77_DBLE_CMPLX_ARG (vtmp.fortran_vec ())));
+                                 F77_DBLE_CMPLX_ARG (utmp.rwdata ()),
+                                 F77_DBLE_CMPLX_ARG (vtmp.rwdata ())));
     }
 }
 
@@ -693,9 +693,9 @@
   ComplexColumnVector vtmp = v;
   OCTAVE_LOCAL_BUFFER (Complex, w, m);
   for (F77_INT i = 0; i < m; i++) m_ipvt(i) += 1; // increment
-  F77_XFCN (zlup1up, ZLUP1UP, (m, n, F77_DBLE_CMPLX_ARG (l.fortran_vec ()),
-                               m, F77_DBLE_CMPLX_ARG (r.fortran_vec ()), k,
-                               m_ipvt.fortran_vec (),
+  F77_XFCN (zlup1up, ZLUP1UP, (m, n, F77_DBLE_CMPLX_ARG (l.rwdata ()),
+                               m, F77_DBLE_CMPLX_ARG (r.rwdata ()), k,
+                               m_ipvt.rwdata (),
                                F77_CONST_DBLE_CMPLX_ARG (utmp.data ()),
                                F77_CONST_DBLE_CMPLX_ARG (vtmp.data ()),
                                F77_DBLE_CMPLX_ARG (w)));
@@ -728,15 +728,15 @@
 
   OCTAVE_LOCAL_BUFFER (Complex, w, m);
   for (F77_INT i = 0; i < m; i++) m_ipvt(i) += 1; // increment
-  for (volatile F77_INT i = 0; i < u_nc; i++)
+  for (F77_INT i = 0; i < u_nc; i++)
     {
       ComplexColumnVector utmp = u.column (i);
       ComplexColumnVector vtmp = v.column (i);
       F77_XFCN (zlup1up, ZLUP1UP, (m, n,
-                                   F77_DBLE_CMPLX_ARG (l.fortran_vec ()),
+                                   F77_DBLE_CMPLX_ARG (l.rwdata ()),
                                    m,
-                                   F77_DBLE_CMPLX_ARG (r.fortran_vec ()),
-                                   k, m_ipvt.fortran_vec (),
+                                   F77_DBLE_CMPLX_ARG (r.rwdata ()),
+                                   k, m_ipvt.rwdata (),
                                    F77_CONST_DBLE_CMPLX_ARG (utmp.data ()),
                                    F77_CONST_DBLE_CMPLX_ARG (vtmp.data ()),
                                    F77_DBLE_CMPLX_ARG (w)));
@@ -755,10 +755,10 @@
   F77_INT mn = (a_nr < a_nc ? a_nr : a_nc);
 
   m_ipvt.resize (dim_vector (mn, 1));
-  F77_INT *pipvt = m_ipvt.fortran_vec ();
+  F77_INT *pipvt = m_ipvt.rwdata ();
 
   m_a_fact = a;
-  FloatComplex *tmp_data = m_a_fact.fortran_vec ();
+  FloatComplex *tmp_data = m_a_fact.rwdata ();
 
   F77_INT info = 0;
 
@@ -794,10 +794,10 @@
 
   FloatComplexColumnVector utmp = u;
   FloatComplexColumnVector vtmp = v;
-  F77_XFCN (clu1up, CLU1UP, (m, n, F77_CMPLX_ARG (l.fortran_vec ()), m,
-                             F77_CMPLX_ARG (r.fortran_vec ()), k,
-                             F77_CMPLX_ARG (utmp.fortran_vec ()),
-                             F77_CMPLX_ARG (vtmp.fortran_vec ())));
+  F77_XFCN (clu1up, CLU1UP, (m, n, F77_CMPLX_ARG (l.rwdata ()), m,
+                             F77_CMPLX_ARG (r.rwdata ()), k,
+                             F77_CMPLX_ARG (utmp.rwdata ()),
+                             F77_CMPLX_ARG (vtmp.rwdata ())));
 }
 
 template <>
@@ -824,14 +824,14 @@
   if (u_nr != m || v_nr != n || u_nc != v_nc)
     (*current_liboctave_error_handler) ("luupdate: dimensions mismatch");
 
-  for (volatile F77_INT i = 0; i < u_nc; i++)
+  for (F77_INT i = 0; i < u_nc; i++)
     {
       FloatComplexColumnVector utmp = u.column (i);
       FloatComplexColumnVector vtmp = v.column (i);
-      F77_XFCN (clu1up, CLU1UP, (m, n, F77_CMPLX_ARG (l.fortran_vec ()),
-                                 m, F77_CMPLX_ARG (r.fortran_vec ()), k,
-                                 F77_CMPLX_ARG (utmp.fortran_vec ()),
-                                 F77_CMPLX_ARG (vtmp.fortran_vec ())));
+      F77_XFCN (clu1up, CLU1UP, (m, n, F77_CMPLX_ARG (l.rwdata ()),
+                                 m, F77_CMPLX_ARG (r.rwdata ()), k,
+                                 F77_CMPLX_ARG (utmp.rwdata ()),
+                                 F77_CMPLX_ARG (vtmp.rwdata ())));
     }
 }
 
@@ -860,9 +860,9 @@
   FloatComplexColumnVector vtmp = v;
   OCTAVE_LOCAL_BUFFER (FloatComplex, w, m);
   for (F77_INT i = 0; i < m; i++) m_ipvt(i) += 1; // increment
-  F77_XFCN (clup1up, CLUP1UP, (m, n, F77_CMPLX_ARG (l.fortran_vec ()),
-                               m, F77_CMPLX_ARG (r.fortran_vec ()), k,
-                               m_ipvt.fortran_vec (),
+  F77_XFCN (clup1up, CLUP1UP, (m, n, F77_CMPLX_ARG (l.rwdata ()),
+                               m, F77_CMPLX_ARG (r.rwdata ()), k,
+                               m_ipvt.rwdata (),
                                F77_CONST_CMPLX_ARG (utmp.data ()),
                                F77_CONST_CMPLX_ARG (vtmp.data ()),
                                F77_CMPLX_ARG (w)));
@@ -895,13 +895,13 @@
 
   OCTAVE_LOCAL_BUFFER (FloatComplex, w, m);
   for (F77_INT i = 0; i < m; i++) m_ipvt(i) += 1; // increment
-  for (volatile F77_INT i = 0; i < u_nc; i++)
+  for (F77_INT i = 0; i < u_nc; i++)
     {
       FloatComplexColumnVector utmp = u.column (i);
       FloatComplexColumnVector vtmp = v.column (i);
-      F77_XFCN (clup1up, CLUP1UP, (m, n, F77_CMPLX_ARG (l.fortran_vec ()),
-                                   m, F77_CMPLX_ARG (r.fortran_vec ()), k,
-                                   m_ipvt.fortran_vec (),
+      F77_XFCN (clup1up, CLUP1UP, (m, n, F77_CMPLX_ARG (l.rwdata ()),
+                                   m, F77_CMPLX_ARG (r.rwdata ()), k,
+                                   m_ipvt.rwdata (),
                                    F77_CONST_CMPLX_ARG (utmp.data ()),
                                    F77_CONST_CMPLX_ARG (vtmp.data ()),
                                    F77_CMPLX_ARG (w)));
--- a/liboctave/numeric/lu.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/lu.h	Mon Feb 26 23:30:33 2024 -0500
@@ -37,8 +37,7 @@
 OCTAVE_BEGIN_NAMESPACE(math)
 
 template <typename T>
-class
-lu
+class lu
 {
 public:
 
--- a/liboctave/numeric/oct-convn.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/oct-convn.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -180,7 +180,7 @@
 
   convolve_nd<T, R> (a.data (), adims, adims.cumulative (),
                      b.data (), bdims, bdims.cumulative (),
-                     c.fortran_vec (), cdims.cumulative (),
+                     c.rwdata (), cdims.cumulative (),
                      nd, ct == convn_valid);
 
   if (ct == convn_same)
--- a/liboctave/numeric/oct-fftw.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/oct-fftw.h	Mon Feb 26 23:30:33 2024 -0500
@@ -37,9 +37,7 @@
 
 OCTAVE_BEGIN_NAMESPACE(octave)
 
-class
-OCTAVE_API
-fftw_planner
+class OCTAVE_API fftw_planner
 {
 protected:
 
@@ -179,9 +177,7 @@
   int m_nthreads;
 };
 
-class
-OCTAVE_API
-float_fftw_planner
+class OCTAVE_API float_fftw_planner
 {
 protected:
 
@@ -321,9 +317,7 @@
   int m_nthreads;
 };
 
-class
-OCTAVE_API
-fftw
+class OCTAVE_API fftw
 {
 public:
 
--- a/liboctave/numeric/oct-norm.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/oct-norm.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -357,7 +357,7 @@
     FCN_NAME (v, res, norm_accumulator_2<R> ());              \
   else if (p == 1)                                            \
     FCN_NAME (v, res, norm_accumulator_1<R> ());              \
-  else if (lo_ieee_isinf (p))                                 \
+  else if (math::isinf (p))                                   \
     {                                                         \
       if (p > 0)                                              \
         FCN_NAME (v, res, norm_accumulator_inf<R> ());        \
@@ -551,7 +551,7 @@
     }
   else if (p == 1)
     res = xcolnorms (m, static_cast<R> (1)).max ();
-  else if (lo_ieee_isinf (p) && p > 1)
+  else if (math::isinf (p) && p > 1)
     res = xrownorms (m, static_cast<R> (1)).max ();
   else if (p > 1)
     {
@@ -573,7 +573,7 @@
   R res = 0;
   if (p == 1)
     res = xcolnorms (m, static_cast<R> (1)).max ();
-  else if (lo_ieee_isinf (p) && p > 1)
+  else if (math::isinf (p) && p > 1)
     res = xrownorms (m, static_cast<R> (1)).max ();
   else if (p > 1)
     {
--- a/liboctave/numeric/oct-rand.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/oct-rand.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -523,7 +523,7 @@
     {
       retval.clear (n, 1);
 
-      fill (retval.numel (), retval.fortran_vec (), a);
+      fill (retval.numel (), retval.rwdata (), a);
     }
   else if (n < 0)
     (*current_liboctave_error_handler) ("rand: invalid negative argument");
@@ -545,7 +545,7 @@
     {
       retval.clear (dims);
 
-      fill (retval.numel (), retval.fortran_vec (), a);
+      fill (retval.numel (), retval.rwdata (), a);
     }
 
   return retval;
@@ -560,7 +560,7 @@
     {
       retval.clear (dims);
 
-      fill (retval.numel (), retval.fortran_vec (), a);
+      fill (retval.numel (), retval.rwdata (), a);
     }
 
   return retval;
@@ -627,7 +627,7 @@
 {
   uint32NDArray s (dim_vector (MT_N + 1, 1));
 
-  get_mersenne_twister_state (reinterpret_cast<uint32_t *> (s.fortran_vec ()));
+  get_mersenne_twister_state (reinterpret_cast<uint32_t *> (s.rwdata ()));
 
   return s;
 }
--- a/liboctave/numeric/qr.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/qr.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -435,14 +435,14 @@
           F77_INT k = to_f77_int (m_q.cols ());
           // workspace query.
           double rlwork;
-          F77_XFCN (dorgqr, DORGQR, (m, k, min_mn, m_q.fortran_vec (), m,
+          F77_XFCN (dorgqr, DORGQR, (m, k, min_mn, m_q.rwdata (), m,
                                      tau, &rlwork, -1, info));
 
           // allocate buffer and do the job.
           F77_INT lwork = static_cast<F77_INT> (rlwork);
           lwork = std::max (lwork, static_cast<F77_INT> (1));
           OCTAVE_LOCAL_BUFFER (double, work, lwork);
-          F77_XFCN (dorgqr, DORGQR, (m, k, min_mn, m_q.fortran_vec (), m,
+          F77_XFCN (dorgqr, DORGQR, (m, k, min_mn, m_q.rwdata (), m,
                                      tau, work, lwork, info));
         }
     }
@@ -468,14 +468,14 @@
     {
       // workspace query.
       double rlwork;
-      F77_XFCN (dgeqrf, DGEQRF, (m, n, afact.fortran_vec (), m, tau,
+      F77_XFCN (dgeqrf, DGEQRF, (m, n, afact.rwdata (), m, tau,
                                  &rlwork, -1, info));
 
       // allocate buffer and do the job.
       F77_INT lwork = static_cast<F77_INT> (rlwork);
       lwork = std::max (lwork, static_cast<F77_INT> (1));
       OCTAVE_LOCAL_BUFFER (double, work, lwork);
-      F77_XFCN (dgeqrf, DGEQRF, (m, n, afact.fortran_vec (), m, tau,
+      F77_XFCN (dgeqrf, DGEQRF, (m, n, afact.rwdata (), m, tau,
                                  work, lwork, info));
     }
 
@@ -501,9 +501,9 @@
   ColumnVector utmp = u;
   ColumnVector vtmp = v;
   OCTAVE_LOCAL_BUFFER (double, w, 2*k);
-  F77_XFCN (dqr1up, DQR1UP, (m, n, k, m_q.fortran_vec (), m,
-                             m_r.fortran_vec (), k, utmp.fortran_vec (),
-                             vtmp.fortran_vec (), w));
+  F77_XFCN (dqr1up, DQR1UP, (m, n, k, m_q.rwdata (), m,
+                             m_r.rwdata (), k, utmp.rwdata (),
+                             vtmp.rwdata (), w));
 }
 
 template <>
@@ -524,13 +524,13 @@
     (*current_liboctave_error_handler) ("qrupdate: dimensions mismatch");
 
   OCTAVE_LOCAL_BUFFER (double, w, 2*k);
-  for (volatile F77_INT i = 0; i < u_cols; i++)
+  for (F77_INT i = 0; i < u_cols; i++)
     {
       ColumnVector utmp = u.column (i);
       ColumnVector vtmp = v.column (i);
-      F77_XFCN (dqr1up, DQR1UP, (m, n, k, m_q.fortran_vec (), m,
-                                 m_r.fortran_vec (), k, utmp.fortran_vec (),
-                                 vtmp.fortran_vec (), w));
+      F77_XFCN (dqr1up, DQR1UP, (m, n, k, m_q.rwdata (), m,
+                                 m_r.rwdata (), k, utmp.rwdata (),
+                                 vtmp.rwdata (), w));
     }
 }
 
@@ -565,8 +565,8 @@
 
   ColumnVector utmp = u;
   OCTAVE_LOCAL_BUFFER (double, w, k);
-  F77_XFCN (dqrinc, DQRINC, (m, n, k, m_q.fortran_vec (), ldq,
-                             m_r.fortran_vec (), ldr, j + 1,
+  F77_XFCN (dqrinc, DQRINC, (m, n, k, m_q.rwdata (), ldq,
+                             m_r.rwdata (), ldr, j + 1,
                              utmp.data (), w));
 }
 
@@ -615,14 +615,14 @@
       F77_INT ldr = to_f77_int (m_r.rows ());
 
       OCTAVE_LOCAL_BUFFER (double, w, kmax);
-      for (volatile F77_INT i = 0; i < nj; i++)
+      for (F77_INT i = 0; i < nj; i++)
         {
           F77_INT ii = i;
           ColumnVector utmp = u.column (jsi(i));
           F77_INT js_elt = to_f77_int (js(ii));
           F77_XFCN (dqrinc, DQRINC, (m, n + ii, std::min (kmax, k + ii),
-                                     m_q.fortran_vec (), ldq,
-                                     m_r.fortran_vec (), ldr, js_elt + 1,
+                                     m_q.rwdata (), ldq,
+                                     m_r.rwdata (), ldr, js_elt + 1,
                                      utmp.data (), w));
         }
     }
@@ -645,8 +645,8 @@
   F77_INT ldr = to_f77_int (m_r.rows ());
 
   OCTAVE_LOCAL_BUFFER (double, w, k);
-  F77_XFCN (dqrdec, DQRDEC, (m, n, k, m_q.fortran_vec (), ldq,
-                             m_r.fortran_vec (), ldr, j + 1, w));
+  F77_XFCN (dqrdec, DQRDEC, (m, n, k, m_q.rwdata (), ldq,
+                             m_r.rwdata (), ldr, j + 1, w));
 
   if (k < m)
     {
@@ -687,13 +687,13 @@
       F77_INT ldr = to_f77_int (m_r.rows ());
 
       OCTAVE_LOCAL_BUFFER (double, w, k);
-      for (volatile F77_INT i = 0; i < nj; i++)
+      for (F77_INT i = 0; i < nj; i++)
         {
           F77_INT ii = i;
           F77_INT js_elt = to_f77_int (js(ii));
           F77_XFCN (dqrdec, DQRDEC, (m, n - ii, (k == m ? k : k - ii),
-                                     m_q.fortran_vec (), ldq,
-                                     m_r.fortran_vec (), ldr,
+                                     m_q.rwdata (), ldq,
+                                     m_r.rwdata (), ldr,
                                      js_elt + 1, w));
         }
 
@@ -733,9 +733,9 @@
 
   RowVector utmp = u;
   OCTAVE_LOCAL_BUFFER (double, w, k);
-  F77_XFCN (dqrinr, DQRINR, (m, n, m_q.fortran_vec (), ldq,
-                             m_r.fortran_vec (), ldr,
-                             j + 1, utmp.fortran_vec (), w));
+  F77_XFCN (dqrinr, DQRINR, (m, n, m_q.rwdata (), ldq,
+                             m_r.rwdata (), ldr,
+                             j + 1, utmp.rwdata (), w));
 
 }
 
@@ -758,8 +758,8 @@
   F77_INT ldr = to_f77_int (m_r.rows ());
 
   OCTAVE_LOCAL_BUFFER (double, w, 2*m);
-  F77_XFCN (dqrder, DQRDER, (m, n, m_q.fortran_vec (), ldq,
-                             m_r.fortran_vec (), ldr, j + 1, w));
+  F77_XFCN (dqrder, DQRDER, (m, n, m_q.rwdata (), ldq,
+                             m_r.rwdata (), ldr, j + 1, w));
 
   m_q.resize (m - 1, m - 1);
   m_r.resize (m - 1, n);
@@ -784,8 +784,8 @@
 
   OCTAVE_LOCAL_BUFFER (double, w, 2*k);
   F77_XFCN (dqrshc, DQRSHC, (m, n, k,
-                             m_q.fortran_vec (), ldq,
-                             m_r.fortran_vec (), ldr,
+                             m_q.rwdata (), ldq,
+                             m_r.rwdata (), ldr,
                              i + 1, j + 1, w));
 }
 
@@ -849,14 +849,14 @@
           F77_INT k = to_f77_int (m_q.cols ());
           // workspace query.
           float rlwork;
-          F77_XFCN (sorgqr, SORGQR, (m, k, min_mn, m_q.fortran_vec (), m,
+          F77_XFCN (sorgqr, SORGQR, (m, k, min_mn, m_q.rwdata (), m,
                                      tau, &rlwork, -1, info));
 
           // allocate buffer and do the job.
           F77_INT lwork = static_cast<F77_INT> (rlwork);
           lwork = std::max (lwork, static_cast<F77_INT> (1));
           OCTAVE_LOCAL_BUFFER (float, work, lwork);
-          F77_XFCN (sorgqr, SORGQR, (m, k, min_mn, m_q.fortran_vec (), m,
+          F77_XFCN (sorgqr, SORGQR, (m, k, min_mn, m_q.rwdata (), m,
                                      tau, work, lwork, info));
         }
     }
@@ -882,14 +882,14 @@
     {
       // workspace query.
       float rlwork;
-      F77_XFCN (sgeqrf, SGEQRF, (m, n, afact.fortran_vec (), m, tau,
+      F77_XFCN (sgeqrf, SGEQRF, (m, n, afact.rwdata (), m, tau,
                                  &rlwork, -1, info));
 
       // allocate buffer and do the job.
       F77_INT lwork = static_cast<F77_INT> (rlwork);
       lwork = std::max (lwork, static_cast<F77_INT> (1));
       OCTAVE_LOCAL_BUFFER (float, work, lwork);
-      F77_XFCN (sgeqrf, SGEQRF, (m, n, afact.fortran_vec (), m, tau,
+      F77_XFCN (sgeqrf, SGEQRF, (m, n, afact.rwdata (), m, tau,
                                  work, lwork, info));
     }
 
@@ -915,9 +915,9 @@
   FloatColumnVector utmp = u;
   FloatColumnVector vtmp = v;
   OCTAVE_LOCAL_BUFFER (float, w, 2*k);
-  F77_XFCN (sqr1up, SQR1UP, (m, n, k, m_q.fortran_vec (), m,
-                             m_r.fortran_vec (), k, utmp.fortran_vec (),
-                             vtmp.fortran_vec (), w));
+  F77_XFCN (sqr1up, SQR1UP, (m, n, k, m_q.rwdata (), m,
+                             m_r.rwdata (), k, utmp.rwdata (),
+                             vtmp.rwdata (), w));
 }
 
 template <>
@@ -938,13 +938,13 @@
     (*current_liboctave_error_handler) ("qrupdate: dimensions mismatch");
 
   OCTAVE_LOCAL_BUFFER (float, w, 2*k);
-  for (volatile F77_INT i = 0; i < u_cols; i++)
+  for (F77_INT i = 0; i < u_cols; i++)
     {
       FloatColumnVector utmp = u.column (i);
       FloatColumnVector vtmp = v.column (i);
-      F77_XFCN (sqr1up, SQR1UP, (m, n, k, m_q.fortran_vec (), m,
-                                 m_r.fortran_vec (), k, utmp.fortran_vec (),
-                                 vtmp.fortran_vec (), w));
+      F77_XFCN (sqr1up, SQR1UP, (m, n, k, m_q.rwdata (), m,
+                                 m_r.rwdata (), k, utmp.rwdata (),
+                                 vtmp.rwdata (), w));
     }
 }
 
@@ -980,8 +980,8 @@
 
   FloatColumnVector utmp = u;
   OCTAVE_LOCAL_BUFFER (float, w, k);
-  F77_XFCN (sqrinc, SQRINC, (m, n, k, m_q.fortran_vec (), ldq,
-                             m_r.fortran_vec (), ldr, j + 1,
+  F77_XFCN (sqrinc, SQRINC, (m, n, k, m_q.rwdata (), ldq,
+                             m_r.rwdata (), ldr, j + 1,
                              utmp.data (), w));
 }
 
@@ -1031,14 +1031,14 @@
       F77_INT ldr = to_f77_int (m_r.rows ());
 
       OCTAVE_LOCAL_BUFFER (float, w, kmax);
-      for (volatile F77_INT i = 0; i < nj; i++)
+      for (F77_INT i = 0; i < nj; i++)
         {
           F77_INT ii = i;
           FloatColumnVector utmp = u.column (jsi(i));
           F77_INT js_elt = to_f77_int (js(ii));
           F77_XFCN (sqrinc, SQRINC, (m, n + ii, std::min (kmax, k + ii),
-                                     m_q.fortran_vec (), ldq,
-                                     m_r.fortran_vec (), ldr, js_elt + 1,
+                                     m_q.rwdata (), ldq,
+                                     m_r.rwdata (), ldr, js_elt + 1,
                                      utmp.data (), w));
         }
     }
@@ -1061,8 +1061,8 @@
   F77_INT ldr = to_f77_int (m_r.rows ());
 
   OCTAVE_LOCAL_BUFFER (float, w, k);
-  F77_XFCN (sqrdec, SQRDEC, (m, n, k, m_q.fortran_vec (), ldq,
-                             m_r.fortran_vec (), ldr, j + 1, w));
+  F77_XFCN (sqrdec, SQRDEC, (m, n, k, m_q.rwdata (), ldq,
+                             m_r.rwdata (), ldr, j + 1, w));
 
   if (k < m)
     {
@@ -1103,13 +1103,13 @@
       F77_INT ldr = to_f77_int (m_r.rows ());
 
       OCTAVE_LOCAL_BUFFER (float, w, k);
-      for (volatile F77_INT i = 0; i < nj; i++)
+      for (F77_INT i = 0; i < nj; i++)
         {
           F77_INT ii = i;
           F77_INT js_elt = to_f77_int (js(ii));
           F77_XFCN (sqrdec, SQRDEC, (m, n - ii, (k == m ? k : k - ii),
-                                     m_q.fortran_vec (), ldq,
-                                     m_r.fortran_vec (), ldr,
+                                     m_q.rwdata (), ldq,
+                                     m_r.rwdata (), ldr,
                                      js_elt + 1, w));
         }
 
@@ -1150,9 +1150,9 @@
 
   FloatRowVector utmp = u;
   OCTAVE_LOCAL_BUFFER (float, w, k);
-  F77_XFCN (sqrinr, SQRINR, (m, n, m_q.fortran_vec (), ldq,
-                             m_r.fortran_vec (), ldr,
-                             j + 1, utmp.fortran_vec (), w));
+  F77_XFCN (sqrinr, SQRINR, (m, n, m_q.rwdata (), ldq,
+                             m_r.rwdata (), ldr,
+                             j + 1, utmp.rwdata (), w));
 
 }
 
@@ -1175,8 +1175,8 @@
   F77_INT ldr = to_f77_int (m_r.rows ());
 
   OCTAVE_LOCAL_BUFFER (float, w, 2*m);
-  F77_XFCN (sqrder, SQRDER, (m, n, m_q.fortran_vec (), ldq,
-                             m_r.fortran_vec (), ldr, j + 1,
+  F77_XFCN (sqrder, SQRDER, (m, n, m_q.rwdata (), ldq,
+                             m_r.rwdata (), ldr, j + 1,
                              w));
 
   m_q.resize (m - 1, m - 1);
@@ -1202,8 +1202,8 @@
 
   OCTAVE_LOCAL_BUFFER (float, w, 2*k);
   F77_XFCN (sqrshc, SQRSHC, (m, n, k,
-                             m_q.fortran_vec (), ldq,
-                             m_r.fortran_vec (), ldr,
+                             m_q.rwdata (), ldq,
+                             m_r.rwdata (), ldr,
                              i + 1, j + 1, w));
 }
 
@@ -1268,7 +1268,7 @@
           // workspace query.
           Complex clwork;
           F77_XFCN (zungqr, ZUNGQR, (m, k, min_mn,
-                                     F77_DBLE_CMPLX_ARG (m_q.fortran_vec ()),
+                                     F77_DBLE_CMPLX_ARG (m_q.rwdata ()),
                                      m, F77_DBLE_CMPLX_ARG (tau),
                                      F77_DBLE_CMPLX_ARG (&clwork), -1,
                                      info));
@@ -1278,7 +1278,7 @@
           lwork = std::max (lwork, static_cast<F77_INT> (1));
           OCTAVE_LOCAL_BUFFER (Complex, work, lwork);
           F77_XFCN (zungqr, ZUNGQR, (m, k, min_mn,
-                                     F77_DBLE_CMPLX_ARG (m_q.fortran_vec ()),
+                                     F77_DBLE_CMPLX_ARG (m_q.rwdata ()),
                                      m, F77_DBLE_CMPLX_ARG (tau),
                                      F77_DBLE_CMPLX_ARG (work), lwork,
                                      info));
@@ -1307,7 +1307,7 @@
       // workspace query.
       Complex clwork;
       F77_XFCN (zgeqrf, ZGEQRF, (m, n,
-                                 F77_DBLE_CMPLX_ARG (afact.fortran_vec ()),
+                                 F77_DBLE_CMPLX_ARG (afact.rwdata ()),
                                  m, F77_DBLE_CMPLX_ARG (tau),
                                  F77_DBLE_CMPLX_ARG (&clwork), -1, info));
 
@@ -1316,7 +1316,7 @@
       lwork = std::max (lwork, static_cast<F77_INT> (1));
       OCTAVE_LOCAL_BUFFER (Complex, work, lwork);
       F77_XFCN (zgeqrf, ZGEQRF, (m, n,
-                                 F77_DBLE_CMPLX_ARG (afact.fortran_vec ()),
+                                 F77_DBLE_CMPLX_ARG (afact.rwdata ()),
                                  m, F77_DBLE_CMPLX_ARG (tau),
                                  F77_DBLE_CMPLX_ARG (work), lwork, info));
     }
@@ -1345,10 +1345,10 @@
   ComplexColumnVector vtmp = v;
   OCTAVE_LOCAL_BUFFER (Complex, w, k);
   OCTAVE_LOCAL_BUFFER (double, rw, k);
-  F77_XFCN (zqr1up, ZQR1UP, (m, n, k, F77_DBLE_CMPLX_ARG (m_q.fortran_vec ()),
-                             m, F77_DBLE_CMPLX_ARG (m_r.fortran_vec ()), k,
-                             F77_DBLE_CMPLX_ARG (utmp.fortran_vec ()),
-                             F77_DBLE_CMPLX_ARG (vtmp.fortran_vec ()),
+  F77_XFCN (zqr1up, ZQR1UP, (m, n, k, F77_DBLE_CMPLX_ARG (m_q.rwdata ()),
+                             m, F77_DBLE_CMPLX_ARG (m_r.rwdata ()), k,
+                             F77_DBLE_CMPLX_ARG (utmp.rwdata ()),
+                             F77_DBLE_CMPLX_ARG (vtmp.rwdata ()),
                              F77_DBLE_CMPLX_ARG (w), rw));
 }
 
@@ -1371,15 +1371,15 @@
 
   OCTAVE_LOCAL_BUFFER (Complex, w, k);
   OCTAVE_LOCAL_BUFFER (double, rw, k);
-  for (volatile F77_INT i = 0; i < u_cols; i++)
+  for (F77_INT i = 0; i < u_cols; i++)
     {
       ComplexColumnVector utmp = u.column (i);
       ComplexColumnVector vtmp = v.column (i);
       F77_XFCN (zqr1up, ZQR1UP, (m, n, k,
-                                 F77_DBLE_CMPLX_ARG (m_q.fortran_vec ()),
-                                 m, F77_DBLE_CMPLX_ARG (m_r.fortran_vec ()), k,
-                                 F77_DBLE_CMPLX_ARG (utmp.fortran_vec ()),
-                                 F77_DBLE_CMPLX_ARG (vtmp.fortran_vec ()),
+                                 F77_DBLE_CMPLX_ARG (m_q.rwdata ()),
+                                 m, F77_DBLE_CMPLX_ARG (m_r.rwdata ()), k,
+                                 F77_DBLE_CMPLX_ARG (utmp.rwdata ()),
+                                 F77_DBLE_CMPLX_ARG (vtmp.rwdata ()),
                                  F77_DBLE_CMPLX_ARG (w), rw));
     }
 }
@@ -1416,8 +1416,8 @@
 
   ComplexColumnVector utmp = u;
   OCTAVE_LOCAL_BUFFER (double, rw, k);
-  F77_XFCN (zqrinc, ZQRINC, (m, n, k, F77_DBLE_CMPLX_ARG (m_q.fortran_vec ()),
-                             ldq, F77_DBLE_CMPLX_ARG (m_r.fortran_vec ()),
+  F77_XFCN (zqrinc, ZQRINC, (m, n, k, F77_DBLE_CMPLX_ARG (m_q.rwdata ()),
+                             ldq, F77_DBLE_CMPLX_ARG (m_r.rwdata ()),
                              ldr, j + 1,
                              F77_CONST_DBLE_CMPLX_ARG (utmp.data ()), rw));
 }
@@ -1468,15 +1468,15 @@
       F77_INT ldr = to_f77_int (m_r.rows ());
 
       OCTAVE_LOCAL_BUFFER (double, rw, kmax);
-      for (volatile F77_INT i = 0; i < nj; i++)
+      for (F77_INT i = 0; i < nj; i++)
         {
           F77_INT ii = i;
           ComplexColumnVector utmp = u.column (jsi(i));
           F77_INT js_elt = to_f77_int (js(ii));
           F77_XFCN (zqrinc, ZQRINC, (m, n + ii, std::min (kmax, k + ii),
-                                     F77_DBLE_CMPLX_ARG (m_q.fortran_vec ()),
+                                     F77_DBLE_CMPLX_ARG (m_q.rwdata ()),
                                      ldq,
-                                     F77_DBLE_CMPLX_ARG (m_r.fortran_vec ()),
+                                     F77_DBLE_CMPLX_ARG (m_r.rwdata ()),
                                      ldr, js_elt + 1,
                                      F77_CONST_DBLE_CMPLX_ARG (utmp.data ()),
                                      rw));
@@ -1501,8 +1501,8 @@
   F77_INT ldr = to_f77_int (m_r.rows ());
 
   OCTAVE_LOCAL_BUFFER (double, rw, k);
-  F77_XFCN (zqrdec, ZQRDEC, (m, n, k, F77_DBLE_CMPLX_ARG (m_q.fortran_vec ()),
-                             ldq, F77_DBLE_CMPLX_ARG (m_r.fortran_vec ()),
+  F77_XFCN (zqrdec, ZQRDEC, (m, n, k, F77_DBLE_CMPLX_ARG (m_q.rwdata ()),
+                             ldq, F77_DBLE_CMPLX_ARG (m_r.rwdata ()),
                              ldr, j + 1, rw));
 
   if (k < m)
@@ -1544,14 +1544,14 @@
       F77_INT ldr = to_f77_int (m_r.rows ());
 
       OCTAVE_LOCAL_BUFFER (double, rw, k);
-      for (volatile F77_INT i = 0; i < nj; i++)
+      for (F77_INT i = 0; i < nj; i++)
         {
           F77_INT ii = i;
           F77_INT js_elt = to_f77_int (js(ii));
           F77_XFCN (zqrdec, ZQRDEC, (m, n - ii, (k == m ? k : k - ii),
-                                     F77_DBLE_CMPLX_ARG (m_q.fortran_vec ()),
+                                     F77_DBLE_CMPLX_ARG (m_q.rwdata ()),
                                      ldq,
-                                     F77_DBLE_CMPLX_ARG (m_r.fortran_vec ()),
+                                     F77_DBLE_CMPLX_ARG (m_r.rwdata ()),
                                      ldr, js_elt + 1, rw));
         }
 
@@ -1592,10 +1592,10 @@
 
   ComplexRowVector utmp = u;
   OCTAVE_LOCAL_BUFFER (double, rw, k);
-  F77_XFCN (zqrinr, ZQRINR, (m, n, F77_DBLE_CMPLX_ARG (m_q.fortran_vec ()),
-                             ldq, F77_DBLE_CMPLX_ARG (m_r.fortran_vec ()),
+  F77_XFCN (zqrinr, ZQRINR, (m, n, F77_DBLE_CMPLX_ARG (m_q.rwdata ()),
+                             ldq, F77_DBLE_CMPLX_ARG (m_r.rwdata ()),
                              ldr, j + 1,
-                             F77_DBLE_CMPLX_ARG (utmp.fortran_vec ()), rw));
+                             F77_DBLE_CMPLX_ARG (utmp.rwdata ()), rw));
 
 }
 
@@ -1619,8 +1619,8 @@
 
   OCTAVE_LOCAL_BUFFER (Complex, w, m);
   OCTAVE_LOCAL_BUFFER (double, rw, m);
-  F77_XFCN (zqrder, ZQRDER, (m, n, F77_DBLE_CMPLX_ARG (m_q.fortran_vec ()),
-                             ldq, F77_DBLE_CMPLX_ARG (m_r.fortran_vec ()),
+  F77_XFCN (zqrder, ZQRDER, (m, n, F77_DBLE_CMPLX_ARG (m_q.rwdata ()),
+                             ldq, F77_DBLE_CMPLX_ARG (m_r.rwdata ()),
                              ldr, j + 1, F77_DBLE_CMPLX_ARG (w), rw));
 
   m_q.resize (m - 1, m - 1);
@@ -1648,8 +1648,8 @@
   OCTAVE_LOCAL_BUFFER (Complex, w, k);
   OCTAVE_LOCAL_BUFFER (double, rw, k);
   F77_XFCN (zqrshc, ZQRSHC, (m, n, k,
-                             F77_DBLE_CMPLX_ARG (m_q.fortran_vec ()), ldq,
-                             F77_DBLE_CMPLX_ARG (m_r.fortran_vec ()), ldr,
+                             F77_DBLE_CMPLX_ARG (m_q.rwdata ()), ldq,
+                             F77_DBLE_CMPLX_ARG (m_r.rwdata ()), ldr,
                              i + 1, j + 1, F77_DBLE_CMPLX_ARG (w), rw));
 }
 
@@ -1714,7 +1714,7 @@
           // workspace query.
           FloatComplex clwork;
           F77_XFCN (cungqr, CUNGQR, (m, k, min_mn,
-                                     F77_CMPLX_ARG (m_q.fortran_vec ()), m,
+                                     F77_CMPLX_ARG (m_q.rwdata ()), m,
                                      F77_CMPLX_ARG (tau),
                                      F77_CMPLX_ARG (&clwork), -1, info));
 
@@ -1723,7 +1723,7 @@
           lwork = std::max (lwork, static_cast<F77_INT> (1));
           OCTAVE_LOCAL_BUFFER (FloatComplex, work, lwork);
           F77_XFCN (cungqr, CUNGQR, (m, k, min_mn,
-                                     F77_CMPLX_ARG (m_q.fortran_vec ()), m,
+                                     F77_CMPLX_ARG (m_q.rwdata ()), m,
                                      F77_CMPLX_ARG (tau),
                                      F77_CMPLX_ARG (work), lwork, info));
         }
@@ -1750,7 +1750,7 @@
     {
       // workspace query.
       FloatComplex clwork;
-      F77_XFCN (cgeqrf, CGEQRF, (m, n, F77_CMPLX_ARG (afact.fortran_vec ()),
+      F77_XFCN (cgeqrf, CGEQRF, (m, n, F77_CMPLX_ARG (afact.rwdata ()),
                                  m, F77_CMPLX_ARG (tau),
                                  F77_CMPLX_ARG (&clwork), -1, info));
 
@@ -1758,7 +1758,7 @@
       F77_INT lwork = static_cast<F77_INT> (clwork.real ());
       lwork = std::max (lwork, static_cast<F77_INT> (1));
       OCTAVE_LOCAL_BUFFER (FloatComplex, work, lwork);
-      F77_XFCN (cgeqrf, CGEQRF, (m, n, F77_CMPLX_ARG (afact.fortran_vec ()),
+      F77_XFCN (cgeqrf, CGEQRF, (m, n, F77_CMPLX_ARG (afact.rwdata ()),
                                  m, F77_CMPLX_ARG (tau),
                                  F77_CMPLX_ARG (work), lwork, info));
     }
@@ -1787,10 +1787,10 @@
   FloatComplexColumnVector vtmp = v;
   OCTAVE_LOCAL_BUFFER (FloatComplex, w, k);
   OCTAVE_LOCAL_BUFFER (float, rw, k);
-  F77_XFCN (cqr1up, CQR1UP, (m, n, k, F77_CMPLX_ARG (m_q.fortran_vec ()),
-                             m, F77_CMPLX_ARG (m_r.fortran_vec ()), k,
-                             F77_CMPLX_ARG (utmp.fortran_vec ()),
-                             F77_CMPLX_ARG (vtmp.fortran_vec ()),
+  F77_XFCN (cqr1up, CQR1UP, (m, n, k, F77_CMPLX_ARG (m_q.rwdata ()),
+                             m, F77_CMPLX_ARG (m_r.rwdata ()), k,
+                             F77_CMPLX_ARG (utmp.rwdata ()),
+                             F77_CMPLX_ARG (vtmp.rwdata ()),
                              F77_CMPLX_ARG (w), rw));
 }
 
@@ -1814,14 +1814,14 @@
 
   OCTAVE_LOCAL_BUFFER (FloatComplex, w, k);
   OCTAVE_LOCAL_BUFFER (float, rw, k);
-  for (volatile F77_INT i = 0; i < u_cols; i++)
+  for (F77_INT i = 0; i < u_cols; i++)
     {
       FloatComplexColumnVector utmp = u.column (i);
       FloatComplexColumnVector vtmp = v.column (i);
-      F77_XFCN (cqr1up, CQR1UP, (m, n, k, F77_CMPLX_ARG (m_q.fortran_vec ()),
-                                 m, F77_CMPLX_ARG (m_r.fortran_vec ()), k,
-                                 F77_CMPLX_ARG (utmp.fortran_vec ()),
-                                 F77_CMPLX_ARG (vtmp.fortran_vec ()),
+      F77_XFCN (cqr1up, CQR1UP, (m, n, k, F77_CMPLX_ARG (m_q.rwdata ()),
+                                 m, F77_CMPLX_ARG (m_r.rwdata ()), k,
+                                 F77_CMPLX_ARG (utmp.rwdata ()),
+                                 F77_CMPLX_ARG (vtmp.rwdata ()),
                                  F77_CMPLX_ARG (w), rw));
     }
 }
@@ -1858,8 +1858,8 @@
 
   FloatComplexColumnVector utmp = u;
   OCTAVE_LOCAL_BUFFER (float, rw, k);
-  F77_XFCN (cqrinc, CQRINC, (m, n, k, F77_CMPLX_ARG (m_q.fortran_vec ()), ldq,
-                             F77_CMPLX_ARG (m_r.fortran_vec ()), ldr, j + 1,
+  F77_XFCN (cqrinc, CQRINC, (m, n, k, F77_CMPLX_ARG (m_q.rwdata ()), ldq,
+                             F77_CMPLX_ARG (m_r.rwdata ()), ldr, j + 1,
                              F77_CONST_CMPLX_ARG (utmp.data ()), rw));
 }
 
@@ -1909,13 +1909,13 @@
       F77_INT ldr = to_f77_int (m_r.rows ());
 
       OCTAVE_LOCAL_BUFFER (float, rw, kmax);
-      for (volatile F77_INT i = 0; i < nj; i++)
+      for (F77_INT i = 0; i < nj; i++)
         {
           F77_INT ii = i;
           F77_INT js_elt = to_f77_int (js(ii));
           F77_XFCN (cqrinc, CQRINC, (m, n + ii, std::min (kmax, k + ii),
-                                     F77_CMPLX_ARG (m_q.fortran_vec ()), ldq,
-                                     F77_CMPLX_ARG (m_r.fortran_vec ()), ldr,
+                                     F77_CMPLX_ARG (m_q.rwdata ()), ldq,
+                                     F77_CMPLX_ARG (m_r.rwdata ()), ldr,
                                      js_elt + 1,
                                      F77_CONST_CMPLX_ARG (u.column (jsi(i)).data ()),
                                      rw));
@@ -1940,8 +1940,8 @@
   F77_INT ldr = to_f77_int (m_r.rows ());
 
   OCTAVE_LOCAL_BUFFER (float, rw, k);
-  F77_XFCN (cqrdec, CQRDEC, (m, n, k, F77_CMPLX_ARG (m_q.fortran_vec ()), ldq,
-                             F77_CMPLX_ARG (m_r.fortran_vec ()), ldr, j + 1,
+  F77_XFCN (cqrdec, CQRDEC, (m, n, k, F77_CMPLX_ARG (m_q.rwdata ()), ldq,
+                             F77_CMPLX_ARG (m_r.rwdata ()), ldr, j + 1,
                              rw));
 
   if (k < m)
@@ -1983,13 +1983,13 @@
       F77_INT ldr = to_f77_int (m_r.rows ());
 
       OCTAVE_LOCAL_BUFFER (float, rw, k);
-      for (volatile F77_INT i = 0; i < nj; i++)
+      for (F77_INT i = 0; i < nj; i++)
         {
           F77_INT ii = i;
           F77_INT js_elt = to_f77_int (js(ii));
           F77_XFCN (cqrdec, CQRDEC, (m, n - ii, (k == m ? k : k - ii),
-                                     F77_CMPLX_ARG (m_q.fortran_vec ()), ldq,
-                                     F77_CMPLX_ARG (m_r.fortran_vec ()), ldr,
+                                     F77_CMPLX_ARG (m_q.rwdata ()), ldq,
+                                     F77_CMPLX_ARG (m_r.rwdata ()), ldr,
                                      js_elt + 1, rw));
         }
 
@@ -2030,9 +2030,9 @@
 
   FloatComplexRowVector utmp = u;
   OCTAVE_LOCAL_BUFFER (float, rw, k);
-  F77_XFCN (cqrinr, CQRINR, (m, n, F77_CMPLX_ARG (m_q.fortran_vec ()), ldq,
-                             F77_CMPLX_ARG (m_r.fortran_vec ()), ldr,
-                             j + 1, F77_CMPLX_ARG (utmp.fortran_vec ()),
+  F77_XFCN (cqrinr, CQRINR, (m, n, F77_CMPLX_ARG (m_q.rwdata ()), ldq,
+                             F77_CMPLX_ARG (m_r.rwdata ()), ldr,
+                             j + 1, F77_CMPLX_ARG (utmp.rwdata ()),
                              rw));
 
 }
@@ -2057,8 +2057,8 @@
 
   OCTAVE_LOCAL_BUFFER (FloatComplex, w, m);
   OCTAVE_LOCAL_BUFFER (float, rw, m);
-  F77_XFCN (cqrder, CQRDER, (m, n, F77_CMPLX_ARG (m_q.fortran_vec ()), ldq,
-                             F77_CMPLX_ARG (m_r.fortran_vec ()), ldr, j + 1,
+  F77_XFCN (cqrder, CQRDER, (m, n, F77_CMPLX_ARG (m_q.rwdata ()), ldq,
+                             F77_CMPLX_ARG (m_r.rwdata ()), ldr, j + 1,
                              F77_CMPLX_ARG (w), rw));
 
   m_q.resize (m - 1, m - 1);
@@ -2086,8 +2086,8 @@
   OCTAVE_LOCAL_BUFFER (FloatComplex, w, k);
   OCTAVE_LOCAL_BUFFER (float, rw, k);
   F77_XFCN (cqrshc, CQRSHC, (m, n, k,
-                             F77_CMPLX_ARG (m_q.fortran_vec ()), ldq,
-                             F77_CMPLX_ARG (m_r.fortran_vec ()), ldr,
+                             F77_CMPLX_ARG (m_q.rwdata ()), ldq,
+                             F77_CMPLX_ARG (m_r.rwdata ()), ldr,
                              i + 1, j + 1, F77_CMPLX_ARG (w), rw));
 }
 
--- a/liboctave/numeric/qr.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/qr.h	Mon Feb 26 23:30:33 2024 -0500
@@ -35,8 +35,7 @@
 OCTAVE_BEGIN_NAMESPACE(math)
 
 template <typename T>
-class
-qr
+class qr
 {
 public:
 
--- a/liboctave/numeric/qrp.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/qrp.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -74,8 +74,8 @@
     {
       // workspace query.
       double rlwork;
-      F77_XFCN (dgeqp3, DGEQP3, (m, n, afact.fortran_vec (),
-                                 m, jpvt.fortran_vec (), tau,
+      F77_XFCN (dgeqp3, DGEQP3, (m, n, afact.rwdata (),
+                                 m, jpvt.rwdata (), tau,
                                  &rlwork, -1, info));
 
       // allocate buffer and do the job.
@@ -83,8 +83,8 @@
       lwork = std::max (lwork, static_cast<F77_INT> (1));
       OCTAVE_LOCAL_BUFFER (double, work, lwork);
 
-      F77_XFCN (dgeqp3, DGEQP3, (m, n, afact.fortran_vec (),
-                                 m, jpvt.fortran_vec (), tau,
+      F77_XFCN (dgeqp3, DGEQP3, (m, n, afact.rwdata (),
+                                 m, jpvt.rwdata (), tau,
                                  work, lwork, info));
     }
   else
@@ -145,8 +145,8 @@
     {
       // workspace query.
       float rlwork;
-      F77_XFCN (sgeqp3, SGEQP3, (m, n, afact.fortran_vec (),
-                                 m, jpvt.fortran_vec (), tau,
+      F77_XFCN (sgeqp3, SGEQP3, (m, n, afact.rwdata (),
+                                 m, jpvt.rwdata (), tau,
                                  &rlwork, -1, info));
 
       // allocate buffer and do the job.
@@ -154,8 +154,8 @@
       lwork = std::max (lwork, static_cast<F77_INT> (1));
       OCTAVE_LOCAL_BUFFER (float, work, lwork);
 
-      F77_XFCN (sgeqp3, SGEQP3, (m, n, afact.fortran_vec (),
-                                 m, jpvt.fortran_vec (), tau,
+      F77_XFCN (sgeqp3, SGEQP3, (m, n, afact.rwdata (),
+                                 m, jpvt.rwdata (), tau,
                                  work, lwork, info));
     }
   else
@@ -219,8 +219,8 @@
       // workspace query.
       Complex clwork;
       F77_XFCN (zgeqp3, ZGEQP3, (m, n,
-                                 F77_DBLE_CMPLX_ARG (afact.fortran_vec ()),
-                                 m, jpvt.fortran_vec (),
+                                 F77_DBLE_CMPLX_ARG (afact.rwdata ()),
+                                 m, jpvt.rwdata (),
                                  F77_DBLE_CMPLX_ARG (tau),
                                  F77_DBLE_CMPLX_ARG (&clwork),
                                  -1, rwork, info));
@@ -231,8 +231,8 @@
       OCTAVE_LOCAL_BUFFER (Complex, work, lwork);
 
       F77_XFCN (zgeqp3, ZGEQP3, (m, n,
-                                 F77_DBLE_CMPLX_ARG (afact.fortran_vec ()),
-                                 m, jpvt.fortran_vec (),
+                                 F77_DBLE_CMPLX_ARG (afact.rwdata ()),
+                                 m, jpvt.rwdata (),
                                  F77_DBLE_CMPLX_ARG (tau),
                                  F77_DBLE_CMPLX_ARG (work),
                                  lwork, rwork, info));
@@ -298,8 +298,8 @@
       // workspace query.
       FloatComplex clwork;
       F77_XFCN (cgeqp3, CGEQP3, (m, n,
-                                 F77_CMPLX_ARG (afact.fortran_vec ()),
-                                 m, jpvt.fortran_vec (),
+                                 F77_CMPLX_ARG (afact.rwdata ()),
+                                 m, jpvt.rwdata (),
                                  F77_CMPLX_ARG (tau),
                                  F77_CMPLX_ARG (&clwork),
                                  -1, rwork, info));
@@ -310,8 +310,8 @@
       OCTAVE_LOCAL_BUFFER (FloatComplex, work, lwork);
 
       F77_XFCN (cgeqp3, CGEQP3, (m, n,
-                                 F77_CMPLX_ARG (afact.fortran_vec ()),
-                                 m, jpvt.fortran_vec (),
+                                 F77_CMPLX_ARG (afact.rwdata ()),
+                                 m, jpvt.rwdata (),
                                  F77_CMPLX_ARG (tau),
                                  F77_CMPLX_ARG (work),
                                  lwork, rwork, info));
--- a/liboctave/numeric/qrp.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/qrp.h	Mon Feb 26 23:30:33 2024 -0500
@@ -36,8 +36,7 @@
 OCTAVE_BEGIN_NAMESPACE(math)
 
 template <typename T>
-class
-qrp : public qr<T>
+class qrp : public qr<T>
 {
 public:
 
--- a/liboctave/numeric/randgamma.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/randgamma.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -87,6 +87,7 @@
 #include <cmath>
 
 #include "lo-ieee.h"
+#include "lo-mappers.h"
 #include "randgamma.h"
 #include "randmtzig.h"
 
@@ -100,7 +101,7 @@
   const T c = 1./std::sqrt (9.*d);
 
   /* Handle invalid cases */
-  if (a <= 0 || lo_ieee_isinf (a))
+  if (a <= 0 || math::isinf (a))
     {
       for (i=0; i < n; i++)
         r[i] = numeric_limits<T>::NaN ();
--- a/liboctave/numeric/randpoisson.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/randpoisson.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -36,6 +36,7 @@
 #include "f77-fcn.h"
 #include "lo-error.h"
 #include "lo-ieee.h"
+#include "lo-mappers.h"
 #include "randmtzig.h"
 #include "randpoisson.h"
 
@@ -404,7 +405,7 @@
 {
   double L = L_arg;
   octave_idx_type i;
-  if (L < 0.0 || lo_ieee_isinf (L))
+  if (L < 0.0 || math::isinf (L))
     {
       for (i=0; i<n; i++)
         p[i] = numeric_limits<T>::NaN ();
@@ -461,7 +462,7 @@
       /* numerical recipes */
       poisson_rejection<T> (L, &ret, 1);
     }
-  else if (lo_ieee_isinf (L))
+  else if (math::isinf (L))
     {
       /* FIXME: R uses NaN, but the normal approximation suggests that
        * limit should be Inf.  Which is correct? */
--- a/liboctave/numeric/schur.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/schur.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -133,7 +133,7 @@
       || ord_char == 'a' || ord_char == 'd')
     sort = 'S';
 
-  volatile double_selector selector = nullptr;
+  double_selector selector = nullptr;
   if (ord_char == 'A' || ord_char == 'a')
     selector = select_ana;
   else if (ord_char == 'D' || ord_char == 'd')
@@ -152,25 +152,25 @@
   if (calc_unitary)
     m_unitary_schur_mat.clear (n, n);
 
-  double *s = m_schur_mat.fortran_vec ();
-  double *q = m_unitary_schur_mat.fortran_vec ();
+  double *s = m_schur_mat.rwdata ();
+  double *q = m_unitary_schur_mat.rwdata ();
 
   Array<double> wr (dim_vector (n, 1));
-  double *pwr = wr.fortran_vec ();
+  double *pwr = wr.rwdata ();
 
   Array<double> wi (dim_vector (n, 1));
-  double *pwi = wi.fortran_vec ();
+  double *pwi = wi.rwdata ();
 
   Array<double> work (dim_vector (lwork, 1));
-  double *pwork = work.fortran_vec ();
+  double *pwork = work.rwdata ();
 
   // BWORK is not referenced for the non-ordered Schur routine.
   F77_INT ntmp = (ord_char == 'N' || ord_char == 'n') ? 0 : n;
   Array<F77_INT> bwork (dim_vector (ntmp, 1));
-  F77_INT *pbwork = bwork.fortran_vec ();
+  F77_INT *pbwork = bwork.rwdata ();
 
   Array<F77_INT> iwork (dim_vector (liwork, 1));
-  F77_INT *piwork = iwork.fortran_vec ();
+  F77_INT *piwork = iwork.rwdata ();
 
   F77_XFCN (dgeesx, DGEESX, (F77_CONST_CHAR_ARG2 (&jobvs, 1),
                              F77_CONST_CHAR_ARG2 (&sort, 1),
@@ -221,7 +221,7 @@
       || ord_char == 'a' || ord_char == 'd')
     sort = 'S';
 
-  volatile float_selector selector = nullptr;
+  float_selector selector = nullptr;
   if (ord_char == 'A' || ord_char == 'a')
     selector = select_ana;
   else if (ord_char == 'D' || ord_char == 'd')
@@ -240,25 +240,25 @@
   if (calc_unitary)
     m_unitary_schur_mat.clear (n, n);
 
-  float *s = m_schur_mat.fortran_vec ();
-  float *q = m_unitary_schur_mat.fortran_vec ();
+  float *s = m_schur_mat.rwdata ();
+  float *q = m_unitary_schur_mat.rwdata ();
 
   Array<float> wr (dim_vector (n, 1));
-  float *pwr = wr.fortran_vec ();
+  float *pwr = wr.rwdata ();
 
   Array<float> wi (dim_vector (n, 1));
-  float *pwi = wi.fortran_vec ();
+  float *pwi = wi.rwdata ();
 
   Array<float> work (dim_vector (lwork, 1));
-  float *pwork = work.fortran_vec ();
+  float *pwork = work.rwdata ();
 
   // BWORK is not referenced for the non-ordered Schur routine.
   F77_INT ntmp = (ord_char == 'N' || ord_char == 'n') ? 0 : n;
   Array<F77_INT> bwork (dim_vector (ntmp, 1));
-  F77_INT *pbwork = bwork.fortran_vec ();
+  F77_INT *pbwork = bwork.rwdata ();
 
   Array<F77_INT> iwork (dim_vector (liwork, 1));
-  F77_INT *piwork = iwork.fortran_vec ();
+  F77_INT *piwork = iwork.rwdata ();
 
   F77_XFCN (sgeesx, SGEESX, (F77_CONST_CHAR_ARG2 (&jobvs, 1),
                              F77_CONST_CHAR_ARG2 (&sort, 1),
@@ -309,7 +309,7 @@
       || ord_char == 'a' || ord_char == 'd')
     sort = 'S';
 
-  volatile complex_selector selector = nullptr;
+  complex_selector selector = nullptr;
   if (ord_char == 'A' || ord_char == 'a')
     selector = select_ana;
   else if (ord_char == 'D' || ord_char == 'd')
@@ -326,22 +326,22 @@
   if (calc_unitary)
     m_unitary_schur_mat.clear (n, n);
 
-  Complex *s = m_schur_mat.fortran_vec ();
-  Complex *q = m_unitary_schur_mat.fortran_vec ();
+  Complex *s = m_schur_mat.rwdata ();
+  Complex *q = m_unitary_schur_mat.rwdata ();
 
   Array<double> rwork (dim_vector (n, 1));
-  double *prwork = rwork.fortran_vec ();
+  double *prwork = rwork.rwdata ();
 
   Array<Complex> w (dim_vector (n, 1));
-  Complex *pw = w.fortran_vec ();
+  Complex *pw = w.rwdata ();
 
   Array<Complex> work (dim_vector (lwork, 1));
-  Complex *pwork = work.fortran_vec ();
+  Complex *pwork = work.rwdata ();
 
   // BWORK is not referenced for non-ordered Schur.
   F77_INT ntmp = (ord_char == 'N' || ord_char == 'n') ? 0 : n;
   Array<F77_INT> bwork (dim_vector (ntmp, 1));
-  F77_INT *pbwork = bwork.fortran_vec ();
+  F77_INT *pbwork = bwork.rwdata ();
 
   F77_XFCN (zgeesx, ZGEESX,
             (F77_CONST_CHAR_ARG2 (&jobvs, 1),
@@ -377,8 +377,8 @@
       OCTAVE_LOCAL_BUFFER (double, sx, n-1);
 
       F77_XFCN (zrsf2csf, ZRSF2CSF,
-                (n, F77_DBLE_CMPLX_ARG (s.fortran_vec ()),
-                 F77_DBLE_CMPLX_ARG (u.fortran_vec ()), c, sx));
+                (n, F77_DBLE_CMPLX_ARG (s.rwdata ()),
+                 F77_DBLE_CMPLX_ARG (u.rwdata ()), c, sx));
     }
 
   return schur<ComplexMatrix> (s, u);
@@ -420,7 +420,7 @@
       || ord_char == 'a' || ord_char == 'd')
     sort = 'S';
 
-  volatile float_complex_selector selector = nullptr;
+  float_complex_selector selector = nullptr;
   if (ord_char == 'A' || ord_char == 'a')
     selector = select_ana;
   else if (ord_char == 'D' || ord_char == 'd')
@@ -437,22 +437,22 @@
   if (calc_unitary)
     m_unitary_schur_mat.clear (n, n);
 
-  FloatComplex *s = m_schur_mat.fortran_vec ();
-  FloatComplex *q = m_unitary_schur_mat.fortran_vec ();
+  FloatComplex *s = m_schur_mat.rwdata ();
+  FloatComplex *q = m_unitary_schur_mat.rwdata ();
 
   Array<float> rwork (dim_vector (n, 1));
-  float *prwork = rwork.fortran_vec ();
+  float *prwork = rwork.rwdata ();
 
   Array<FloatComplex> w (dim_vector (n, 1));
-  FloatComplex *pw = w.fortran_vec ();
+  FloatComplex *pw = w.rwdata ();
 
   Array<FloatComplex> work (dim_vector (lwork, 1));
-  FloatComplex *pwork = work.fortran_vec ();
+  FloatComplex *pwork = work.rwdata ();
 
   // BWORK is not referenced for non-ordered Schur.
   F77_INT ntmp = (ord_char == 'N' || ord_char == 'n') ? 0 : n;
   Array<F77_INT> bwork (dim_vector (ntmp, 1));
-  F77_INT *pbwork = bwork.fortran_vec ();
+  F77_INT *pbwork = bwork.rwdata ();
 
   F77_XFCN (cgeesx, CGEESX,
             (F77_CONST_CHAR_ARG2 (&jobvs, 1),
@@ -490,8 +490,8 @@
       OCTAVE_LOCAL_BUFFER (float, sx, n-1);
 
       F77_XFCN (crsf2csf, CRSF2CSF,
-                (n, F77_CMPLX_ARG (s.fortran_vec ()),
-                 F77_CMPLX_ARG (u.fortran_vec ()), c, sx));
+                (n, F77_CMPLX_ARG (s.rwdata ()),
+                 F77_CMPLX_ARG (u.rwdata ()), c, sx));
     }
 
   return schur<FloatComplexMatrix> (s, u);
--- a/liboctave/numeric/schur.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/schur.h	Mon Feb 26 23:30:33 2024 -0500
@@ -42,8 +42,7 @@
 OCTAVE_BEGIN_NAMESPACE(math)
 
 template <typename T>
-class
-schur
+class schur
 {
 public:
 
--- a/liboctave/numeric/sparse-chol.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/sparse-chol.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -211,7 +211,7 @@
 sparse_chol<chol_type>::sparse_chol_rep::init (const chol_type& a,
     bool natural, bool force)
 {
-  volatile octave_idx_type info = 0;
+  octave_idx_type info = 0;
 
 #if defined (HAVE_CHOLMOD)
 
--- a/liboctave/numeric/sparse-chol.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/sparse-chol.h	Mon Feb 26 23:30:33 2024 -0500
@@ -44,9 +44,7 @@
 // of the matrix type.
 
 template <typename chol_type>
-class
-OCTAVE_API
-sparse_chol
+class OCTAVE_API sparse_chol
 {
 public:
 
--- a/liboctave/numeric/sparse-dmsolve.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/sparse-dmsolve.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -173,7 +173,7 @@
 dmsolve_insert (MArray<T>& a, const MArray<T>& b, const octave_idx_type *Q,
                 octave_idx_type r, octave_idx_type c)
 {
-  T *ax = a.fortran_vec ();
+  T *ax = a.rwdata ();
 
   const T *bx = b.data ();
 
@@ -299,7 +299,7 @@
 
   a.resize (dim_vector (b_nr, b_nc));
 
-  RT *Btx = a.fortran_vec ();
+  RT *Btx = a.rwdata ();
 
   for (octave_idx_type j = 0; j < b_nc; j++)
     {
--- a/liboctave/numeric/sparse-lu.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/sparse-lu.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -415,7 +415,7 @@
 
   // Setup the control parameters
   Matrix Control (UMFPACK_CONTROL, 1);
-  double *control = Control.fortran_vec ();
+  double *control = Control.rwdata ();
   umfpack_defaults<lu_elt_type> (control);
 
   double tmp = sparse_params::get_key ("spumoni");
@@ -466,7 +466,7 @@
 
   void *Symbolic;
   Matrix Info (1, UMFPACK_INFO);
-  double *info = Info.fortran_vec ();
+  double *info = Info.rwdata ();
   int status = umfpack_qsymbolic<lu_elt_type> (nr, nc, Ap, Ai, Ax, nullptr,
                &Symbolic, control, info);
 
@@ -552,10 +552,10 @@
               double *Rx = m_R.data ();
 
               m_P.resize (dim_vector (nr, 1));
-              octave_idx_type *p = m_P.fortran_vec ();
+              octave_idx_type *p = m_P.rwdata ();
 
               m_Q.resize (dim_vector (nc, 1));
-              octave_idx_type *q = m_Q.fortran_vec ();
+              octave_idx_type *q = m_Q.rwdata ();
 
               octave_idx_type do_recip;
               status = umfpack_get_numeric<lu_elt_type> (Ltp, Ltj, Ltx,
@@ -633,7 +633,7 @@
 
   // Setup the control parameters
   Matrix Control (UMFPACK_CONTROL, 1);
-  double *control = Control.fortran_vec ();
+  double *control = Control.rwdata ();
   umfpack_defaults<lu_elt_type> (control);
 
   double tmp = sparse_params::get_key ("spumoni");
@@ -691,7 +691,7 @@
 
   void *Symbolic;
   Matrix Info (1, UMFPACK_INFO);
-  double *info = Info.fortran_vec ();
+  double *info = Info.rwdata ();
   int status;
 
   // Null loop so that qinit is immediately deallocated when not needed
@@ -790,10 +790,10 @@
               double *Rx = m_R.data ();
 
               m_P.resize (dim_vector (nr, 1));
-              octave_idx_type *p = m_P.fortran_vec ();
+              octave_idx_type *p = m_P.rwdata ();
 
               m_Q.resize (dim_vector (nc, 1));
-              octave_idx_type *q = m_Q.fortran_vec ();
+              octave_idx_type *q = m_Q.rwdata ();
 
               octave_idx_type do_recip;
               status = umfpack_get_numeric<lu_elt_type> (Ltp, Ltj, Ltx,
--- a/liboctave/numeric/sparse-lu.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/sparse-lu.h	Mon Feb 26 23:30:33 2024 -0500
@@ -44,9 +44,7 @@
 // of the matrix type.
 
 template <typename lu_type>
-class
-OCTAVE_API
-sparse_lu
+class OCTAVE_API sparse_lu
 {
 public:
 
--- a/liboctave/numeric/sparse-qr.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/sparse-qr.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -43,15 +43,22 @@
 
 OCTAVE_BEGIN_NAMESPACE(math)
 
+#if (defined (HAVE_SPQR) && defined (HAVE_CHOLMOD))
+// Decide once at runtime whether Octave must workaround SuiteSparse library.
+static constexpr bool octave_suitesparse_ptr_size_mismatch
+  = (sizeof (octave_idx_type) != sizeof (SuiteSparse_long));
+
+static constexpr bool suitesparse_integer_long_mismatch
+  = (sizeof (suitesparse_integer) != sizeof (SuiteSparse_long));
+#endif
+
 #if defined (HAVE_CXSPARSE)
 template <typename SPARSE_T>
-class
-cxsparse_types
+class cxsparse_types
 { };
 
 template <>
-class
-cxsparse_types<SparseMatrix>
+class cxsparse_types<SparseMatrix>
 {
 public:
   typedef CXSPARSE_DNAME (s) symbolic_type;
@@ -59,8 +66,7 @@
 };
 
 template <>
-class
-cxsparse_types<SparseComplexMatrix>
+class cxsparse_types<SparseComplexMatrix>
 {
 public:
   typedef CXSPARSE_ZNAME (s) symbolic_type;
@@ -219,10 +225,10 @@
 
 #if (defined (HAVE_SPQR) && defined (HAVE_CHOLMOD))
 
-// Convert real sparse octave matrix to real sparse cholmod matrix.
+// Convert octave real sparse matrix to cholmod real sparse matrix.
 // Returns a "shallow" copy of a.
 static cholmod_sparse
-ros2rcs (const SparseMatrix& a)
+ors2crs (const SparseMatrix& a)
 {
   cholmod_sparse A;
 
@@ -240,7 +246,7 @@
   A.dtype = CHOLMOD_DOUBLE;
   A.nz = nullptr;
   A.z = nullptr;
-  if (sizeof (octave_idx_type) == sizeof (SuiteSparse_long))
+  if (! octave_suitesparse_ptr_size_mismatch)
     {
       A.p = reinterpret_cast<SuiteSparse_long *> (a.cidx ());
       A.i = reinterpret_cast<SuiteSparse_long *> (a.ridx ());
@@ -263,10 +269,10 @@
   return A;
 }
 
-// Convert complex sparse octave matrix to complex sparse cholmod matrix.
+// Convert octave complex sparse matrix to cholmod complex sparse matrix.
 // Returns a "shallow" copy of a.
 static cholmod_sparse
-cos2ccs (const SparseComplexMatrix& a)
+ocs2ccs (const SparseComplexMatrix& a)
 {
   cholmod_sparse A;
 
@@ -284,7 +290,7 @@
   A.dtype = CHOLMOD_DOUBLE;
   A.nz = nullptr;
   A.z = nullptr;
-  if (sizeof (octave_idx_type) == sizeof (SuiteSparse_long))
+  if (! octave_suitesparse_ptr_size_mismatch)
     {
       A.p = reinterpret_cast<SuiteSparse_long *> (a.cidx ());
       A.i = reinterpret_cast<SuiteSparse_long *> (a.ridx ());
@@ -308,10 +314,10 @@
   return A;
 }
 
-// Convert real dense octave matrix to complex dense cholmod matrix.
+// Convert octave real dense matrix to cholmod complex dense matrix.
 // Returns a "deep" copy of a.
 static cholmod_dense *
-rod2ccd (const MArray<double>& a, cholmod_common *cc1)
+ord2ccd (const MArray<double>& a, cholmod_common *cc1)
 {
   cholmod_dense *A
     = cholmod_l_allocate_dense (a.rows (), a.cols (), a.rows(),
@@ -326,10 +332,10 @@
   return A;
 }
 
-// Convert real dense octave matrix to real dense cholmod matrix.
+// Convert octave real dense matrix to cholmod real dense matrix.
 // Returns a "shallow" copy of a.
 static cholmod_dense
-rod2rcd (const MArray<double>& a)
+ord2crd (const MArray<double>& a)
 {
   cholmod_dense A;
 
@@ -345,10 +351,10 @@
   return A;
 }
 
-// Convert complex dense octave matrix to complex dense cholmod matrix.
+// Convert octave complex dense matrix to cholmod complex dense matrix.
 // Returns a "shallow" copy of a.
 static cholmod_dense
-cod2ccd (const ComplexMatrix& a)
+ocd2ccd (const ComplexMatrix& a)
 {
   cholmod_dense A;
 
@@ -364,10 +370,10 @@
   return A;
 }
 
-// Convert real sparse cholmod matrix to real sparse octave matrix.
+// Convert cholmod real sparse matrix to octave real sparse matrix.
 // Returns a "shallow" copy of y.
 static SparseMatrix
-rcs2ros (cholmod_sparse *y, const cholmod_common *cc1)
+crs2ors (cholmod_sparse *y, const cholmod_common *cc1)
 {
   octave_idx_type nrow = from_size_t (y->nrow);
   octave_idx_type ncol = from_size_t (y->ncol);
@@ -391,10 +397,10 @@
   return ret;
 }
 
-// Convert complex sparse cholmod matrix to complex sparse octave matrix.
+// Convert cholmod complex sparse matrix to octave complex sparse matrix.
 // Returns a "deep" copy of a.
 static SparseComplexMatrix
-ccs2cos (cholmod_sparse *a, cholmod_common *cc1)
+ccs2ocs (cholmod_sparse *a, cholmod_common *cc1)
 {
   octave_idx_type nrow = from_size_t (a->nrow);
   octave_idx_type ncol = from_size_t (a->ncol);
@@ -416,10 +422,10 @@
   return ret;
 }
 
-// Convert real sparse octave matrix to complex sparse cholmod matrix.
+// Convert octave real sparse matrix to cholmod complex sparse matrix.
 // Returns a "deep" copy of a.
 static cholmod_sparse *
-ros2ccs (const SparseMatrix& a, cholmod_common *cc)
+ors2ccs (const SparseMatrix& a, cholmod_common *cc)
 {
   cholmod_sparse *A
     = cholmod_l_allocate_sparse (a.rows (), a.cols (), a.nnz (), 0, 1, 0,
@@ -516,14 +522,14 @@
       ("ordering %d is not supported by SPQR", order);
 
   cholmod_l_start (&m_cc);
-  cholmod_sparse A = ros2rcs (a);
+  cholmod_sparse A = ors2crs (a);
 
   SuiteSparseQR<double> (order, static_cast<double> (SPQR_DEFAULT_TOL),
                          static_cast<SuiteSparse_long> (A.nrow),
                          &A, &m_R, &m_E, &m_H, &m_HPinv, &m_Htau, &m_cc);
   spqr_error_handler (&m_cc);
 
-  if (sizeof (octave_idx_type) != sizeof (SuiteSparse_long))
+  if (octave_suitesparse_ptr_size_mismatch)
     {
       delete [] reinterpret_cast<SuiteSparse_long *> (A.p);
       delete [] reinterpret_cast<SuiteSparse_long *> (A.i);
@@ -593,7 +599,7 @@
 {
 #if (defined (HAVE_SPQR) && defined (HAVE_CHOLMOD))
 
-  return rcs2ros (m_H, &m_cc);
+  return crs2ors (m_H, &m_cc);
 
 #elif defined (HAVE_CXSPARSE)
 
@@ -712,7 +718,7 @@
       ("sparse_qr: matrix dimension with negative size");
 
   cholmod_dense *QTB;  // Q' * B
-  cholmod_dense B = rod2rcd (b);
+  cholmod_dense B = ord2crd (b);
 
   QTB = SuiteSparseQR_qmult<double> (SPQR_QTX, m_H, m_Htau, m_HPinv, &B,
                                      &m_cc);
@@ -720,7 +726,7 @@
 
   // copy QTB into ret
   double *QTB_x = reinterpret_cast<double *> (QTB->x);
-  double *ret_vec = reinterpret_cast<double *> (ret.fortran_vec ());
+  double *ret_vec = reinterpret_cast<double *> (ret.rwdata ());
   for (octave_idx_type j = 0; j < b_nc; j++)
     for (octave_idx_type i = 0; i < nr; i++)
       ret_vec[j * nr + i] = QTB_x[j * b_nr + i];
@@ -744,7 +750,7 @@
   const double *bvec = b.data ();
 
   Matrix ret (b_nr, b_nc);
-  double *vec = ret.fortran_vec ();
+  double *vec = ret.rwdata ();
 
   if (nr < 0 || nc < 0 || nr != b_nr)
     (*current_liboctave_error_handler) ("matrix dimension mismatch");
@@ -755,7 +761,7 @@
     {
       OCTAVE_LOCAL_BUFFER (double, buf, S->m2);
 
-      for (volatile octave_idx_type j = 0, idx = 0;
+      for (octave_idx_type j = 0, idx = 0;
            j < b_nc;
            j++, idx += b_nr)
         {
@@ -764,11 +770,11 @@
           for (octave_idx_type i = nr; i < S->m2; i++)
             buf[i] = 0.;
 
-          volatile octave_idx_type nm = (nr < nc ? nr : nc);
+          octave_idx_type nm = (nr < nc ? nr : nc);
 
           CXSPARSE_DNAME (_ipvec) (S->pinv, bvec + idx, buf, b_nr);
 
-          for (volatile octave_idx_type i = 0; i < nm; i++)
+          for (octave_idx_type i = 0; i < nm; i++)
             {
               octave_quit ();
 
@@ -819,7 +825,7 @@
   spqr_error_handler (&m_cc);
 
   double *q_x = reinterpret_cast<double *> (q->x);
-  double *ret_vec = const_cast<double *> (ret.fortran_vec ());
+  double *ret_vec = const_cast<double *> (ret.rwdata ());
   for (octave_idx_type j = 0; j < nc; j++)
     for (octave_idx_type i = 0; i < nrows; i++)
       ret_vec[j * nrows + i] = q_x[j * nrows + i];
@@ -838,7 +844,7 @@
   octave_idx_type nc = N->L->n;
   octave_idx_type nr = nrows;
   Matrix ret (nr, nr);
-  double *ret_vec = ret.fortran_vec ();
+  double *ret_vec = ret.rwdata ();
 
   if (nr < 0 || nc < 0)
     (*current_liboctave_error_handler) ("matrix dimension mismatch");
@@ -854,7 +860,7 @@
 
       OCTAVE_LOCAL_BUFFER (double, buf, S->m2);
 
-      for (volatile octave_idx_type j = 0, idx = 0; j < nr; j++, idx += nr)
+      for (octave_idx_type j = 0, idx = 0; j < nr; j++, idx += nr)
         {
           octave_quit ();
 
@@ -862,11 +868,11 @@
           for (octave_idx_type i = nr; i < S->m2; i++)
             buf[i] = 0.;
 
-          volatile octave_idx_type nm = (nr < nc ? nr : nc);
+          octave_idx_type nm = (nr < nc ? nr : nc);
 
           CXSPARSE_DNAME (_ipvec) (S->pinv, bvec, buf, nr);
 
-          for (volatile octave_idx_type i = 0; i < nm; i++)
+          for (octave_idx_type i = 0; i < nm; i++)
             {
               octave_quit ();
 
@@ -913,12 +919,11 @@
     (*current_liboctave_error_handler) ("matrix dimension mismatch");
 
   cholmod_dense *QTB;  // Q' * B
-  cholmod_dense B = rod2rcd (b);
+  cholmod_dense B = ord2crd (b);
 
   // FIXME: Process b column by column as in the CXSPARSE version below.
   // This avoids a large dense matrix Q' * B in memory.
-  QTB = SuiteSparseQR_qmult<double> (SPQR_QTX, m_H, m_Htau, m_HPinv, &B,
-                                     &m_cc);
+  QTB = SuiteSparseQR_qmult<double> (SPQR_QTX, m_H, m_Htau, m_HPinv, &B, &m_cc);
 
   spqr_error_handler (&m_cc);
 
@@ -930,7 +935,7 @@
   R2.x = reinterpret_cast<double *> (m_R->x);
   suitesparse_integer *R2_p;
   suitesparse_integer *R2_i;
-  if (sizeof (suitesparse_integer) == sizeof (SuiteSparse_long))
+  if (! suitesparse_integer_long_mismatch)
     {
       R2.p = reinterpret_cast<suitesparse_integer *> (m_R->p);
       R2.i = reinterpret_cast<suitesparse_integer *> (m_R->i);
@@ -950,9 +955,9 @@
       R2.i = R2_i;
     }
   R2.nz = -1;
-  double *x_vec = const_cast<double *> (x.fortran_vec ());
+  double *x_vec = const_cast<double *> (x.rwdata ());
   suitesparse_integer *E;
-  if (sizeof (suitesparse_integer) != sizeof (SuiteSparse_long))
+  if (suitesparse_integer_long_mismatch)
     {
       E = new suitesparse_integer [ncols];
       for (octave_idx_type i = 0; i < ncols; i++)
@@ -960,7 +965,7 @@
     }
   else
     E = reinterpret_cast<suitesparse_integer *> (m_E);
-  for (volatile octave_idx_type j = 0; j < b_nc; j++)
+  for (octave_idx_type j = 0; j < b_nc; j++)
     {
       // fill x(:,j)
       // solve (m_R\(Q'*B(:,j)) and store result in QTB(:,j)
@@ -972,7 +977,7 @@
        &x_vec[j * ncols], ncols);
     }
 
-  if (sizeof (suitesparse_integer) != sizeof (SuiteSparse_long))
+  if (suitesparse_integer_long_mismatch)
     {
       delete [] R2_p;
       delete [] R2_i;
@@ -995,11 +1000,11 @@
   const double *bvec = b.data ();
 
   Matrix x (nc, b_nc);
-  double *vec = x.fortran_vec ();
+  double *vec = x.rwdata ();
 
   OCTAVE_LOCAL_BUFFER (double, buf, S->m2);
 
-  for (volatile octave_idx_type i = 0, idx = 0, bidx = 0; i < b_nc;
+  for (octave_idx_type i = 0, idx = 0, bidx = 0; i < b_nc;
        i++, idx+=nc, bidx+=b_nr)
     {
       octave_quit ();
@@ -1009,7 +1014,7 @@
 
       CXSPARSE_DNAME (_ipvec) (S->pinv, bvec + bidx, buf, nr);
 
-      for (volatile octave_idx_type j = 0; j < nc; j++)
+      for (octave_idx_type j = 0; j < nc; j++)
         {
           octave_quit ();
 
@@ -1054,13 +1059,13 @@
   const double *bvec = b.data ();
 
   Matrix x (nc, b_nc);
-  double *vec = x.fortran_vec ();
-
-  volatile octave_idx_type nbuf = (nc > S->m2 ? nc : S->m2);
+  double *vec = x.rwdata ();
+
+  octave_idx_type nbuf = (nc > S->m2 ? nc : S->m2);
 
   OCTAVE_LOCAL_BUFFER (double, buf, nbuf);
 
-  for (volatile octave_idx_type i = 0, idx = 0, bidx = 0; i < b_nc;
+  for (octave_idx_type i = 0, idx = 0, bidx = 0; i < b_nc;
        i++, idx+=nc, bidx+=b_nr)
     {
       octave_quit ();
@@ -1071,7 +1076,7 @@
       CXSPARSE_DNAME (_pvec) (S->q, bvec + bidx, buf, nr);
       CXSPARSE_DNAME (_utsolve) (N->U, buf);
 
-      for (volatile octave_idx_type j = nr-1; j >= 0; j--)
+      for (octave_idx_type j = nr-1; j >= 0; j--)
         {
           octave_quit ();
 
@@ -1112,13 +1117,13 @@
   SparseMatrix x (nc, b_nc, b.nnz ());
   x.xcidx (0) = 0;
 
-  volatile octave_idx_type x_nz = b.nnz ();
-  volatile octave_idx_type ii = 0;
+  octave_idx_type x_nz = b.nnz ();
+  octave_idx_type ii = 0;
 
   OCTAVE_LOCAL_BUFFER (double, Xx, (b_nr > nc ? b_nr : nc));
   OCTAVE_LOCAL_BUFFER (double, buf, S->m2);
 
-  for (volatile octave_idx_type i = 0, idx = 0; i < b_nc; i++, idx+=nc)
+  for (octave_idx_type i = 0, idx = 0; i < b_nc; i++, idx+=nc)
     {
       octave_quit ();
 
@@ -1130,7 +1135,7 @@
 
       CXSPARSE_DNAME (_ipvec) (S->pinv, Xx, buf, nr);
 
-      for (volatile octave_idx_type j = 0; j < nc; j++)
+      for (octave_idx_type j = 0; j < nc; j++)
         {
           octave_quit ();
 
@@ -1198,14 +1203,14 @@
   SparseMatrix x (nc, b_nc, b.nnz ());
   x.xcidx (0) = 0;
 
-  volatile octave_idx_type x_nz = b.nnz ();
-  volatile octave_idx_type ii = 0;
-  volatile octave_idx_type nbuf = (nc > S->m2 ? nc : S->m2);
+  octave_idx_type x_nz = b.nnz ();
+  octave_idx_type ii = 0;
+  octave_idx_type nbuf = (nc > S->m2 ? nc : S->m2);
 
   OCTAVE_LOCAL_BUFFER (double, Xx, (b_nr > nc ? b_nr : nc));
   OCTAVE_LOCAL_BUFFER (double, buf, nbuf);
 
-  for (volatile octave_idx_type i = 0, idx = 0; i < b_nc; i++, idx+=nc)
+  for (octave_idx_type i = 0, idx = 0; i < b_nc; i++, idx+=nc)
     {
       octave_quit ();
 
@@ -1218,7 +1223,7 @@
       CXSPARSE_DNAME (_pvec) (S->q, Xx, buf, nr);
       CXSPARSE_DNAME (_utsolve) (N->U, buf);
 
-      for (volatile octave_idx_type j = nr-1; j >= 0; j--)
+      for (octave_idx_type j = nr-1; j >= 0; j--)
         {
           octave_quit ();
 
@@ -1282,13 +1287,13 @@
   octave_idx_type b_nr = b.rows ();
 
   ComplexMatrix x (nc, b_nc);
-  Complex *vec = x.fortran_vec ();
+  Complex *vec = x.rwdata ();
 
   OCTAVE_LOCAL_BUFFER (double, Xx, (b_nr > nc ? b_nr : nc));
   OCTAVE_LOCAL_BUFFER (double, Xz, (b_nr > nc ? b_nr : nc));
   OCTAVE_LOCAL_BUFFER (double, buf, S->m2);
 
-  for (volatile octave_idx_type i = 0, idx = 0; i < b_nc; i++, idx+=nc)
+  for (octave_idx_type i = 0, idx = 0; i < b_nc; i++, idx+=nc)
     {
       octave_quit ();
 
@@ -1304,7 +1309,7 @@
 
       CXSPARSE_DNAME (_ipvec) (S->pinv, Xx, buf, nr);
 
-      for (volatile octave_idx_type j = 0; j < nc; j++)
+      for (octave_idx_type j = 0; j < nc; j++)
         {
           octave_quit ();
 
@@ -1319,7 +1324,7 @@
 
       CXSPARSE_DNAME (_ipvec) (S->pinv, Xz, buf, nr);
 
-      for (volatile octave_idx_type j = 0; j < nc; j++)
+      for (octave_idx_type j = 0; j < nc; j++)
         {
           octave_quit ();
 
@@ -1366,15 +1371,15 @@
   octave_idx_type b_nr = b.rows ();
 
   ComplexMatrix x (nc, b_nc);
-  Complex *vec = x.fortran_vec ();
-
-  volatile octave_idx_type nbuf = (nc > S->m2 ? nc : S->m2);
+  Complex *vec = x.rwdata ();
+
+  octave_idx_type nbuf = (nc > S->m2 ? nc : S->m2);
 
   OCTAVE_LOCAL_BUFFER (double, Xx, (b_nr > nc ? b_nr : nc));
   OCTAVE_LOCAL_BUFFER (double, Xz, (b_nr > nc ? b_nr : nc));
   OCTAVE_LOCAL_BUFFER (double, buf, nbuf);
 
-  for (volatile octave_idx_type i = 0, idx = 0; i < b_nc; i++, idx+=nc)
+  for (octave_idx_type i = 0, idx = 0; i < b_nc; i++, idx+=nc)
     {
       octave_quit ();
 
@@ -1391,7 +1396,7 @@
       CXSPARSE_DNAME (_pvec) (S->q, Xx, buf, nr);
       CXSPARSE_DNAME (_utsolve) (N->U, buf);
 
-      for (volatile octave_idx_type j = nr-1; j >= 0; j--)
+      for (octave_idx_type j = nr-1; j >= 0; j--)
         {
           octave_quit ();
 
@@ -1406,7 +1411,7 @@
       CXSPARSE_DNAME (_pvec) (S->q, Xz, buf, nr);
       CXSPARSE_DNAME (_utsolve) (N->U, buf);
 
-      for (volatile octave_idx_type j = nr-1; j >= 0; j--)
+      for (octave_idx_type j = nr-1; j >= 0; j--)
         {
           octave_quit ();
 
@@ -1454,7 +1459,7 @@
       ("ordering %d is not supported by SPQR", order);
 
   cholmod_l_start (&m_cc);
-  cholmod_sparse A = cos2ccs (a);
+  cholmod_sparse A = ocs2ccs (a);
 
   SuiteSparseQR<Complex> (order, static_cast<double> (SPQR_DEFAULT_TOL),
                           static_cast<SuiteSparse_long> (A.nrow),
@@ -1462,7 +1467,7 @@
                           &m_HPinv, &m_Htau, &m_cc);
   spqr_error_handler (&m_cc);
 
-  if (sizeof (octave_idx_type) != sizeof (SuiteSparse_long))
+  if (octave_suitesparse_ptr_size_mismatch)
     {
       delete [] reinterpret_cast<SuiteSparse_long *> (A.p);
       delete [] reinterpret_cast<SuiteSparse_long *> (A.i);
@@ -1651,7 +1656,7 @@
       ("matrix dimension with negative size");
 
   cholmod_dense *QTB;  // Q' * B
-  cholmod_dense B = cod2ccd (b);
+  cholmod_dense B = ocd2ccd (b);
 
   QTB = SuiteSparseQR_qmult<Complex> (SPQR_QTX, m_H, m_Htau, m_HPinv, &B,
                                       &m_cc);
@@ -1659,7 +1664,7 @@
 
   // copy QTB into ret
   Complex *QTB_x = reinterpret_cast<Complex *> (QTB->x);
-  Complex *ret_vec = reinterpret_cast<Complex *> (ret.fortran_vec ());
+  Complex *ret_vec = reinterpret_cast<Complex *> (ret.rwdata ());
   for (octave_idx_type j = 0; j < b_nc; j++)
     for (octave_idx_type i = 0; i < nr; i++)
       ret_vec[j * nr + i] = QTB_x[j * b_nr + i];
@@ -1681,7 +1686,7 @@
   const cs_complex_t *bvec
     = reinterpret_cast<const cs_complex_t *> (b.data ());
   ComplexMatrix ret (b_nr, b_nc);
-  Complex *vec = ret.fortran_vec ();
+  Complex *vec = ret.rwdata ();
 
   if (nr < 0 || nc < 0 || nr != b_nr)
     (*current_liboctave_error_handler) ("matrix dimension mismatch");
@@ -1692,19 +1697,19 @@
     {
       OCTAVE_LOCAL_BUFFER (Complex, buf, S->m2);
 
-      for (volatile octave_idx_type j = 0, idx = 0;
+      for (octave_idx_type j = 0, idx = 0;
            j < b_nc;
            j++, idx += b_nr)
         {
           octave_quit ();
 
-          volatile octave_idx_type nm = (nr < nc ? nr : nc);
+          octave_idx_type nm = (nr < nc ? nr : nc);
 
           CXSPARSE_ZNAME (_ipvec) (S->pinv, bvec + idx,
                                    reinterpret_cast<cs_complex_t *> (buf),
                                    b_nr);
 
-          for (volatile octave_idx_type i = 0; i < nm; i++)
+          for (octave_idx_type i = 0; i < nm; i++)
             {
               octave_quit ();
 
@@ -1757,7 +1762,7 @@
   spqr_error_handler (&m_cc);
 
   Complex *q_x = reinterpret_cast<Complex *> (q->x);
-  Complex *ret_vec = const_cast<Complex *> (ret.fortran_vec ());
+  Complex *ret_vec = const_cast<Complex *> (ret.rwdata ());
 
   for (octave_idx_type j = 0; j < nc; j++)
     for (octave_idx_type i = 0; i < nrows; i++)
@@ -1777,7 +1782,7 @@
   octave_idx_type nc = N->L->n;
   octave_idx_type nr = nrows;
   ComplexMatrix ret (nr, nr);
-  Complex *vec = ret.fortran_vec ();
+  Complex *vec = ret.rwdata ();
 
   if (nr < 0 || nc < 0)
     (*current_liboctave_error_handler) ("matrix dimension mismatch");
@@ -1793,19 +1798,19 @@
 
       OCTAVE_LOCAL_BUFFER (Complex, buf, S->m2);
 
-      for (volatile octave_idx_type j = 0, idx = 0; j < nr; j++, idx+=nr)
+      for (octave_idx_type j = 0, idx = 0; j < nr; j++, idx+=nr)
         {
           octave_quit ();
 
           bvec[j] = 1.0;
 
-          volatile octave_idx_type nm = (nr < nc ? nr : nc);
+          octave_idx_type nm = (nr < nc ? nr : nc);
 
           CXSPARSE_ZNAME (_ipvec) (S->pinv, bvec,
                                    reinterpret_cast<cs_complex_t *> (buf),
                                    nr);
 
-          for (volatile octave_idx_type i = 0; i < nm; i++)
+          for (octave_idx_type i = 0; i < nm; i++)
             {
               octave_quit ();
 
@@ -1851,14 +1856,14 @@
   SparseComplexMatrix x (nc, b_nc, b.nnz ());
   x.xcidx (0) = 0;
 
-  volatile octave_idx_type x_nz = b.nnz ();
-  volatile octave_idx_type ii = 0;
+  octave_idx_type x_nz = b.nnz ();
+  octave_idx_type ii = 0;
 
   OCTAVE_LOCAL_BUFFER (double, Xx, (b_nr > nc ? b_nr : nc));
   OCTAVE_LOCAL_BUFFER (double, Xz, (b_nr > nc ? b_nr : nc));
   OCTAVE_LOCAL_BUFFER (double, buf, S->m2);
 
-  for (volatile octave_idx_type i = 0, idx = 0; i < b_nc; i++, idx+=nc)
+  for (octave_idx_type i = 0, idx = 0; i < b_nc; i++, idx+=nc)
     {
       octave_quit ();
 
@@ -1874,7 +1879,7 @@
 
       CXSPARSE_DNAME (_ipvec) (S->pinv, Xx, buf, nr);
 
-      for (volatile octave_idx_type j = 0; j < nc; j++)
+      for (octave_idx_type j = 0; j < nc; j++)
         {
           octave_quit ();
 
@@ -1889,7 +1894,7 @@
 
       CXSPARSE_DNAME (_ipvec) (S->pinv, Xz, buf, nr);
 
-      for (volatile octave_idx_type j = 0; j < nc; j++)
+      for (octave_idx_type j = 0; j < nc; j++)
         {
           octave_quit ();
 
@@ -1958,15 +1963,15 @@
   SparseComplexMatrix x (nc, b_nc, b.nnz ());
   x.xcidx (0) = 0;
 
-  volatile octave_idx_type x_nz = b.nnz ();
-  volatile octave_idx_type ii = 0;
-  volatile octave_idx_type nbuf = (nc > S->m2 ? nc : S->m2);
+  octave_idx_type x_nz = b.nnz ();
+  octave_idx_type ii = 0;
+  octave_idx_type nbuf = (nc > S->m2 ? nc : S->m2);
 
   OCTAVE_LOCAL_BUFFER (double, Xx, (b_nr > nc ? b_nr : nc));
   OCTAVE_LOCAL_BUFFER (double, Xz, (b_nr > nc ? b_nr : nc));
   OCTAVE_LOCAL_BUFFER (double, buf, nbuf);
 
-  for (volatile octave_idx_type i = 0, idx = 0; i < b_nc; i++, idx+=nc)
+  for (octave_idx_type i = 0, idx = 0; i < b_nc; i++, idx+=nc)
     {
       octave_quit ();
 
@@ -1983,7 +1988,7 @@
       CXSPARSE_DNAME (_pvec) (S->q, Xx, buf, nr);
       CXSPARSE_DNAME (_utsolve) (N->U, buf);
 
-      for (volatile octave_idx_type j = nr-1; j >= 0; j--)
+      for (octave_idx_type j = nr-1; j >= 0; j--)
         {
           octave_quit ();
 
@@ -1998,7 +2003,7 @@
       CXSPARSE_DNAME (_pvec) (S->q, Xz, buf, nr);
       CXSPARSE_DNAME (_utsolve) (N->U, buf);
 
-      for (volatile octave_idx_type j = nr-1; j >= 0; j--)
+      for (octave_idx_type j = nr-1; j >= 0; j--)
         {
           octave_quit ();
 
@@ -2063,12 +2068,12 @@
   octave_idx_type b_nr = b.rows ();
 
   ComplexMatrix x (nc, b_nc);
-  cs_complex_t *vec = reinterpret_cast<cs_complex_t *> (x.fortran_vec ());
+  cs_complex_t *vec = reinterpret_cast<cs_complex_t *> (x.rwdata ());
 
   OCTAVE_LOCAL_BUFFER (cs_complex_t, buf, S->m2);
   OCTAVE_LOCAL_BUFFER (Complex, Xx, b_nr);
 
-  for (volatile octave_idx_type i = 0, idx = 0; i < b_nc; i++, idx+=nc)
+  for (octave_idx_type i = 0, idx = 0; i < b_nc; i++, idx+=nc)
     {
       octave_quit ();
 
@@ -2082,7 +2087,7 @@
                                reinterpret_cast<cs_complex_t *> (Xx),
                                buf, nr);
 
-      for (volatile octave_idx_type j = 0; j < nc; j++)
+      for (octave_idx_type j = 0; j < nc; j++)
         {
           octave_quit ();
 
@@ -2127,9 +2132,9 @@
   octave_idx_type b_nr = b.rows ();
 
   ComplexMatrix x (nc, b_nc);
-  cs_complex_t *vec = reinterpret_cast<cs_complex_t *> (x.fortran_vec ());
-
-  volatile octave_idx_type nbuf = (nc > S->m2 ? nc : S->m2);
+  cs_complex_t *vec = reinterpret_cast<cs_complex_t *> (x.rwdata ());
+
+  octave_idx_type nbuf = (nc > S->m2 ? nc : S->m2);
 
   OCTAVE_LOCAL_BUFFER (cs_complex_t, buf, nbuf);
   OCTAVE_LOCAL_BUFFER (Complex, Xx, b_nr);
@@ -2138,7 +2143,7 @@
   for (octave_idx_type i = 0; i < nr; i++)
     B[i] = N->B[i];
 
-  for (volatile octave_idx_type i = 0, idx = 0; i < b_nc; i++, idx+=nc)
+  for (octave_idx_type i = 0, idx = 0; i < b_nc; i++, idx+=nc)
     {
       octave_quit ();
 
@@ -2152,7 +2157,7 @@
                               buf, nr);
       CXSPARSE_ZNAME (_utsolve) (N->U, buf);
 
-      for (volatile octave_idx_type j = nr-1; j >= 0; j--)
+      for (octave_idx_type j = nr-1; j >= 0; j--)
         {
           octave_quit ();
 
@@ -2195,13 +2200,13 @@
   SparseComplexMatrix x (nc, b_nc, b.nnz ());
   x.xcidx (0) = 0;
 
-  volatile octave_idx_type x_nz = b.nnz ();
-  volatile octave_idx_type ii = 0;
+  octave_idx_type x_nz = b.nnz ();
+  octave_idx_type ii = 0;
 
   OCTAVE_LOCAL_BUFFER (Complex, Xx, (b_nr > nc ? b_nr : nc));
   OCTAVE_LOCAL_BUFFER (cs_complex_t, buf, S->m2);
 
-  for (volatile octave_idx_type i = 0, idx = 0; i < b_nc; i++, idx+=nc)
+  for (octave_idx_type i = 0, idx = 0; i < b_nc; i++, idx+=nc)
     {
       octave_quit ();
 
@@ -2215,7 +2220,7 @@
                                reinterpret_cast<cs_complex_t *> (Xx),
                                buf, nr);
 
-      for (volatile octave_idx_type j = 0; j < nc; j++)
+      for (octave_idx_type j = 0; j < nc; j++)
         {
           octave_quit ();
 
@@ -2288,9 +2293,9 @@
   SparseComplexMatrix x (nc, b_nc, b.nnz ());
   x.xcidx (0) = 0;
 
-  volatile octave_idx_type x_nz = b.nnz ();
-  volatile octave_idx_type ii = 0;
-  volatile octave_idx_type nbuf = (nc > S->m2 ? nc : S->m2);
+  octave_idx_type x_nz = b.nnz ();
+  octave_idx_type ii = 0;
+  octave_idx_type nbuf = (nc > S->m2 ? nc : S->m2);
 
   OCTAVE_LOCAL_BUFFER (Complex, Xx, (b_nr > nc ? b_nr : nc));
   OCTAVE_LOCAL_BUFFER (cs_complex_t, buf, nbuf);
@@ -2299,7 +2304,7 @@
   for (octave_idx_type i = 0; i < nr; i++)
     B[i] = N->B[i];
 
-  for (volatile octave_idx_type i = 0, idx = 0; i < b_nc; i++, idx+=nc)
+  for (octave_idx_type i = 0, idx = 0; i < b_nc; i++, idx+=nc)
     {
       octave_quit ();
 
@@ -2314,7 +2319,7 @@
                               buf, nr);
       CXSPARSE_ZNAME (_utsolve) (N->U, buf);
 
-      for (volatile octave_idx_type j = nr-1; j >= 0; j--)
+      for (octave_idx_type j = nr-1; j >= 0; j--)
         {
           octave_quit ();
 
@@ -2385,11 +2390,11 @@
 
   ComplexMatrix x (nc, b_nc);
   cs_complex_t *vec = reinterpret_cast<cs_complex_t *>
-                      (x.fortran_vec ());
+                      (x.rwdata ());
 
   OCTAVE_LOCAL_BUFFER (cs_complex_t, buf, S->m2);
 
-  for (volatile octave_idx_type i = 0, idx = 0, bidx = 0; i < b_nc;
+  for (octave_idx_type i = 0, idx = 0, bidx = 0; i < b_nc;
        i++, idx+=nc, bidx+=b_nr)
     {
       octave_quit ();
@@ -2399,7 +2404,7 @@
 
       CXSPARSE_ZNAME (_ipvec) (S->pinv, bvec + bidx, buf, nr);
 
-      for (volatile octave_idx_type j = 0; j < nc; j++)
+      for (octave_idx_type j = 0; j < nc; j++)
         {
           octave_quit ();
 
@@ -2447,9 +2452,9 @@
                              (b.data ());
 
   ComplexMatrix x (nc, b_nc);
-  cs_complex_t *vec = reinterpret_cast<cs_complex_t *> (x.fortran_vec ());
-
-  volatile octave_idx_type nbuf = (nc > S->m2 ? nc : S->m2);
+  cs_complex_t *vec = reinterpret_cast<cs_complex_t *> (x.rwdata ());
+
+  octave_idx_type nbuf = (nc > S->m2 ? nc : S->m2);
 
   OCTAVE_LOCAL_BUFFER (cs_complex_t, buf, nbuf);
   OCTAVE_LOCAL_BUFFER (double, B, nr);
@@ -2457,7 +2462,7 @@
   for (octave_idx_type i = 0; i < nr; i++)
     B[i] = N->B[i];
 
-  for (volatile octave_idx_type i = 0, idx = 0, bidx = 0; i < b_nc;
+  for (octave_idx_type i = 0, idx = 0, bidx = 0; i < b_nc;
        i++, idx+=nc, bidx+=b_nr)
     {
       octave_quit ();
@@ -2468,7 +2473,7 @@
       CXSPARSE_ZNAME (_pvec) (S->q, bvec + bidx, buf, nr);
       CXSPARSE_ZNAME (_utsolve) (N->U, buf);
 
-      for (volatile octave_idx_type j = nr-1; j >= 0; j--)
+      for (octave_idx_type j = nr-1; j >= 0; j--)
         {
           octave_quit ();
 
@@ -2511,13 +2516,13 @@
   SparseComplexMatrix x (nc, b_nc, b.nnz ());
   x.xcidx (0) = 0;
 
-  volatile octave_idx_type x_nz = b.nnz ();
-  volatile octave_idx_type ii = 0;
+  octave_idx_type x_nz = b.nnz ();
+  octave_idx_type ii = 0;
 
   OCTAVE_LOCAL_BUFFER (Complex, Xx, (b_nr > nc ? b_nr : nc));
   OCTAVE_LOCAL_BUFFER (cs_complex_t, buf, S->m2);
 
-  for (volatile octave_idx_type i = 0, idx = 0; i < b_nc; i++, idx+=nc)
+  for (octave_idx_type i = 0, idx = 0; i < b_nc; i++, idx+=nc)
     {
       octave_quit ();
 
@@ -2531,7 +2536,7 @@
                                reinterpret_cast<cs_complex_t *> (Xx),
                                buf, nr);
 
-      for (volatile octave_idx_type j = 0; j < nc; j++)
+      for (octave_idx_type j = 0; j < nc; j++)
         {
           octave_quit ();
 
@@ -2604,9 +2609,9 @@
   SparseComplexMatrix x (nc, b_nc, b.nnz ());
   x.xcidx (0) = 0;
 
-  volatile octave_idx_type x_nz = b.nnz ();
-  volatile octave_idx_type ii = 0;
-  volatile octave_idx_type nbuf = (nc > S->m2 ? nc : S->m2);
+  octave_idx_type x_nz = b.nnz ();
+  octave_idx_type ii = 0;
+  octave_idx_type nbuf = (nc > S->m2 ? nc : S->m2);
 
   OCTAVE_LOCAL_BUFFER (Complex, Xx, (b_nr > nc ? b_nr : nc));
   OCTAVE_LOCAL_BUFFER (cs_complex_t, buf, nbuf);
@@ -2615,7 +2620,7 @@
   for (octave_idx_type i = 0; i < nr; i++)
     B[i] = N->B[i];
 
-  for (volatile octave_idx_type i = 0, idx = 0; i < b_nc; i++, idx+=nc)
+  for (octave_idx_type i = 0, idx = 0; i < b_nc; i++, idx+=nc)
     {
       octave_quit ();
 
@@ -2629,7 +2634,7 @@
                               buf, nr);
       CXSPARSE_ZNAME (_utsolve) (N->U, buf);
 
-      for (volatile octave_idx_type j = nr-1; j >= 0; j--)
+      for (octave_idx_type j = nr-1; j >= 0; j--)
         {
           octave_quit ();
 
@@ -2774,19 +2779,19 @@
   cholmod_common cc;
 
   cholmod_l_start (&cc);
-  cholmod_sparse A = ros2rcs (a);
-  cholmod_dense B = rod2rcd (b);
+  cholmod_sparse A = ors2crs (a);
+  cholmod_dense B = ord2crd (b);
   cholmod_dense *X;
 
   X = SuiteSparseQR_min2norm<double> (order, SPQR_DEFAULT_TOL, &A, &B, &cc);
   spqr_error_handler (&cc);
 
-  double *xdata = x.fortran_vec ();
-  for (volatile octave_idx_type i = 0; i < nc * b_nc; i++)
+  double *xdata = x.rwdata ();
+  for (octave_idx_type i = 0; i < nc * b_nc; i++)
     xdata[i] = reinterpret_cast<double *> (X->x)[i];
   info = 0;
 
-  if (sizeof (octave_idx_type) != sizeof (SuiteSparse_long))
+  if (octave_suitesparse_ptr_size_mismatch)
     {
       delete [] reinterpret_cast<SuiteSparse_long *> (A.p);
       delete [] reinterpret_cast<SuiteSparse_long *> (A.i);
@@ -2809,17 +2814,17 @@
   cholmod_common cc;
 
   cholmod_l_start (&cc);
-  cholmod_sparse A = ros2rcs (a);
-  cholmod_sparse B = ros2rcs (b);
+  cholmod_sparse A = ors2crs (a);
+  cholmod_sparse B = ors2crs (b);
   cholmod_sparse *X;
 
   X = SuiteSparseQR_min2norm<double> (order, SPQR_DEFAULT_TOL, &A, &B, &cc);
   spqr_error_handler (&cc);
 
-  x = rcs2ros (X, &cc);
+  x = crs2ors (X, &cc);
   info = 0;
 
-  if (sizeof (octave_idx_type) != sizeof (SuiteSparse_long))
+  if (octave_suitesparse_ptr_size_mismatch)
     {
       delete [] reinterpret_cast<SuiteSparse_long *> (A.p);
       delete [] reinterpret_cast<SuiteSparse_long *> (A.i);
@@ -2846,15 +2851,15 @@
   cholmod_common cc;
 
   cholmod_l_start (&cc);
-  cholmod_sparse *A = ros2ccs (a, &cc);
-  cholmod_dense B = cod2ccd (b);
+  cholmod_sparse *A = ors2ccs (a, &cc);
+  cholmod_dense B = ocd2ccd (b);
   cholmod_dense *X;
 
   X = SuiteSparseQR_min2norm<Complex> (order, SPQR_DEFAULT_TOL, A, &B, &cc);
   spqr_error_handler (&cc);
 
-  Complex *xdata = x.fortran_vec ();
-  for (volatile octave_idx_type i = 0; i < nc * b_nc; i++)
+  Complex *xdata = x.rwdata ();
+  for (octave_idx_type i = 0; i < nc * b_nc; i++)
     xdata[i] = reinterpret_cast<Complex *> (X->x)[i];
   info = 0;
 
@@ -2876,17 +2881,17 @@
   cholmod_common cc;
 
   cholmod_l_start (&cc);
-  cholmod_sparse *A = ros2ccs (a, &cc);
-  cholmod_sparse B = cos2ccs (b);
+  cholmod_sparse *A = ors2ccs (a, &cc);
+  cholmod_sparse B = ocs2ccs (b);
   cholmod_sparse *X;
 
   X = SuiteSparseQR_min2norm<Complex> (order, SPQR_DEFAULT_TOL, A, &B, &cc);
   spqr_error_handler (&cc);
 
-  SparseComplexMatrix ret = ccs2cos (X, &cc);
+  SparseComplexMatrix ret = ccs2ocs (X, &cc);
   info = 0;
 
-  if (sizeof (octave_idx_type) != sizeof (SuiteSparse_long))
+  if (octave_suitesparse_ptr_size_mismatch)
     {
       delete [] reinterpret_cast<SuiteSparse_long *> (B.p);
       delete [] reinterpret_cast<SuiteSparse_long *> (B.i);
@@ -2912,19 +2917,19 @@
   cholmod_common cc;
 
   cholmod_l_start (&cc);
-  cholmod_sparse A = cos2ccs (a);
-  cholmod_dense B = cod2ccd (b);
+  cholmod_sparse A = ocs2ccs (a);
+  cholmod_dense B = ocd2ccd (b);
   cholmod_dense *X;
 
   X = SuiteSparseQR_min2norm<Complex> (order, SPQR_DEFAULT_TOL, &A, &B, &cc);
   spqr_error_handler (&cc);
 
-  Complex *xdata = x.fortran_vec ();
-  for (volatile octave_idx_type i = 0; i < nc * b_nc; i++)
+  Complex *xdata = x.rwdata ();
+  for (octave_idx_type i = 0; i < nc * b_nc; i++)
     xdata[i] = reinterpret_cast<Complex *> (X->x)[i];
   info = 0;
 
-  if (sizeof (octave_idx_type) != sizeof (SuiteSparse_long))
+  if (octave_suitesparse_ptr_size_mismatch)
     {
       delete [] reinterpret_cast<SuiteSparse_long *> (A.p);
       delete [] reinterpret_cast<SuiteSparse_long *> (A.i);
@@ -2937,6 +2942,8 @@
 
 // FIXME: 2024/01/07: This template specialization does not appear to be
 // reachable from current Octave code calling qrsolve from sparse-dmsolve.cc.
+// It remains because liboctave may be used by other C++ code besides the
+// Octave interpreter.
 template <>
 template <>
 OCTAVE_API ComplexMatrix
@@ -2951,19 +2958,19 @@
   cholmod_common cc;
 
   cholmod_l_start (&cc);
-  cholmod_sparse A = cos2ccs (a);
-  cholmod_dense *B = rod2ccd (b, &cc);
+  cholmod_sparse A = ocs2ccs (a);
+  cholmod_dense *B = ord2ccd (b, &cc);
   cholmod_dense *X;
 
   X = SuiteSparseQR_min2norm<Complex> (order, SPQR_DEFAULT_TOL, &A, B, &cc);
   spqr_error_handler (&cc);
 
-  Complex *xdata = x.fortran_vec ();
-  for (volatile octave_idx_type i = 0; i < nc * b_nc; i++)
+  Complex *xdata = x.rwdata ();
+  for (octave_idx_type i = 0; i < nc * b_nc; i++)
     xdata[i] = reinterpret_cast<Complex *> (X->x)[i];
   info = 0;
 
-  if (sizeof (octave_idx_type) != sizeof (SuiteSparse_long))
+  if (octave_suitesparse_ptr_size_mismatch)
     {
       delete [] reinterpret_cast<SuiteSparse_long *> (A.p);
       delete [] reinterpret_cast<SuiteSparse_long *> (A.i);
@@ -2986,17 +2993,17 @@
   cholmod_common cc;
 
   cholmod_l_start (&cc);
-  cholmod_sparse A = cos2ccs (a);
-  cholmod_sparse B = cos2ccs (b);
+  cholmod_sparse A = ocs2ccs (a);
+  cholmod_sparse B = ocs2ccs (b);
   cholmod_sparse *X;
 
   X = SuiteSparseQR_min2norm<Complex> (order, SPQR_DEFAULT_TOL, &A, &B, &cc);
   spqr_error_handler (&cc);
 
-  SparseComplexMatrix ret = ccs2cos (X, &cc);
+  SparseComplexMatrix ret = ccs2ocs (X, &cc);
   info = 0;
 
-  if (sizeof (octave_idx_type) != sizeof (SuiteSparse_long))
+  if (octave_suitesparse_ptr_size_mismatch)
     {
       delete [] reinterpret_cast<SuiteSparse_long *> (A.p);
       delete [] reinterpret_cast<SuiteSparse_long *> (A.i);
@@ -3011,6 +3018,8 @@
 
 // FIXME: 2024/01/07: This template specialization does not appear to be
 // reachable from current Octave code calling qrsolve from sparse-dmsolve.cc.
+// It remains because liboctave may be used by other C++ code besides the
+// Octave interpreter.
 template <>
 template <>
 OCTAVE_API SparseComplexMatrix
@@ -3022,17 +3031,17 @@
   cholmod_common cc;
 
   cholmod_l_start (&cc);
-  cholmod_sparse A = cos2ccs (a);
-  cholmod_sparse *B = ros2ccs (b, &cc);
+  cholmod_sparse A = ocs2ccs (a);
+  cholmod_sparse *B = ors2ccs (b, &cc);
   cholmod_sparse *X;
 
   X = SuiteSparseQR_min2norm<Complex> (order, SPQR_DEFAULT_TOL, &A, B, &cc);
   spqr_error_handler (&cc);
 
-  SparseComplexMatrix ret = ccs2cos (X, &cc);
+  SparseComplexMatrix ret = ccs2ocs (X, &cc);
   info = 0;
 
-  if (sizeof (octave_idx_type) != sizeof (SuiteSparse_long))
+  if (octave_suitesparse_ptr_size_mismatch)
     {
       delete [] reinterpret_cast<SuiteSparse_long *> (A.p);
       delete [] reinterpret_cast<SuiteSparse_long *> (A.i);
@@ -3051,16 +3060,14 @@
 // Bateman's original code.
 
 template <typename SPARSE_T>
-class
-cxsparse_defaults
+class cxsparse_defaults
 {
 public:
   enum { order = -1 };
 };
 
 template <>
-class
-cxsparse_defaults<SparseMatrix>
+class cxsparse_defaults<SparseMatrix>
 {
 public:
 #if (defined (HAVE_SPQR) && defined (HAVE_CHOLMOD))
@@ -3071,8 +3078,7 @@
 };
 
 template <>
-class
-cxsparse_defaults<SparseComplexMatrix>
+class cxsparse_defaults<SparseComplexMatrix>
 {
 public:
 #if (defined (HAVE_SPQR) && defined (HAVE_CHOLMOD))
--- a/liboctave/numeric/sparse-qr.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/sparse-qr.h	Mon Feb 26 23:30:33 2024 -0500
@@ -44,8 +44,7 @@
 // of the matrix type.
 
 template <typename SPARSE_T>
-class
-sparse_qr
+class sparse_qr
 {
 public:
 
--- a/liboctave/numeric/svd.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/svd.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -44,8 +44,7 @@
 
 // class to compute optimal work space size (lwork) for DGEJSV and SGEJSV
 template<typename T>
-class
-gejsv_lwork
+class gejsv_lwork
 {
 public:
 
@@ -706,7 +705,7 @@
     }
 
   T atmp = a;
-  P *tmp_data = atmp.fortran_vec ();
+  P *tmp_data = atmp.rwdata ();
 
   F77_INT min_mn = (m < n ? m : n);
 
@@ -745,10 +744,10 @@
   if (! (jobu == 'N' || jobu == 'O'))
     m_left_sm.resize (m, ncol_u);
 
-  P *u = m_left_sm.fortran_vec ();
+  P *u = m_left_sm.rwdata ();
 
   m_sigma.resize (nrow_s, ncol_s);
-  DM_P *s_vec = m_sigma.fortran_vec ();
+  DM_P *s_vec = m_sigma.rwdata ();
 
   if (! (jobv == 'N' || jobv == 'O'))
     {
@@ -758,7 +757,7 @@
         m_right_sm.resize (nrow_vt, n);
     }
 
-  P *vt = m_right_sm.fortran_vec ();
+  P *vt = m_right_sm.rwdata ();
 
   // Query _GESVD for the correct dimension of WORK.
 
@@ -799,11 +798,11 @@
           std::swap (jobu, jobv);
 
           atmp = atmp.hermitian ();
-          tmp_data = atmp.fortran_vec ();
+          tmp_data = atmp.rwdata ();
 
           // Swap pointers of U and V.
-          u  = m_right_sm.fortran_vec ();
-          vt = m_left_sm.fortran_vec ();
+          u  = m_right_sm.rwdata ();
+          vt = m_left_sm.rwdata ();
         }
 
       // translate jobu and jobv from gesvd to gejsv.
--- a/liboctave/numeric/svd.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/numeric/svd.h	Mon Feb 26 23:30:33 2024 -0500
@@ -35,9 +35,7 @@
 OCTAVE_BEGIN_NAMESPACE(math)
 
 template <typename T>
-class
-OCTAVE_API
-svd
+class OCTAVE_API svd
 {
 public:
 
--- a/liboctave/operators/mx-inlines.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/operators/mx-inlines.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -471,7 +471,7 @@
                 void (*op) (std::size_t, R *, const X *))
 {
   Array<R> r (x.dims ());
-  op (r.numel (), r.fortran_vec (), x.data ());
+  op (r.numel (), r.rwdata (), x.data ());
   return r;
 }
 
@@ -496,7 +496,7 @@
 do_mx_inplace_op (Array<R>& r,
                   void (*op) (std::size_t, R *))
 {
-  op (r.numel (), r.fortran_vec ());
+  op (r.numel (), r.rwdata ());
   return r;
 }
 
@@ -508,12 +508,12 @@
                  void (*op2) (std::size_t, R *, const X *, Y),
                  const char *opname)
 {
-  dim_vector dx = x.dims ();
-  dim_vector dy = y.dims ();
+  const dim_vector &dx = x.dims ();
+  const dim_vector &dy = y.dims ();
   if (dx == dy)
     {
       Array<R> r (dx);
-      op (r.numel (), r.fortran_vec (), x.data (), y.data ());
+      op (r.numel (), r.rwdata (), x.data (), y.data ());
       return r;
     }
   else if (is_valid_bsxfun (opname, dx, dy))
@@ -530,7 +530,7 @@
                  void (*op) (std::size_t, R *, const X *, Y))
 {
   Array<R> r (x.dims ());
-  op (r.numel (), r.fortran_vec (), x.data (), y);
+  op (r.numel (), r.rwdata (), x.data (), y);
   return r;
 }
 
@@ -540,7 +540,7 @@
                  void (*op) (std::size_t, R *, X, const Y *))
 {
   Array<R> r (y.dims ());
-  op (r.numel (), r.fortran_vec (), x, y.data ());
+  op (r.numel (), r.rwdata (), x, y.data ());
   return r;
 }
 
@@ -551,10 +551,10 @@
                   void (*op1) (std::size_t, R *, X),
                   const char *opname)
 {
-  dim_vector dr = r.dims ();
-  dim_vector dx = x.dims ();
+  const dim_vector &dr = r.dims ();
+  const dim_vector &dx = x.dims ();
   if (dr == dx)
-    op (r.numel (), r.fortran_vec (), x.data ());
+    op (r.numel (), r.rwdata (), x.data ());
   else if (is_valid_inplace_bsxfun (opname, dr, dx))
     do_inplace_bsxfun_op (r, x, op, op1);
   else
@@ -568,7 +568,7 @@
 do_ms_inplace_op (Array<R>& r, const X& x,
                   void (*op) (std::size_t, R *, X))
 {
-  op (r.numel (), r.fortran_vec (), x);
+  op (r.numel (), r.rwdata (), x);
   return r;
 }
 
@@ -1561,7 +1561,7 @@
   dims.chop_trailing_singletons ();
 
   Array<R> ret (dims);
-  mx_red_op (src.data (), ret.fortran_vec (), l, n, u);
+  mx_red_op (src.data (), ret.rwdata (), l, n, u);
 
   return ret;
 }
@@ -1573,12 +1573,12 @@
                                  octave_idx_type, octave_idx_type))
 {
   octave_idx_type l, n, u;
-  dim_vector dims = src.dims ();
+  const dim_vector& dims = src.dims ();
   get_extent_triplet (dims, dim, l, n, u);
 
   // Cumulative operation doesn't reduce the array size.
   Array<R> ret (dims);
-  mx_cum_op (src.data (), ret.fortran_vec (), l, n, u);
+  mx_cum_op (src.data (), ret.rwdata (), l, n, u);
 
   return ret;
 }
@@ -1598,7 +1598,7 @@
   dims.chop_trailing_singletons ();
 
   Array<R> ret (dims);
-  mx_minmax_op (src.data (), ret.fortran_vec (), l, n, u);
+  mx_minmax_op (src.data (), ret.rwdata (), l, n, u);
 
   return ret;
 }
@@ -1620,7 +1620,7 @@
   Array<R> ret (dims);
   if (idx.dims () != dims) idx = Array<octave_idx_type> (dims);
 
-  mx_minmax_op (src.data (), ret.fortran_vec (), idx.fortran_vec (),
+  mx_minmax_op (src.data (), ret.rwdata (), idx.rwdata (),
                 l, n, u);
 
   return ret;
@@ -1633,11 +1633,11 @@
                                              octave_idx_type, octave_idx_type))
 {
   octave_idx_type l, n, u;
-  dim_vector dims = src.dims ();
+  const dim_vector& dims = src.dims ();
   get_extent_triplet (dims, dim, l, n, u);
 
   Array<R> ret (dims);
-  mx_cumminmax_op (src.data (), ret.fortran_vec (), l, n, u);
+  mx_cumminmax_op (src.data (), ret.rwdata (), l, n, u);
 
   return ret;
 }
@@ -1649,13 +1649,13 @@
                                              octave_idx_type, octave_idx_type, octave_idx_type))
 {
   octave_idx_type l, n, u;
-  dim_vector dims = src.dims ();
+  const dim_vector& dims = src.dims ();
   get_extent_triplet (dims, dim, l, n, u);
 
   Array<R> ret (dims);
   if (idx.dims () != dims) idx = Array<octave_idx_type> (dims);
 
-  mx_cumminmax_op (src.data (), ret.fortran_vec (), idx.fortran_vec (),
+  mx_cumminmax_op (src.data (), ret.rwdata (), idx.rwdata (),
                    l, n, u);
 
   return ret;
@@ -1689,7 +1689,7 @@
     }
 
   Array<R> ret (dims);
-  mx_diff_op (src.data (), ret.fortran_vec (), l, n, u, order);
+  mx_diff_op (src.data (), ret.rwdata (), l, n, u, order);
 
   return ret;
 }
--- a/liboctave/operators/mx-op-defs.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/operators/mx-op-defs.h	Mon Feb 26 23:30:33 2024 -0500
@@ -440,7 +440,7 @@
       octave::err_nonconformant ("operator *", m_nr, m_nc, dm_nr, dm_nc);       \
                                                                         \
     r = R (m_nr, dm_nc);                                                \
-    R::element_type *rd = r.fortran_vec ();                             \
+    R::element_type *rd = r.rwdata ();                             \
     const M::element_type *md = m.data ();                              \
     const DM::element_type *dd = dm.data ();                            \
                                                                         \
@@ -512,7 +512,7 @@
       octave::err_nonconformant ("operator *", dm_nr, dm_nc, m_nr, m_nc);       \
                                                                         \
     r = R (dm_nr, m_nc);                                                \
-    R::element_type *rd = r.fortran_vec ();                             \
+    R::element_type *rd = r.rwdata ();                             \
     const M::element_type *md = m.data ();                              \
     const DM::element_type *dd = dm.data ();                            \
                                                                         \
@@ -553,7 +553,7 @@
     r.resize (dm1_nr, dm1_nc);                                          \
                                                                         \
     if (dm1_nr > 0 && dm1_nc > 0)                                       \
-      F (dm1.length (), r.fortran_vec (), dm1.data (), dm2.data ());    \
+      F (dm1.length (), r.rwdata (), dm1.data (), dm2.data ());    \
                                                                         \
     return r;                                                           \
   }
--- a/liboctave/system/child-list.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/system/child-list.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -40,7 +40,7 @@
 void
 child_list::child_list::insert (pid_t pid, child::child_event_handler f)
 {
-  m_list.append (child (pid, f));
+  m_list.push_back (child (pid, f));
 }
 
 void
--- a/liboctave/system/child-list.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/system/child-list.h	Mon Feb 26 23:30:33 2024 -0500
@@ -30,9 +30,9 @@
 
 #include <csignal>
 
-#include <sys/types.h>
+#include <list>
 
-#include "base-list.h"
+#include <sys/types.h>
 
 OCTAVE_BEGIN_NAMESPACE(octave)
 
@@ -88,7 +88,7 @@
 
 private:
 
-  base_list<child> m_list;
+  std::list<child> m_list;
 };
 
 OCTAVE_END_NAMESPACE(octave)
--- a/liboctave/system/dir-ops.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/system/dir-ops.h	Mon Feb 26 23:30:33 2024 -0500
@@ -36,9 +36,7 @@
 
 OCTAVE_BEGIN_NAMESPACE(sys)
 
-class
-OCTAVE_API
-dir_entry
+class OCTAVE_API dir_entry
 {
 
   // NOTE: This class cannot be used safely cross-platform (Windows) with
--- a/liboctave/system/file-stat.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/system/file-stat.h	Mon Feb 26 23:30:33 2024 -0500
@@ -38,9 +38,7 @@
 
 OCTAVE_BEGIN_NAMESPACE(sys)
 
-class
-OCTAVE_API
-base_file_stat
+class OCTAVE_API base_file_stat
 {
 public:
 
@@ -208,9 +206,7 @@
   long m_blocks;
 };
 
-class
-OCTAVE_API
-file_stat : public base_file_stat
+class OCTAVE_API file_stat : public base_file_stat
 {
 public:
 
@@ -269,9 +265,7 @@
   void update_internal (bool force = false);
 };
 
-class
-OCTAVE_API
-file_fstat : public base_file_stat
+class OCTAVE_API file_fstat : public base_file_stat
 {
 public:
 
--- a/liboctave/system/lo-sysdep.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/system/lo-sysdep.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -239,7 +239,7 @@
       return false;
     }
 
-  unwind_action act ([=] ()
+  unwind_action act ([fptr, tmpname] ()
   {
     std::fclose (fptr);
     sys::unlink (tmpname);
--- a/liboctave/system/oct-env.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/system/oct-env.h	Mon Feb 26 23:30:33 2024 -0500
@@ -34,9 +34,7 @@
 
 OCTAVE_BEGIN_NAMESPACE(sys)
 
-class
-OCTAVE_API
-env
+class OCTAVE_API env
 {
 protected:
 
--- a/liboctave/system/oct-group.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/system/oct-group.h	Mon Feb 26 23:30:33 2024 -0500
@@ -38,9 +38,7 @@
 
 OCTAVE_BEGIN_NAMESPACE(sys)
 
-class
-OCTAVE_API
-group
+class OCTAVE_API group
 {
 public:
 
--- a/liboctave/system/oct-password.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/system/oct-password.h	Mon Feb 26 23:30:33 2024 -0500
@@ -36,9 +36,7 @@
 
 OCTAVE_BEGIN_NAMESPACE(sys)
 
-class
-OCTAVE_API
-password
+class OCTAVE_API password
 {
 public:
 
--- a/liboctave/system/oct-time.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/system/oct-time.h	Mon Feb 26 23:30:33 2024 -0500
@@ -59,8 +59,7 @@
 
 class base_tm;
 
-class
-time
+class time
 {
 public:
 
@@ -193,8 +192,7 @@
                t1.usec () + t2.usec ());
 }
 
-class
-base_tm
+class base_tm
 {
 public:
 
@@ -306,8 +304,7 @@
   OCTAVE_API void init (void *p);
 };
 
-class
-localtime : public base_tm
+class localtime : public base_tm
 {
 public:
 
@@ -333,8 +330,7 @@
   OCTAVE_API void init (const time& ot);
 };
 
-class
-gmtime : public base_tm
+class gmtime : public base_tm
 {
 public:
 
@@ -351,8 +347,7 @@
   OCTAVE_API void init (const time& ot);
 };
 
-class
-strptime : public base_tm
+class strptime : public base_tm
 {
 public:
 
@@ -375,8 +370,7 @@
   OCTAVE_API void init (const std::string& str, const std::string& fmt);
 };
 
-class
-cpu_time
+class cpu_time
 {
 public:
 
@@ -422,8 +416,7 @@
   { }
 };
 
-class
-resource_usage
+class resource_usage
 {
 public:
 
--- a/liboctave/system/oct-uname.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/system/oct-uname.h	Mon Feb 26 23:30:33 2024 -0500
@@ -34,9 +34,7 @@
 
 OCTAVE_BEGIN_NAMESPACE(sys)
 
-class
-OCTAVE_API
-uname
+class OCTAVE_API uname
 {
 public:
 
--- a/liboctave/util/action-container.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/util/action-container.h	Mon Feb 26 23:30:33 2024 -0500
@@ -56,8 +56,7 @@
 
 OCTAVE_END_NAMESPACE(util)
 
-class
-action_container
+class action_container
 {
 public:
 
--- a/liboctave/util/base-list.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/util/base-list.h	Mon Feb 26 23:30:33 2024 -0500
@@ -28,6 +28,8 @@
 
 #include "octave-config.h"
 
+#warning "using <base-list.h> is discouraged - use <list> instead"
+
 #include <cstdlib>
 
 #include <list>
@@ -35,8 +37,7 @@
 OCTAVE_BEGIN_NAMESPACE(octave)
 
 template <typename elt_type>
-class
-base_list
+class base_list
 {
 public:
 
--- a/liboctave/util/cmd-edit.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/util/cmd-edit.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -69,8 +69,7 @@
 
 #if defined (USE_READLINE)
 
-class
-gnu_readline : public command_editor
+class gnu_readline : public command_editor
 {
 public:
 
@@ -929,8 +928,7 @@
 
 #endif
 
-class
-default_command_editor : public command_editor
+class default_command_editor : public command_editor
 {
 public:
 
--- a/liboctave/util/cmd-edit.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/util/cmd-edit.h	Mon Feb 26 23:30:33 2024 -0500
@@ -37,9 +37,7 @@
 
 OCTAVE_BEGIN_NAMESPACE(octave)
 
-class
-OCTAVE_API
-command_editor
+class OCTAVE_API command_editor
 {
 protected:
 
--- a/liboctave/util/cmd-hist.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/util/cmd-hist.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -56,8 +56,7 @@
 
 #if defined (USE_READLINE)
 
-class
-gnu_history : public command_history
+class gnu_history : public command_history
 {
 public:
 
--- a/liboctave/util/cmd-hist.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/util/cmd-hist.h	Mon Feb 26 23:30:33 2024 -0500
@@ -34,9 +34,7 @@
 
 OCTAVE_BEGIN_NAMESPACE(octave)
 
-class
-OCTAVE_API
-command_history
+class OCTAVE_API command_history
 {
 protected:
 
--- a/liboctave/util/data-conv.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/util/data-conv.h	Mon Feb 26 23:30:33 2024 -0500
@@ -31,9 +31,7 @@
 #include "mach-info.h"
 #include "oct-inttypes-fwd.h"
 
-class
-OCTAVE_API
-oct_data_conv
+class OCTAVE_API oct_data_conv
 {
 public:
 
--- a/liboctave/util/glob-match.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/util/glob-match.h	Mon Feb 26 23:30:33 2024 -0500
@@ -33,9 +33,7 @@
 #include "Array.h"
 #include "str-vec.h"
 
-class
-OCTAVE_API
-glob_match
+class OCTAVE_API glob_match
 {
 public:
 
@@ -96,9 +94,7 @@
   int opts_to_fnmatch_flags (unsigned int xopts) const;
 };
 
-class
-OCTAVE_API
-symbol_match
+class OCTAVE_API symbol_match
 {
 
 // This class is meant to provide a performant implementation for symbol
--- a/liboctave/util/lo-ieee.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/util/lo-ieee.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -60,7 +60,7 @@
 {
   lo_ieee_double t;
   t.value = x;
-  return (__lo_ieee_isnan (x) && t.word[lo_ieee_hw] == LO_IEEE_NA_HW
+  return (std::isnan (x) && t.word[lo_ieee_hw] == LO_IEEE_NA_HW
           && t.word[lo_ieee_lw] == LO_IEEE_NA_LW) ? 1 : 0;
 }
 
@@ -93,7 +93,7 @@
 {
   lo_ieee_float t;
   t.value = x;
-  return (__lo_ieee_float_isnan (x) && (t.word == LO_IEEE_NA_FLOAT)) ? 1 : 0;
+  return (std::isnan (x) && (t.word == LO_IEEE_NA_FLOAT)) ? 1 : 0;
 }
 
 float
--- a/liboctave/util/lo-ieee.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/util/lo-ieee.h	Mon Feb 26 23:30:33 2024 -0500
@@ -72,28 +72,44 @@
 extern OCTAVE_API void octave_ieee_init (void);
 
 #if defined (__cplusplus)
+OCTAVE_DEPRECATED (10, "use std::isnan instead")
 inline int __lo_ieee_isnan (double x) { return std::isnan (x); }
+OCTAVE_DEPRECATED (10, "use std::isfinite instead")
 inline int __lo_ieee_isfinite (double x) { return std::isfinite (x); }
+OCTAVE_DEPRECATED (10, "use std::isinf instead")
 inline int __lo_ieee_isinf (double x) { return std::isinf (x); }
 
+OCTAVE_DEPRECATED (10, "use std::signbit instead")
 inline int __lo_ieee_signbit (double x) { return std::signbit (x); }
 
+OCTAVE_DEPRECATED (10, "use std::isnan instead")
 inline int __lo_ieee_float_isnan (float x) { return std::isnan (x); }
+OCTAVE_DEPRECATED (10, "use std::isfinite instead")
 inline int __lo_ieee_float_isfinite (float x) { return std::isfinite (x); }
+OCTAVE_DEPRECATED (10, "use std::isinf instead")
 inline int __lo_ieee_float_isinf (float x) { return std::isinf (x); }
 
+OCTAVE_DEPRECATED (10, "use std::signbit instead")
 inline int __lo_ieee_float_signbit (float x) { return std::signbit (x); }
 #else
+OCTAVE_DEPRECATED (10, "use isnan instead")
 inline int __lo_ieee_isnan (double x) { return isnan (x); }
+OCTAVE_DEPRECATED (10, "use isfinite instead")
 inline int __lo_ieee_isfinite (double x) { return isfinite (x); }
+OCTAVE_DEPRECATED (10, "use isinf instead")
 inline int __lo_ieee_isinf (double x) { return isinf (x); }
 
+OCTAVE_DEPRECATED (10, "use signbit instead")
 inline int __lo_ieee_signbit (double x) { return signbit (x); }
 
+OCTAVE_DEPRECATED (10, "use isnan instead")
 inline int __lo_ieee_float_isnan (float x) { return isnan (x); }
+OCTAVE_DEPRECATED (10, "use isfinite instead")
 inline int __lo_ieee_float_isfinite (float x) { return isfinite (x); }
+OCTAVE_DEPRECATED (10, "use isinf instead")
 inline int __lo_ieee_float_isinf (float x) { return isinf (x); }
 
+OCTAVE_DEPRECATED (10, "use signbit instead")
 inline int __lo_ieee_float_signbit (float x) { return signbit (x); }
 #endif
 
--- a/liboctave/util/lo-regexp.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/util/lo-regexp.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -48,7 +48,6 @@
 #endif
 
 #include "Matrix.h"
-#include "base-list.h"
 #include "lo-error.h"
 #include "oct-locbuf.h"
 #include "quit.h"
@@ -369,16 +368,15 @@
       octave_quit ();
 
 #if defined (HAVE_PCRE2)
-      pcre2_match_data *m_data
+      pcre2_match_data *tmp_match_data
         = pcre2_match_data_create_from_pattern (re, nullptr);
 
-      unwind_action cleanup_match_data
-      ([=] () { pcre2_match_data_free (m_data); });
+      unwind_action cleanup_match_data ([tmp_match_data] () { pcre2_match_data_free (tmp_match_data); });
 
       int matches = pcre2_match (re, reinterpret_cast<PCRE2_SPTR> (buffer.c_str ()),
                                  buffer.length (), idx,
                                  PCRE2_NO_UTF_CHECK | (idx ? PCRE2_NOTBOL : 0),
-                                 m_data, nullptr);
+                                 tmp_match_data, nullptr);
 
       if (matches < 0 && matches != PCRE2_ERROR_NOMATCH)
         (*current_liboctave_error_handler)
@@ -388,7 +386,7 @@
       if (matches == PCRE2_ERROR_NOMATCH)
         break;
 
-      OCTAVE_PCRE_SIZE *ovector = pcre2_get_ovector_pointer (m_data);
+      OCTAVE_PCRE_SIZE *ovector = pcre2_get_ovector_pointer (tmp_match_data);
 #else
       int matches = pcre_exec (re, nullptr, buffer.c_str (),
                                buffer.length (), idx,
--- a/liboctave/util/lo-regexp.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/util/lo-regexp.h	Mon Feb 26 23:30:33 2024 -0500
@@ -34,14 +34,11 @@
 
 #include "Array.h"
 #include "Matrix.h"
-#include "base-list.h"
 #include "str-vec.h"
 
 OCTAVE_BEGIN_NAMESPACE(octave)
 
-class
-OCTAVE_API
-regexp
+class OCTAVE_API regexp
 {
 public:
 
@@ -196,16 +193,16 @@
     double m_end;
   };
 
-  class match_data : public base_list<match_element>
+  class match_data : public std::list<match_element>
   {
   public:
 
     match_data ()
-      : base_list<match_element> (), m_named_pats ()
+      : std::list<match_element> (), m_named_pats ()
     { }
 
     match_data (const std::list<match_element>& l, const string_vector& np)
-      : base_list<match_element> (l), m_named_pats (np)
+      : std::list<match_element> (l), m_named_pats (np)
     { }
 
     OCTAVE_DEFAULT_COPY_MOVE_DELETE (match_data)
--- a/liboctave/util/lo-utils.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/util/lo-utils.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -446,9 +446,9 @@
 {
   if (lo_ieee_is_NA (value))
     os << "NA";
-  else if (lo_ieee_isnan (value))
+  else if (math::isnan (value))
     os << "NaN";
-  else if (lo_ieee_isinf (value))
+  else if (math::isinf (value))
     os << (value < 0 ? "-Inf" : "Inf");
   else
     os << value;
@@ -474,9 +474,9 @@
 {
   if (lo_ieee_is_NA (value))
     os << "NA";
-  else if (lo_ieee_isnan (value))
+  else if (math::isnan (value))
     os << "NaN";
-  else if (lo_ieee_isinf (value))
+  else if (math::isinf (value))
     os << (value < 0 ? "-Inf" : "Inf");
   else
     os << value;
--- a/liboctave/util/oct-base64.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/util/oct-base64.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -88,7 +88,7 @@
     {
       octave_idx_type len = (outlen * sizeof (char)) / sizeof (double);
       retval.resize (dim_vector (1, len));
-      std::copy (out, out + len, retval.fortran_vec ());
+      std::copy (out, out + len, retval.rwdata ());
       ::free (out);
     }
 
@@ -116,7 +116,7 @@
       ("base64_decode: memory allocation error");
 
   retval.resize (dim_vector (1, outlen));
-  std::copy (out, out + outlen, retval.fortran_vec ());
+  std::copy (out, out + outlen, retval.rwdata ());
   ::free (out);
 
   return retval;
--- a/liboctave/util/oct-binmap.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/util/oct-binmap.h	Mon Feb 26 23:30:33 2024 -0500
@@ -116,7 +116,7 @@
   const R *y = ya.data ();
 
   Array<U> result (ya.dims ());
-  U *p = result.fortran_vec ();
+  U *p = result.rwdata ();
 
   octave_idx_type i;
   for (i = 0; i < len - 3; i += 4)
@@ -147,7 +147,7 @@
   const R *x = xa.data ();
 
   Array<U> result (xa.dims ());
-  U *p = result.fortran_vec ();
+  U *p = result.rwdata ();
 
   octave_idx_type i;
   for (i = 0; i < len - 3; i += 4)
@@ -173,8 +173,8 @@
 Array<U>
 binmap (const Array<T>& xa, const Array<R>& ya, F fcn, const char *name)
 {
-  dim_vector xad = xa.dims ();
-  dim_vector yad = ya.dims ();
+  const dim_vector& xad = xa.dims ();
+  const dim_vector& yad = ya.dims ();
   if (xa.numel () == 1)
     return binmap<U, T, R, F> (xa(0), ya, fcn);
   else if (ya.numel () == 1)
@@ -197,7 +197,7 @@
   const T *y = ya.data ();
 
   Array<U> result (xa.dims ());
-  U *p = result.fortran_vec ();
+  U *p = result.rwdata ();
 
   octave_idx_type i;
   for (i = 0; i < len - 3; i += 4)
--- a/liboctave/util/oct-cmplx.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/util/oct-cmplx.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -46,12 +46,12 @@
    template <typename T>                                                     \
    bool operator OP (const std::complex<T>& a, const std::complex<T>& b)     \
    {                                                                         \
-     OCTAVE_FLOAT_TRUNCATE const T ax = std::abs (a);                        \
-     OCTAVE_FLOAT_TRUNCATE const T bx = std::abs (b);                        \
+     const T ax = std::abs (a);                                              \
+     const T bx = std::abs (b);                                              \
      if (ax == bx)                                                           \
        {                                                                     \
-         OCTAVE_FLOAT_TRUNCATE const T ay = std::arg (a);                    \
-         OCTAVE_FLOAT_TRUNCATE const T by = std::arg (b);                    \
+         const T ay = std::arg (a);                                          \
+         const T by = std::arg (b);                                          \
          if (ay == static_cast<T> (-M_PI))                                   \
            {                                                                 \
              if (by != static_cast<T> (-M_PI))                               \
@@ -69,11 +69,11 @@
    template <typename T>                                                     \
    bool operator OP (const std::complex<T>& a, T b)                          \
    {                                                                         \
-     OCTAVE_FLOAT_TRUNCATE const T ax = std::abs (a);                        \
-     OCTAVE_FLOAT_TRUNCATE const T bx = std::abs (b);                        \
+     const T ax = std::abs (a);                                              \
+     const T bx = std::abs (b);                                              \
      if (ax == bx)                                                           \
        {                                                                     \
-         OCTAVE_FLOAT_TRUNCATE const T ay = std::arg (a);                    \
+         const T ay = std::arg (a);                                          \
          if (ay == static_cast<T> (-M_PI))                                   \
            return static_cast<T> (M_PI) OP 0;                                \
          return ay OP 0;                                                     \
@@ -84,11 +84,11 @@
    template <typename T>                                                     \
    bool operator OP (T a, const std::complex<T>& b)                          \
    {                                                                         \
-     OCTAVE_FLOAT_TRUNCATE const T ax = std::abs (a);                        \
-     OCTAVE_FLOAT_TRUNCATE const T bx = std::abs (b);                        \
+     const T ax = std::abs (a);                                              \
+     const T bx = std::abs (b);                                              \
      if (ax == bx)                                                           \
        {                                                                     \
-         OCTAVE_FLOAT_TRUNCATE const T by = std::arg (b);                    \
+         const T by = std::arg (b);                                          \
          if (by == static_cast<T> (-M_PI))                                   \
            return 0 OP static_cast<T> (M_PI);                                \
          return 0 OP by;                                                     \
@@ -116,12 +116,12 @@
      bool operator OP<float> (const std::complex<float>& a,                  \
                               const std::complex<float>& b)                  \
      {                                                                       \
-       OCTAVE_FLOAT_TRUNCATE const float ax = std::abs (a);                  \
-       OCTAVE_FLOAT_TRUNCATE const float bx = std::abs (b);                  \
+       const float ax = std::abs (a);                                        \
+       const float bx = std::abs (b);                                        \
        if (ax == bx)                                                         \
          {                                                                   \
-           OCTAVE_FLOAT_TRUNCATE const float ay = std::arg (a);              \
-           OCTAVE_FLOAT_TRUNCATE const float by = std::arg (b);              \
+           const float ay = std::arg (a);                                    \
+           const float by = std::arg (b);                                    \
            if (ay == -A_PI)                                                  \
              {                                                               \
                if (by != -A_PI)                                              \
@@ -139,11 +139,11 @@
      template <> OCTAVE_API                                                  \
      bool operator OP<float> (const std::complex<float>& a, float b)         \
      {                                                                       \
-       OCTAVE_FLOAT_TRUNCATE const float ax = std::abs (a);                  \
-       OCTAVE_FLOAT_TRUNCATE const float bx = std::abs (b);                  \
+       const float ax = std::abs (a);                                        \
+       const float bx = std::abs (b);                                        \
        if (ax == bx)                                                         \
          {                                                                   \
-           OCTAVE_FLOAT_TRUNCATE const float ay = std::arg (a);              \
+           const float ay = std::arg (a);                                    \
            if (ay == -A_PI)                                                  \
              return static_cast<float> (M_PI) OP 0;                          \
            return ay OP 0;                                                   \
@@ -154,11 +154,11 @@
      template <> OCTAVE_API                                                  \
      bool operator OP<float> (float a, const std::complex<float>& b)         \
      {                                                                       \
-       OCTAVE_FLOAT_TRUNCATE const float ax = std::abs (a);                  \
-       OCTAVE_FLOAT_TRUNCATE const float bx = std::abs (b);                  \
+       const float ax = std::abs (a);                                        \
+       const float bx = std::abs (b);                                        \
        if (ax == bx)                                                         \
          {                                                                   \
-           OCTAVE_FLOAT_TRUNCATE const float by = std::arg (b);              \
+           const float by = std::arg (b);                                    \
            if (by == -A_PI)                                                  \
              return 0 OP static_cast<float> (M_PI);                          \
            return 0 OP by;                                                   \
--- a/liboctave/util/oct-glob.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/util/oct-glob.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -81,7 +81,7 @@
   void *glob_info = octave_create_glob_info_struct ();
 
   unwind_action cleanup_glob_info_struct
-  ([=] () { octave_destroy_glob_info_struct (glob_info); });
+  ([glob_info] () { octave_destroy_glob_info_struct (glob_info); });
 
   for (int i = 0; i < npat; i++)
     {
@@ -184,7 +184,7 @@
   if (h_find == INVALID_HANDLE_VALUE)
     return;
 
-  unwind_action close_h_find ([=] () { FindClose (h_find); });
+  unwind_action close_h_find ([h_find] () { FindClose (h_find); });
 
   // find all files that match pattern
   do
@@ -311,8 +311,7 @@
 
   void *glob_info = octave_create_glob_info_struct ();
 
-  unwind_action cleanup_glob_info_struct
-  ([=] () { octave_destroy_glob_info_struct (glob_info); });
+  unwind_action cleanup_glob_info_struct ([glob_info] () { octave_destroy_glob_info_struct (glob_info); });
 
   for (int i = 0; i < npat; i++)
     {
--- a/liboctave/util/oct-inttypes.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/util/oct-inttypes.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -538,8 +538,8 @@
 OCTAVE_API octave_int64
 operator - (const double& x, const octave_int64& y)
 {
-  static const bool twosc = (std::numeric_limits<int64_t>::min ()
-                             < -std::numeric_limits<int64_t>::max ());
+  static constexpr bool twosc = (std::numeric_limits<int64_t>::min ()
+                                 < -std::numeric_limits<int64_t>::max ());
   // In case of symmetric integers (not two's complement), this will probably
   // be eliminated at compile time.
   if (twosc && y.value () == std::numeric_limits<int64_t>::min ())
--- a/liboctave/util/oct-inttypes.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/util/oct-inttypes.h	Mon Feb 26 23:30:33 2024 -0500
@@ -123,16 +123,16 @@
   class prom
   {
     // Promote to int?
-    static const bool s_pint = (sizeof (T1) < sizeof (int)
-                                && sizeof (T2) < sizeof (int));
+    static constexpr bool s_pint = (sizeof (T1) < sizeof (int)
+                                    && sizeof (T2) < sizeof (int));
 
-    static const bool s_t1sig = std::numeric_limits<T1>::is_signed;
-    static const bool s_t2sig = std::numeric_limits<T2>::is_signed;
+    static constexpr bool s_t1sig = std::numeric_limits<T1>::is_signed;
+    static constexpr bool s_t2sig = std::numeric_limits<T2>::is_signed;
 
-    static const bool s_psig
+    static constexpr bool s_psig
       = (s_pint || (sizeof (T2) > sizeof (T1) && s_t2sig) || s_t1sig);
 
-    static const int s_psize
+    static constexpr int s_psize
       = (s_pint
          ? sizeof (int)
          : (sizeof (T2) > sizeof (T1) ? sizeof (T2) : sizeof (T1)));
@@ -185,8 +185,8 @@
   {                                                     \
   public:                                               \
                                                         \
-    static const bool ltval = (0 OP 1);                 \
-    static const bool gtval = (1 OP 0);                 \
+    static constexpr bool ltval = (0 OP 1);             \
+    static constexpr bool gtval = (1 OP 0);             \
                                                         \
     template <typename T>                               \
     static bool op (T x, T y) { return x OP y; }        \
@@ -209,8 +209,8 @@
   {                                             \
   public:                                       \
                                                 \
-    static const bool ltval = VALUE;            \
-    static const bool gtval = VALUE;            \
+    static constexpr bool ltval = VALUE;        \
+    static constexpr bool gtval = VALUE;        \
                                                 \
     template <typename T>                       \
       static bool op (T, T) { return VALUE; }   \
@@ -357,16 +357,16 @@
     // An exhaustive test whether the max and/or min check can be
     // omitted.
 
-    static const bool t_is_signed = std::numeric_limits<T>::is_signed;
-    static const bool s_is_signed = std::numeric_limits<S>::is_signed;
+    static constexpr bool t_is_signed = std::numeric_limits<T>::is_signed;
+    static constexpr bool s_is_signed = std::numeric_limits<S>::is_signed;
 
-    static const int t_size = sizeof (T);
-    static const int s_size = sizeof (S);
+    static constexpr int t_size = sizeof (T);
+    static constexpr int s_size = sizeof (S);
 
-    static const bool omit_chk_min
+    static constexpr bool omit_chk_min
       = (! s_is_signed || (t_is_signed && t_size >= s_size));
 
-    static const bool omit_chk_max
+    static constexpr bool omit_chk_max
       = (t_size > s_size
          || (t_size == s_size && (! t_is_signed || s_is_signed)));
 
@@ -779,9 +779,7 @@
 { };
 
 template <typename T>
-class
-OCTAVE_TEMPLATE_API
-octave_int : public octave_int_base<T>
+class OCTAVE_TEMPLATE_API octave_int : public octave_int_base<T>
 {
 public:
 
--- a/liboctave/util/oct-mutex.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/util/oct-mutex.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -60,8 +60,7 @@
 
 #if defined (OCTAVE_USE_WINDOWS_API)
 
-class
-w32_mutex : public base_mutex
+class w32_mutex : public base_mutex
 {
 public:
   w32_mutex ()
@@ -110,8 +109,7 @@
 
 #elif defined (HAVE_PTHREAD_H)
 
-class
-pthread_mutex : public base_mutex
+class pthread_mutex : public base_mutex
 {
 public:
 
--- a/liboctave/util/oct-mutex.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/util/oct-mutex.h	Mon Feb 26 23:30:33 2024 -0500
@@ -34,9 +34,7 @@
 
 class mutex;
 
-class
-OCTAVE_API
-base_mutex
+class OCTAVE_API base_mutex
 {
 public:
   friend class mutex;
@@ -52,9 +50,7 @@
   virtual bool try_lock ();
 };
 
-class
-OCTAVE_API
-mutex
+class OCTAVE_API mutex
 {
 public:
   mutex ();
@@ -80,9 +76,7 @@
   std::shared_ptr<base_mutex> m_rep;
 };
 
-class
-OCTAVE_API
-autolock
+class OCTAVE_API autolock
 {
 public:
   autolock (const mutex& m, bool block = true)
@@ -117,9 +111,7 @@
 };
 
 
-class
-OCTAVE_API
-thread
+class OCTAVE_API thread
 {
 public:
 
--- a/liboctave/util/oct-shlib.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/util/oct-shlib.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -37,7 +37,7 @@
 #    include <dlfcn.h>
 #  else
   extern void * dlopen (const char *, int);
-  extern const char * dlerror (void);
+  extern const char * dlerror ();
   extern void * dlsym (void *, const char *);
   extern int dlclose (void *);
 #  endif
@@ -173,8 +173,7 @@
 
 #if defined (HAVE_DLOPEN_API)
 
-class
-octave_dlopen_shlib : public dynamic_library::dynlib_rep
+class octave_dlopen_shlib : public dynamic_library::dynlib_rep
 {
 public:
 
@@ -275,8 +274,7 @@
 
 #elif defined (HAVE_LOADLIBRARY_API)
 
-class
-octave_w32_shlib: public dynamic_library::dynlib_rep
+class octave_w32_shlib: public dynamic_library::dynlib_rep
 {
 public:
 
--- a/liboctave/util/oct-shlib.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/util/oct-shlib.h	Mon Feb 26 23:30:33 2024 -0500
@@ -38,8 +38,7 @@
 
 OCTAVE_BEGIN_NAMESPACE(octave)
 
-class
-dynamic_library
+class dynamic_library
 {
 public: // FIXME: make this class private?
 
--- a/liboctave/util/oct-sort.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/util/oct-sort.h	Mon Feb 26 23:30:33 2024 -0500
@@ -97,9 +97,7 @@
 enum sortmode { UNSORTED = 0, ASCENDING, DESCENDING };
 
 template <typename T>
-class
-OCTAVE_TEMPLATE_API
-octave_sort
+class OCTAVE_TEMPLATE_API octave_sort
 {
 public:
 
@@ -339,9 +337,7 @@
 };
 
 template <typename T>
-class
-OCTAVE_TEMPLATE_API
-vec_index
+class OCTAVE_TEMPLATE_API vec_index
 {
 public:
   T m_vec;
--- a/liboctave/util/oct-string.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/util/oct-string.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -521,7 +521,7 @@
            who.c_str (), encoding.c_str (), std::strerror (errno));
     }
 
-  octave::unwind_action free_native_str ([=] () { ::free (native_str); });
+  octave::unwind_action free_native_str ([native_str] () { ::free (native_str); });
 
   std::string retval = std::string (native_str, length);
 
@@ -551,7 +551,7 @@
            who.c_str (), encoding.c_str (), std::strerror (errno));
     }
 
-  octave::unwind_action free_utf8_str ([=] () { ::free (utf8_str); });
+  octave::unwind_action free_utf8_str ([utf8_str] () { ::free (utf8_str); });
 
   std::string retval = std::string (reinterpret_cast<char *> (utf8_str), length);
 
@@ -597,8 +597,7 @@
                   ("%s: converting from codepage '%s' to UTF-8 failed: %s",
                    who.c_str (), fallback.c_str (), std::strerror (errno));
 
-              octave::unwind_action free_val_utf8
-                ([=] () { ::free (val_utf8); });
+              octave::unwind_action free_val_utf8 ([val_utf8] () { ::free (val_utf8); });
 
               out_str.append (reinterpret_cast<const char *> (val_utf8),
                               lengthp);
@@ -635,7 +634,7 @@
            who.c_str (), encoding.c_str (), std::strerror (errno));
     }
 
-  octave::unwind_action free_native_str ([=] () { ::free (native_str); });
+  octave::unwind_action free_native_str ([native_str] () { ::free (native_str); });
 
   std::string retval = std::string (native_str, length);
 
@@ -917,10 +916,11 @@
   if (len <= 0)
     len = 10;
 
-  static const T out_of_range_top
-    = static_cast<T> (std::numeric_limits<int>::max ()) + 1.;
-  static const T out_of_range_bottom
-    = static_cast<T> (std::numeric_limits<int>::min ()) - 1.;
+  static constexpr T out_of_range_top
+    = static_cast<T> (std::numeric_limits<int>::max ()) + 1.0;
+  static constexpr T out_of_range_bottom
+    = static_cast<T> (std::numeric_limits<int>::min ()) - 1.0;
+
   if (octave::math::isinf (val))
     {
       if (val > 0)
--- a/liboctave/util/oct-string.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/util/oct-string.h	Mon Feb 26 23:30:33 2024 -0500
@@ -179,9 +179,7 @@
   OCTAVE_DEFAULT_COPY_MOVE_DELETE (deletable_facet)
 };
 
-class
-OCTAVE_API
-codecvt_u8 : public std::codecvt<char, char, std::mbstate_t>
+class OCTAVE_API codecvt_u8 : public std::codecvt<char, char, std::mbstate_t>
 {
 public:
 
--- a/liboctave/util/octave-preserve-stream-state.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/util/octave-preserve-stream-state.h	Mon Feb 26 23:30:33 2024 -0500
@@ -32,8 +32,7 @@
 
 OCTAVE_BEGIN_NAMESPACE(octave)
 
-class
-preserve_stream_state
+class preserve_stream_state
 {
 public:
 
--- a/liboctave/util/pathsearch.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/util/pathsearch.h	Mon Feb 26 23:30:33 2024 -0500
@@ -33,9 +33,7 @@
 
 OCTAVE_BEGIN_NAMESPACE(octave)
 
-class
-OCTAVE_API
-directory_path
+class OCTAVE_API directory_path
 {
 public:
 
--- a/liboctave/util/quit.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/util/quit.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -38,7 +38,7 @@
 
 std::atomic<sig_atomic_t> octave_interrupt_state{0};
 
-volatile std::atomic<bool> octave_signal_caught{false};
+std::atomic<bool> octave_signal_caught{false};
 
 void (*octave_signal_hook) () = nullptr;
 void (*octave_interrupt_hook) () = nullptr;
--- a/liboctave/util/quit.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/util/quit.h	Mon Feb 26 23:30:33 2024 -0500
@@ -48,7 +48,7 @@
 {
 public:
 
-  frame_info (void) = default;
+  frame_info () = default;
 
   frame_info (const std::string& file_name, const std::string& fcn_name,
               int line, int column)
@@ -60,15 +60,15 @@
 
   frame_info& operator = (const frame_info&) = default;
 
-  ~frame_info (void) = default;
+  ~frame_info () = default;
 
-  std::string file_name (void) const { return m_file_name; }
+  std::string file_name () const { return m_file_name; }
 
-  std::string fcn_name (void) const { return m_fcn_name; }
+  std::string fcn_name () const { return m_fcn_name; }
 
-  int line (void) const { return m_line; }
+  int line () const { return m_line; }
 
-  int column (void) const { return m_column; }
+  int column () const { return m_column; }
 
 private:
 
@@ -107,35 +107,35 @@
 
   execution_exception& operator = (const execution_exception&) = default;
 
-  ~execution_exception (void) = default;
+  ~execution_exception () = default;
 
   void set_err_type (const std::string& et)
   {
     m_err_type = et;
   }
 
-  std::string err_type (void) const { return m_err_type; }
+  std::string err_type () const { return m_err_type; }
 
-  virtual std::string stack_trace (void) const;
+  virtual std::string stack_trace () const;
 
   void set_identifier (const std::string& id)
   {
     m_id = id;
   }
 
-  virtual std::string identifier (void) const { return m_id; }
+  virtual std::string identifier () const { return m_id; }
 
   void set_message (const std::string& msg)
   {
     m_message = msg;
   }
 
-  std::string message (void) const { return m_message; }
+  std::string message () const { return m_message; }
 
   // Provided for std::exception interface.
-  const char * what (void) const noexcept { return m_message.c_str (); }
+  const char * what () const noexcept { return m_message.c_str (); }
 
-  virtual stack_info_type stack_info (void) const
+  virtual stack_info_type stack_info () const
   {
     return m_stack_info;
   }
@@ -169,11 +169,11 @@
 
   OCTAVE_DEFAULT_COPY_MOVE_DELETE (exit_exception)
 
-  const char * what (void) const noexcept { return "exit exception"; }
+  const char * what () const noexcept { return "exit exception"; }
 
-  int exit_status (void) const { return m_exit_status; }
+  int exit_status () const { return m_exit_status; }
 
-  bool safe_to_return (void) const { return m_safe_to_return; }
+  bool safe_to_return () const { return m_safe_to_return; }
 
 private:
 
@@ -186,15 +186,15 @@
 {
 public:
 
-  interrupt_exception (void) = default;
+  interrupt_exception () = default;
 
   interrupt_exception (const interrupt_exception&) = default;
 
   interrupt_exception& operator = (const interrupt_exception&) = default;
 
-  ~interrupt_exception (void) = default;
+  ~interrupt_exception () = default;
 
-  const char * what (void) const noexcept { return "interrupt exception"; }
+  const char * what () const noexcept { return "interrupt exception"; }
 };
 
 OCTAVE_END_NAMESPACE(octave)
@@ -226,7 +226,7 @@
 
 extern OCTAVE_API std::atomic<int> octave_interrupt_state;
 
-extern OCTAVE_API volatile std::atomic<bool> octave_signal_caught;
+extern OCTAVE_API std::atomic<bool> octave_signal_caught;
 
 #endif
 
@@ -234,7 +234,7 @@
 
 #if defined (__cplusplus)
 
-inline void octave_quit (void)
+inline void octave_quit ()
 {
   bool expected = true;
 
@@ -286,8 +286,8 @@
 /* These should only be declared for C++ code, and should also be
    outside of any extern "C" block.  */
 
-extern OCTAVE_API void (*octave_signal_hook) (void);
-extern OCTAVE_API void (*octave_interrupt_hook) (void);
+extern OCTAVE_API void (*octave_signal_hook) ();
+extern OCTAVE_API void (*octave_interrupt_hook) ();
 
 #endif
 
--- a/liboctave/util/singleton-cleanup.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/util/singleton-cleanup.h	Mon Feb 26 23:30:33 2024 -0500
@@ -30,9 +30,7 @@
 
 #include <set>
 
-class
-OCTAVE_API
-singleton_cleanup_list
+class OCTAVE_API singleton_cleanup_list
 {
 protected:
 
--- a/liboctave/util/str-vec.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/util/str-vec.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -78,7 +78,7 @@
 {
   // Don't use Array<std::string>::sort () to allow sorting in place.
   octave_sort<std::string> lsort;
-  lsort.sort (m_data.fortran_vec (), numel ());
+  lsort.sort (m_data.rwdata (), numel ());
 
   if (make_uniq)
     uniq ();
--- a/liboctave/util/str-vec.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/util/str-vec.h	Mon Feb 26 23:30:33 2024 -0500
@@ -34,9 +34,7 @@
 
 #include "Array.h"
 
-class
-OCTAVE_API
-string_vector
+class OCTAVE_API string_vector
 {
 public:
 
--- a/liboctave/util/unwind-prot.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/util/unwind-prot.h	Mon Feb 26 23:30:33 2024 -0500
@@ -37,9 +37,7 @@
 
 OCTAVE_BEGIN_NAMESPACE(octave)
 
-class
-OCTAVE_API
-unwind_protect : public action_container
+class OCTAVE_API unwind_protect : public action_container
 {
 public:
 
@@ -92,9 +90,7 @@
 // of seeing an exception (or interrupt) in the cleanup actions.
 // Not that we can do much about it, but at least we won't crash.
 
-class
-OCTAVE_API
-unwind_protect_safe : public unwind_protect
+class OCTAVE_API unwind_protect_safe : public unwind_protect
 {
 private:
 
--- a/liboctave/util/url-transfer.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/util/url-transfer.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -425,7 +425,7 @@
   {
     struct curl_slist *slist = nullptr;
 
-    unwind_action cleanup_slist ([=] () { curl_slist_free_all (slist); });
+    unwind_action cleanup_slist ([slist] () { curl_slist_free_all (slist); });
 
     std::string cmd = "rnfr " + oldname;
     slist = curl_slist_append (slist, cmd.c_str ());
@@ -597,7 +597,7 @@
 
     struct curl_slist *slist = nullptr;
 
-    unwind_action cleanup_slist ([=] () { curl_slist_free_all (slist); });
+    unwind_action cleanup_slist ([slist] () { curl_slist_free_all (slist); });
 
     slist = curl_slist_append (slist, "pwd");
     SETOPTR (CURLOPT_POSTQUOTE, slist);
@@ -688,7 +688,7 @@
   {
     struct curl_slist *slist = nullptr;
 
-    unwind_action cleanup_slist ([=] () { curl_slist_free_all (slist); });
+    unwind_action cleanup_slist ([slist] () { curl_slist_free_all (slist); });
 
     if (param.numel () >= 2)
       {
@@ -715,7 +715,7 @@
 
     SETOPT (CURLOPT_URL, m_host_or_url.c_str ());
 
-    unwind_action cleanup_mime ([=] () { curl_mime_free (mime); });
+    unwind_action cleanup_mime ([mime] () { curl_mime_free (mime); });
 
     if (param.numel () >= 2)
       {
@@ -890,7 +890,7 @@
   {
     struct curl_slist *slist = nullptr;
 
-    unwind_action cleanup_slist ([=] () { curl_slist_free_all (slist); });
+    unwind_action cleanup_slist ([slist] () { curl_slist_free_all (slist); });
 
     std::string cmd = action + ' ' + file_or_dir;
 
--- a/liboctave/util/url-transfer.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/liboctave/util/url-transfer.h	Mon Feb 26 23:30:33 2024 -0500
@@ -51,9 +51,7 @@
   std::string CertificateFilename;
 };
 
-class
-OCTAVE_API
-base_url_transfer
+class OCTAVE_API base_url_transfer
 {
 public:
 
@@ -160,9 +158,7 @@
   std::ostream *m_curr_ostream;
 };
 
-class
-OCTAVE_API
-url_transfer
+class OCTAVE_API url_transfer
 {
 public:
 
--- a/oct-conf-post-public.in.h	Mon Feb 26 23:28:09 2024 -0500
+++ b/oct-conf-post-public.in.h	Mon Feb 26 23:30:33 2024 -0500
@@ -419,9 +419,3 @@
 #if defined (OCTAVE_ENABLE_OPENMP)
 #  define HAVE_OPENMP 1
 #endif
-
-#if defined (OCTAVE_ENABLE_FLOAT_TRUNCATE)
-#  define OCTAVE_FLOAT_TRUNCATE volatile
-#else
-#  define OCTAVE_FLOAT_TRUNCATE
-#endif
--- a/scripts/deprecated/module.mk	Mon Feb 26 23:28:09 2024 -0500
+++ b/scripts/deprecated/module.mk	Mon Feb 26 23:30:33 2024 -0500
@@ -1,9 +1,7 @@
 FCN_FILE_DIRS += %reldir%
 
 %canon_reldir%_FCN_FILES = \
-  %reldir%/.oct-config \
-  %reldir%/shift.m \
-  %reldir%/sparse_auto_mutate.m
+  %reldir%/.oct-config
 
 %canon_reldir%dir = $(fcnfiledir)/deprecated
 
--- a/scripts/deprecated/shift.m	Mon Feb 26 23:28:09 2024 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,115 +0,0 @@
-########################################################################
-##
-## Copyright (C) 1995-2024 The Octave Project Developers
-##
-## See the file COPYRIGHT.md in the top-level directory of this
-## distribution or <https://octave.org/copyright/>.
-##
-## 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
-## <https://www.gnu.org/licenses/>.
-##
-########################################################################
-
-## -*- texinfo -*-
-## @deftypefn  {} {@var{y} =} shift (@var{x}, @var{b})
-## @deftypefnx {} {@var{y} =} shift (@var{x}, @var{b}, @var{dim})
-##
-## @code{shift} is deprecated and will be removed in Octave version 10.  Use
-## @code{circshift} instead.
-##
-## If @var{x} is a vector, perform a circular shift of length @var{b} of
-## the elements of @var{x}.
-##
-## If @var{x} is a matrix, do the same for each column of @var{x}.
-##
-## If the optional @var{dim} argument is given, operate along this dimension.
-## @seealso{circshift}
-## @end deftypefn
-
-## FIXME: DEPRECATED: Remove in version 10.
-
-function y = shift (x, b, dim)
-
-  persistent warned = false;
-  if (! warned)
-    warned = true;
-    warning ("Octave:deprecated-function",
-             "shift is deprecated and will be removed from a future version of Octave, please use circshift instead\n");
-  endif
-
-  if (nargin < 2)
-    print_usage ();
-  endif
-
-  if (numel (x) < 1)
-    error ("shift: X must not be empty");
-  elseif (! (isscalar (b) && b == fix (b)))
-    error ("shift: B must be an integer");
-  endif
-
-  nd = ndims (x);
-  sz = size (x);
-
-  if (nargin == 3)
-    if (!(isscalar (dim) && dim == fix (dim))
-        || !(1 <= dim && dim <= nd))
-      error ("shift: DIM must be an integer and a valid dimension");
-    endif
-  else
-    ## Find the first non-singleton dimension.
-    (dim = find (sz > 1, 1)) || (dim = 1);
-  endif
-
-  d = sz(dim);
-
-  idx = repmat ({':'}, nd, 1);
-  if (b > 0)
-    b = rem (b, d);
-    idx{dim} = [d-b+1:d, 1:d-b];
-  elseif (b < 0)
-    b = rem (abs (b), d);
-    idx{dim} = [b+1:d, 1:b];
-  endif
-
-  y = x(idx{:});
-
-endfunction
-
-
-%!test
-%! a = [1, 2, 3];
-%! b = [4, 5, 6];
-%! c = [7, 8, 9];
-%!
-%! r = [a, b, c];
-%! m = [a; b; c];
-%!
-%! assert (shift (r, 0), r);
-%! assert (shift (r, 3), [c, a, b]);
-%! assert (shift (r, -6), [c, a, b]);
-%! assert (shift (r, -3), [b, c, a]);
-%! assert (shift (m, 1), [c; a; b]);
-%! assert (shift (m, -2), [c; a; b]);
-
-## Test input validation
-%!error <Invalid call> shift ()
-%!error <Invalid call> shift (1)
-%!error <X must not be empty> shift ([], 1)
-%!error <B must be an integer> shift (ones (2), ones (2))
-%!error <B must be an integer> shift (ones (2), 1.5)
-%!error <DIM must be an integer> shift (1, 1, 1.5)
-%!error <DIM must be .* a valid dimension> shift (1, 1, 0)
-%!error <DIM must be .* a valid dimension> shift (1, 1, 3)
--- a/scripts/deprecated/sparse_auto_mutate.m	Mon Feb 26 23:28:09 2024 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,75 +0,0 @@
-########################################################################
-##
-## Copyright (C) 2022-2024 The Octave Project Developers
-##
-## See the file COPYRIGHT.md in the top-level directory of this
-## distribution or <https://octave.org/copyright/>.
-##
-## 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
-## <https://www.gnu.org/licenses/>.
-##
-########################################################################
-
-## -*- texinfo -*-
-## @deftypefn  {} {@var{val} =} sparse_auto_mutate ()
-## @deftypefnx {} {@var{old_val} =} sparse_auto_mutate (@var{new_val})
-## @deftypefnx {} {@var{old_val} =} sparse_auto_mutate (@var{new_val}, "local")
-##
-## @code{sparse_auto_mutate} is deprecated and will be removed in Octave
-## version 10.
-##
-## The @code{sparse_auto_mutate} function no longer has any effect on Octave's
-## behavior.  Previously, after calling @code{sparse_auto_mutate (true)},
-## Octave would automatically convert sparse matrices to full when a sparse
-## matrix required more memory than simply using full matrix storage.  This
-## setting was false by default for compatibility with @sc{matlab}.  Now you
-## must manually convert to full storage when desired (use @code{full}).
-## @seealso{full}
-## @end deftypefn
-
-## FIXME: DEPRECATED: Remove in version 10.
-
-function retval = sparse_auto_mutate (val, opt)
-
-  persistent warned = false;
-  if (! warned)
-    warned = true;
-    warning ("Octave:deprecated-function",
-             "sparse_auto_mutate is obsolete, has no effect, and will be removed from a future version of Octave\n");
-  endif
-
-  if (nargin == 0 || nargout > 0)
-    retval = false;  # Always false now.
-    return;
-  endif
-
-  if (nargin == 2)
-    if (! (ischar (opt) && strcmp (opt, "local")))
-      error ('sparse_auto_mutate: second argument must be "local"');
-    endif
-    nargin = 1;
-  endif
-
-  ## Don't bother warning that "local" is invalid outside of a function.
-  if (nargin > 1)
-    print_usage ();
-  endif
-
-  if (! islogical (val))
-    error ("sparse_auto_mutate: argument must be a logical value");
-  endif
-
-endfunction
--- a/scripts/geometry/griddata.m	Mon Feb 26 23:28:09 2024 -0500
+++ b/scripts/geometry/griddata.m	Mon Feb 26 23:30:33 2024 -0500
@@ -40,9 +40,10 @@
 ## @code{meshgrid} and @var{z} is a 2-D matrix matching the resulting size of
 ## the X-Y grid.
 ##
-## The interpolation points are (@var{xi}, @var{yi}).  If, and only if,
-## @var{xi} is a row vector and @var{yi} is a column vector, then
-## @code{meshgrid} will be used to create a mesh of interpolation points.
+## The interpolation points are (@var{xi}, @var{yi}).  If either @var{xi} or
+## @var{y} is a row vector and the other is a column vector, then
+## @code{meshgrid (@var{xi}, @var{yi})} will be used to create a mesh of
+## interpolation points.
 ##
 ## For 3-D interpolation, the inputs @var{x}, @var{y}, and @var{z} define the
 ## points where the function @code{@var{v} = f (@var{x}, @var{y}, @var{z})}
@@ -51,6 +52,10 @@
 ## a 3-D grid with @code{meshgrid}.  The size of the input @var{v} must match
 ## the size of the original data, either as a vector or a matrix.
 ##
+## The outputs @var{zi} (for 2-D) or @var{vi} (for 3-D) will contain the
+## interpolated values of @var{z} or @var{v}, respectively, with the output
+## size matching that of the interpolation points.
+##
 ## The optional input interpolation @var{method} can be @qcode{"nearest"},
 ## @qcode{"linear"}, or for 2-D data @qcode{"v4"}.  When the method is
 ## @qcode{"nearest"}, the output @var{vi} will be the closest point in the
@@ -110,18 +115,15 @@
       error ("griddata: lengths of X, Y must match the columns and rows of Z");
     endif
 
-    ## Meshgrid xi and yi if they are a row and column vector, but not
-    ## if they are simply vectors of the same size (for compatibility).
-    if (isrow (xi) && iscolumn (yi))
+    ## Meshgrid xi and yi if one is a row vector and the other is a column
+    ## vector, but not if they are vectors with the same orientation.
+    if ((isrow (xi) && iscolumn (yi)) || (iscolumn (xi) && isrow (yi)))
       [xi, yi] = meshgrid (xi, yi);
-    elseif (isvector (xi) && isvector (yi))
-      ## Otherwise, convert to column vectors
-      xi = xi(:);
-      yi = yi(:);
-    endif
-
-    if (! size_equal (xi, yi))
-      error ("griddata: XI and YI must be vectors or matrices of same size");
+    else
+      ## Ensure vector and matrix query point inputs are identically sized.
+      if (! size_equal (xi, yi))
+        error ("griddata: XI and YI must be vectors or matrices of same size");
+      endif
     endif
 
     if (nargin == 6)
@@ -334,12 +336,36 @@
 %!testif HAVE_QHULL <*65146> # Ensure correct output for 3-point queries.
 %! xi = [1 2 3];
 %! a = griddata (xi, xi, xi .* xi', xi, xi, "linear");
-%! assert (a, [1, 4, 9]', 10*eps);
+%! assert (a, [1, 4, 9], 10*eps);
 %! a = griddata (xi, xi, xi .* xi', xi', xi', "linear");
 %! assert (a, [1, 4, 9]', 10*eps);
 %! a = griddata (xi, xi, xi .* xi', [xi; xi], [xi; xi], "linear");
 %! assert (a, [1, 4, 9; 1, 4, 9], 10*eps);
 
+## Verify output orientation for various input vector shape combinations
+%!testif HAVE_QHULL <*65134>
+%! x = [1:10];
+%! y = [1:10];
+%! z = x .* y';
+%! xi = [1, 5, 10];
+%! yi = [1, 5];
+%! [xx, yy, vv] = griddata (x, y, z, xi, xi, 'nearest'); # Row, Row
+%! assert (xx, xi);
+%! assert (yy, xi);
+%! assert (size (vv), [1, 3]);
+%! [xx, yy, vv] = griddata (x, y, z, xi', xi', 'nearest'); # Col, Col
+%! assert (xx, xi');
+%! assert (yy, xi');
+%! assert (size (vv), [3, 1]);
+%! [xx, yy, vv] = griddata (x, y, z, xi, yi', 'nearest'); # Row, Col
+%! assert (xx, [xi; xi]);
+%! assert (yy, [yi', yi', yi']);
+%! assert (vv, [1, 5, 10; 5, 25, 50]);
+%! [xx, yy, vv] = griddata (x, y, z, xi', yi, 'nearest'); # Col, Row
+%! assert (xx, [xi; xi]);
+%! assert (yy, [yi', yi', yi']);
+%! assert (vv, [1, 5, 10; 5, 25, 50]);
+
 ## Test input validation
 %!error <Invalid call> griddata ()
 %!error <Invalid call> griddata (1)
@@ -354,6 +380,8 @@
 %!error <the columns and rows of Z> griddata (1:4, 1:3, ones (3,5), 1:3, 1:3)
 %!error <XI and YI .* matrices of same size> griddata (1:3, 1:3, 1:3, 1:4, 1:3)
 %!error <XI and YI .* matrices of same size> griddata (1:3, 1:3, 1:3, 1:3, 1:4)
+%!error <XI and YI .* matrices of same size> griddata (1:3, 1:3, 1:3, [1:4]', [1:3]')
+%!error <XI and YI .* matrices of same size> griddata (1:3, 1:3, 1:3, [1:3]', [1:4]')
 %!error <METHOD must be a string> griddata (1,2,3,4,5, {"linear"})
 %!error <"cubic" .* not yet implemented> griddata (1,2,3,4,5, "cubic")
 %!error <"natural" .* not yet implemented> griddata (1,2,3,4,5, "natural")
--- a/scripts/help/error_ids.m	Mon Feb 26 23:28:09 2024 -0500
+++ b/scripts/help/error_ids.m	Mon Feb 26 23:30:33 2024 -0500
@@ -46,6 +46,9 @@
 ## @item Octave:invalid-input-arg
 ## Indicates that a function was called with invalid input arguments.
 ##
+## @item Octave:parse-error
+## The interpreter failed to parse (read) specified code.
+##
 ## @item Octave:undefined-function
 ## Indicates a call to a function that is not defined.  The function may exist
 ## but Octave is unable to find it in the search path.
--- a/scripts/image/autumn.m	Mon Feb 26 23:28:09 2024 -0500
+++ b/scripts/image/autumn.m	Mon Feb 26 23:30:33 2024 -0500
@@ -30,15 +30,16 @@
 ## This colormap ranges from red through orange to yellow.
 ##
 ## The argument @var{n} must be a scalar.
-## If unspecified, the length of the current colormap, or 64, is used.
+## If @var{n} is not specified the length of the current colormap is used.  If
+## there is no current colormap the default value of 256 is used.
 ## @seealso{colormap}
 ## @end deftypefn
 
 function map = autumn (n)
 
   if (nargin == 1)
-    if (! isscalar (n))
-      error ("autumn: N must be a scalar");
+    if (! (isscalar (n) && isreal (n) && n == fix (n)))
+      error ("autumn: N must be a scalar integer");
     endif
     n = double (n);
   else
@@ -46,7 +47,7 @@
     if (! isempty (hf))
       n = rows (get (hf, "colormap"));
     else
-      n = 64;
+      n = 256;
     endif
   endif
 
@@ -71,3 +72,22 @@
 %!  rgbplot (cmap, "composite");
 %! subplot (2, 1, 2);
 %!  rgbplot (cmap);
+
+
+%!assert (size (autumn ()), [256, 3])
+%!assert (size (autumn (16)), [16, 3])
+
+%!assert (autumn (1), [1, 0, 0])
+%!assert (autumn (true), double ([1, 0, 0]))
+%!assert (autumn (char (1)), double ([1, 0, 0]))
+%!assert (autumn (int32 (1)), double ([1, 0, 0]))
+
+%!assert (autumn (0), zeros (0, 3))
+%!assert (autumn (-1), zeros (0, 3))
+
+%!assert (autumn (11), [ones(1,11); [0:0.1:1]; zeros(1,11)]', eps)
+
+## Input validation
+%!error <N must be a scalar integer> autumn ("foo")
+%!error <N must be a scalar integer> autumn ([1, 2, 3])
+%!error <N must be a scalar integer> autumn ({1, 2, 3})
--- a/scripts/image/bone.m	Mon Feb 26 23:28:09 2024 -0500
+++ b/scripts/image/bone.m	Mon Feb 26 23:30:33 2024 -0500
@@ -30,15 +30,16 @@
 ## gray-blue shades.
 ##
 ## The argument @var{n} must be a scalar.
-## If unspecified, the length of the current colormap, or 64, is used.
+## If @var{n} is not specified the length of the current colormap is used.  If
+## there is no current colormap the default value of 256 is used.
 ## @seealso{colormap}
 ## @end deftypefn
 
 function map = bone (n)
 
   if (nargin == 1)
-    if (! isscalar (n))
-      error ("bone: N must be a scalar");
+    if (! (isscalar (n) && isreal (n) && n == fix (n)))
+      error ("bone: N must be a scalar integer");
     endif
     n = double (n);
   else
@@ -46,7 +47,7 @@
     if (! isempty (hf))
       n = rows (get (hf, "colormap"));
     else
-      n = 64;
+      n = 256;
     endif
   endif
 
@@ -98,3 +99,29 @@
 %!  rgbplot (cmap, "composite");
 %! subplot (2, 1, 2);
 %!  rgbplot (cmap);
+
+
+%!assert (size (bone ()), [256, 3])
+%!assert (size (bone (16)), [16, 3])
+
+%!assert (bone (1), [1/8, 1/8, 1/8])
+%!assert (bone (true), double ([1/8, 1/8, 1/8]))
+%!assert (bone (char (1)), double ([1/8, 1/8, 1/8]))
+%!assert (bone (int32 (1)), double ([1/8, 1/8, 1/8]))
+%!assert (bone (2), [1/16, 1/8, 1/8; 1 ,1, 1])
+
+%!assert (bone (0), zeros (0, 3))
+%!assert (bone (-1), zeros (0, 3))
+
+%!test
+%! a = [    0,     0,   1/8;
+%!       7/32, 11/32, 11/32;
+%!      23/48,  9/16,  9/16;
+%!      71/96, 25/32, 25/32;
+%!          1,     1,     1];
+%! assert (bone (5), a, eps)
+
+## Input validation
+%!error <N must be a scalar integer> bone ("foo")
+%!error <N must be a scalar integer> bone ([1, 2, 3])
+%!error <N must be a scalar integer> bone ({1, 2, 3})
--- a/scripts/image/colorcube.m	Mon Feb 26 23:28:09 2024 -0500
+++ b/scripts/image/colorcube.m	Mon Feb 26 23:30:33 2024 -0500
@@ -34,16 +34,25 @@
 ## blue, and gray.
 ##
 ## The argument @var{n} must be a scalar.
-## If unspecified, the length of the current colormap, or 64, is used.
+## If @var{n} is not specified the length of the current colormap is used.  If
+## there is no current colormap the default value of 256 is used.
 ## @seealso{colormap}
 ## @end deftypefn
 
 function map = colorcube (n)
 
-  if (nargin == 0)
-    n = rows (colormap);
-  elseif (! isscalar (n))
-    error ("colorcube: N must be a scalar");
+  if (nargin == 1)
+    if (! (isscalar (n) && isreal (n) && n == fix (n)))
+      error ("colorcube: N must be a scalar integer");
+    endif
+    n = double (n);
+  else
+    hf = get (0, "currentfigure");
+    if (! isempty (hf))
+      n = rows (get (hf, "colormap"));
+    else
+      n = 256;
+    endif
   endif
 
   if (n < 9)
@@ -99,3 +108,37 @@
 %! axis ([1, 64, 0, 1], "xy");
 %! set (gca, "xtick", []);
 %! colormap (colorcube (64));
+
+
+%!assert (size (colorcube ()), [256, 3])
+%!assert (size (colorcube (16)), [16, 3])
+
+%!assert (colorcube (1), [0, 0, 0])
+%!assert (colorcube (true), double ([0, 0, 0]))
+%!assert (colorcube (char (1)), double ([0, 0, 0]))
+%!assert (colorcube (int32 (1)), double ([0, 0, 0]))
+
+%!assert (colorcube (0), zeros (0, 3))
+%!assert (colorcube (-1), zeros (0, 3))
+
+%!assert (colorcube (8), gray (8))
+
+%!test
+%! a = [1,   1,   0;
+%!      0,   1,   1;
+%!      1,   0,   1;
+%!      0.5, 0,   0;
+%!      1,   0,   0;
+%!      0,   0.5, 0;
+%!      0,   1,   0;
+%!      0,   0,   0.5;
+%!      0,   0,   1;
+%!      0,   0,   0;
+%!      0.5, 0.5, 0.5;
+%!      1,   1,   1];
+%! assert (colorcube (12), a, eps)
+
+## Input validation
+%!error <N must be a scalar integer> colorcube ("foo")
+%!error <N must be a scalar integer> colorcube ([1, 2, 3])
+%!error <N must be a scalar integer> colorcube ({1, 2, 3})
--- a/scripts/image/colormap.m	Mon Feb 26 23:28:09 2024 -0500
+++ b/scripts/image/colormap.m	Mon Feb 26 23:30:33 2024 -0500
@@ -32,7 +32,9 @@
 ## @deftypefnx {} {} colormap @var{map_name}
 ## Query or set the current colormap.
 ##
-## With no input arguments, @code{colormap} returns the current color map.
+## With no input arguments, @code{colormap} returns the current color map.  If
+## there is no current figure, a new figure will be opened and the default
+## color map will be returned.
 ##
 ## @code{colormap (@var{map})} sets the current colormap to @var{map}.  The
 ## colormap should be an @var{n} row by 3 column matrix.  The columns
@@ -40,7 +42,7 @@
 ## must be between 0 and 1 inclusive.  The new colormap is returned.
 ##
 ## @code{colormap (@qcode{"default"})} restores the default colormap (the
-## @code{viridis} map with 64 entries).  The default colormap is returned.
+## @code{viridis} map with 256 entries).  The default colormap is returned.
 ##
 ## The map may also be specified by a string, @var{map_name}, which
 ## is the name of a function that returns a colormap.
@@ -108,7 +110,7 @@
     if (ischar (map))
       map = lower (map);
       if (strcmp (map, "default"))
-        map = viridis (64);
+        map = viridis (256);
       else
         try
           map = feval (map);
@@ -169,9 +171,9 @@
 %!   cmap = (get (gcf, "colormap"));
 %!   assert (cmap, cmaptst);
 %!   colormap ("default");
-%!   assert (colormap (), viridis (64));
+%!   assert (colormap (), viridis (256));
 %!   colormap ("ocean");
-%!   assert (colormap, ocean (64));
+%!   assert (colormap, ocean (256));
 %! unwind_protect_cleanup
 %!   close (hf);
 %! end_unwind_protect
--- a/scripts/image/cool.m	Mon Feb 26 23:28:09 2024 -0500
+++ b/scripts/image/cool.m	Mon Feb 26 23:30:33 2024 -0500
@@ -29,15 +29,16 @@
 ## Create color colormap.  The colormap varies from cyan to magenta.
 ##
 ## The argument @var{n} must be a scalar.
-## If unspecified, the length of the current colormap, or 64, is used.
+## If @var{n} is not specified the length of the current colormap is used.  If
+## there is no current colormap the default value of 256 is used.
 ## @seealso{colormap}
 ## @end deftypefn
 
 function map = cool (n)
 
   if (nargin == 1)
-    if (! isscalar (n))
-      error ("cool: N must be a scalar");
+    if (! (isscalar (n) && isreal (n) && n == fix (n)))
+      error ("cool: N must be a scalar integer");
     endif
     n = double (n);
   else
@@ -45,7 +46,7 @@
     if (! isempty (hf))
       n = rows (get (hf, "colormap"));
     else
-      n = 64;
+      n = 256;
     endif
   endif
 
@@ -70,3 +71,22 @@
 %!  rgbplot (cmap, "composite");
 %! subplot (2, 1, 2);
 %!  rgbplot (cmap);
+
+
+%!assert (size (cool ()), [256, 3])
+%!assert (size (cool (16)), [16, 3])
+
+%!assert (cool (1), [0, 1, 1])
+%!assert (cool (true), double ([0, 1, 1]))
+%!assert (cool (char (1)), double ([0, 1, 1]))
+%!assert (cool (int32 (1)), double ([0, 1, 1]))
+
+%!assert (cool (0), zeros (0, 3))
+%!assert (cool (-1), zeros (0, 3))
+
+%!assert (cool (11), [[0:0.1:1]; [1:-0.1:0]; ones(1,11)]', eps)
+
+## Input validation
+%!error <N must be a scalar integer> cool ("foo")
+%!error <N must be a scalar integer> cool ([1, 2, 3])
+%!error <N must be a scalar integer> cool ({1, 2, 3})
--- a/scripts/image/copper.m	Mon Feb 26 23:28:09 2024 -0500
+++ b/scripts/image/copper.m	Mon Feb 26 23:30:33 2024 -0500
@@ -30,15 +30,16 @@
 ## tone.
 ##
 ## The argument @var{n} must be a scalar.
-## If unspecified, the length of the current colormap, or 64, is used.
+## If @var{n} is not specified the length of the current colormap is used.  If
+## there is no current colormap the default value of 256 is used.
 ## @seealso{colormap}
 ## @end deftypefn
 
 function map = copper (n)
 
   if (nargin == 1)
-    if (! isscalar (n))
-      error ("copper: N must be a scalar");
+    if (! (isscalar (n) && isreal (n) && n == fix (n)))
+      error ("copper: N must be a scalar integer");
     endif
     n = double (n);
   else
@@ -46,7 +47,7 @@
     if (! isempty (hf))
       n = rows (get (hf, "colormap"));
     else
-      n = 64;
+      n = 256;
     endif
   endif
 
@@ -73,3 +74,25 @@
 %!  rgbplot (cmap, "composite");
 %! subplot (2, 1, 2);
 %!  rgbplot (cmap);
+
+
+%!assert (size (copper ()), [256, 3])
+%!assert (size (copper (16)), [16, 3])
+
+%!assert (copper (1), [0, 0, 0])
+%!assert (copper (true), double ([0, 0, 0]))
+%!assert (copper (char (1)), double ([0, 0, 0]))
+%!assert (copper (int32 (1)), double ([0, 0, 0]))
+
+%!assert (copper (0), zeros (0, 3))
+%!assert (copper (-1), zeros (0, 3))
+
+%!test
+%! a = [0.25, 0.15624, 0.0995] .* [0:5]';
+%! a(6) = 1;
+%! assert (copper (6), a, eps)
+
+## Input validation
+%!error <N must be a scalar integer> copper ("foo")
+%!error <N must be a scalar integer> copper ([1, 2, 3])
+%!error <N must be a scalar integer> copper ({1, 2, 3})
--- a/scripts/image/cubehelix.m	Mon Feb 26 23:28:09 2024 -0500
+++ b/scripts/image/cubehelix.m	Mon Feb 26 23:30:33 2024 -0500
@@ -40,7 +40,8 @@
 ## @end example
 ##
 ## The argument @var{n} must be a scalar.
-## If unspecified, the length of the current colormap, or 64, is used.
+## If @var{n} is not specified the length of the current colormap is used.  If
+## there is no current colormap the default value of 256 is used.
 ##
 ## Reference: Green, D. A., 2011,
 ## @cite{A @nospell{colour} scheme for the display of astronomical intensity
@@ -52,8 +53,8 @@
 function map = cubehelix (n, start = 0.5, rots = -1.5, hue = 1, gamma = 1)
 
   if (nargin > 0)
-    if (! isscalar (n))
-      error ("cubehelix: N must be a scalar");
+    if (! (isscalar (n) && isreal (n) && n == fix (n)))
+      error ("cubehelix: N must be a scalar integer");
     endif
     n = double (n);
   else
@@ -61,7 +62,7 @@
     if (! isempty (hf))
       n = rows (get (hf, "colormap"));
     else
-      n = 64;
+      n = 256;
     endif
   endif
 
@@ -96,3 +97,33 @@
 %!  rgbplot (cmap, "composite");
 %! subplot (2, 1, 2);
 %!  rgbplot (cmap);
+
+
+%!assert (size (cubehelix ()), [256, 3])
+%!assert (size (cubehelix (16)), [16, 3])
+
+%!assert (cubehelix (1), [0,0,0])
+%!assert (cubehelix (true), double ([0,0,0]))
+%!assert (cubehelix (char (1)), double ([0,0,0]))
+%!assert (cubehelix (int32 (1)), double ([0,0,0]))
+
+%!assert (cubehelix (0), zeros (0, 3))
+%!assert (cubehelix (-1), zeros (0, 3))
+
+%!assert (cubehelix (2), [0, 0, 0; 1, 1, 1])
+%!assert ([cubehelix]([1,end],:), [0, 0, 0; 1, 1, 1])
+
+%!shared a
+%! a = [0,                   0,                   0;
+%!      0.17004232121057959, 0.43679759647517287, 0.22372555555555556;
+%!      0.82995767878942041, 0.56320240352482713, 0.77627444444444445;
+%!      1,                   1,                   1];
+
+%!assert (cubehelix (4), a, eps)
+
+%!shared  # Clear shared varibles to avoid echo on unrelated test errors.
+
+## Input validation
+%!error <N must be a scalar integer> cubehelix ("foo")
+%!error <N must be a scalar integer> cubehelix ([1, 2, 3])
+%!error <N must be a scalar integer> cubehelix ({1, 2, 3})
--- a/scripts/image/flag.m	Mon Feb 26 23:28:09 2024 -0500
+++ b/scripts/image/flag.m	Mon Feb 26 23:30:33 2024 -0500
@@ -30,15 +30,16 @@
 ## black with each index change.
 ##
 ## The argument @var{n} must be a scalar.
-## If unspecified, the length of the current colormap, or 64, is used.
+## If @var{n} is not specified the length of the current colormap is used.  If
+## there is no current colormap the default value of 256 is used.
 ## @seealso{colormap}
 ## @end deftypefn
 
 function map = flag (n)
 
   if (nargin == 1)
-    if (! isscalar (n))
-      error ("flag: N must be a scalar");
+    if (! (isscalar (n) && isreal (n) && n == fix (n)))
+      error ("flag: N must be a scalar integer");
     endif
     n = double (n);
   else
@@ -46,7 +47,7 @@
     if (! isempty (hf))
       n = rows (get (hf, "colormap"));
     else
-      n = 64;
+      n = 256;
     endif
   endif
   if (n == 1)
@@ -68,3 +69,36 @@
 %!  rgbplot (cmap, "composite");
 %! subplot (2, 1, 2);
 %!  rgbplot (cmap);
+
+
+
+%!assert (size (flag ()), [256, 3])
+%!assert (size (flag (16)), [16, 3])
+
+%!assert (flag (1), [1, 0, 0])
+%!assert (flag (true), double ([1, 0, 0]))
+%!assert (flag (char (1)), double ([1, 0, 0]))
+%!assert (flag (int32 (1)), double ([1, 0, 0]))
+
+%!assert (flag (0), zeros (0, 3))
+%!assert (flag (-1), zeros (0, 3))
+
+%!test
+%! a = [1,   0,   0;
+%!      1,   1,   1;
+%!      0,   0,   1;
+%!      0,   0,   0;
+%!      1,   0,   0;
+%!      1,   1,   1;
+%!      0,   0,   1;
+%!      0,   0,   0;
+%!      1,   0,   0;
+%!      1,   1,   1;
+%!      0,   0,   1;
+%!      0,   0,   0];
+%! assert (flag (12), a, eps)
+
+## Input validation
+%!error <N must be a scalar integer> flag ("foo")
+%!error <N must be a scalar integer> flag ([1, 2, 3])
+%!error <N must be a scalar integer> flag ({1, 2, 3})
--- a/scripts/image/gray.m	Mon Feb 26 23:28:09 2024 -0500
+++ b/scripts/image/gray.m	Mon Feb 26 23:30:33 2024 -0500
@@ -30,15 +30,16 @@
 ## of gray.
 ##
 ## The argument @var{n} must be a scalar.
-## If unspecified, the length of the current colormap, or 64, is used.
+## If @var{n} is not specified the length of the current colormap is used.  If
+## there is no current colormap the default value of 256 is used.
 ## @seealso{colormap}
 ## @end deftypefn
 
 function map = gray (n)
 
   if (nargin == 1)
-    if (! isscalar (n))
-      error ("gray: N must be a scalar");
+    if (! (isscalar (n) && isreal (n) && n == fix (n)))
+      error ("gray: N must be a scalar integer");
     endif
     n = double (n);
   else
@@ -46,7 +47,7 @@
     if (! isempty (hf))
       n = rows (get (hf, "colormap"));
     else
-      n = 64;
+      n = 256;
     endif
   endif
 
@@ -69,3 +70,22 @@
 %!  rgbplot (cmap, "composite");
 %! subplot (2, 1, 2);
 %!  rgbplot (cmap);
+
+
+%!assert (size (gray ()), [256, 3])
+%!assert (size (gray (16)), [16, 3])
+
+%!assert (gray (1), [0, 0, 0])
+%!assert (gray (true), double ([0, 0, 0]))
+%!assert (gray (char (1)), double ([0, 0, 0]))
+%!assert (gray (int32 (1)), double ([0, 0, 0]))
+
+%!assert (gray (0), zeros (0, 3))
+%!assert (gray (-1), zeros (0, 3))
+
+%!assert (gray (11), [0:.1:1]' .* [1, 1, 1], eps)
+
+## Input validation
+%!error <N must be a scalar integer> gray ("foo")
+%!error <N must be a scalar integer> gray ([1, 2, 3])
+%!error <N must be a scalar integer> gray ({1, 2, 3})
--- a/scripts/image/hot.m	Mon Feb 26 23:28:09 2024 -0500
+++ b/scripts/image/hot.m	Mon Feb 26 23:30:33 2024 -0500
@@ -30,15 +30,16 @@
 ## red, orange, yellow, to white.
 ##
 ## The argument @var{n} must be a scalar.
-## If unspecified, the length of the current colormap, or 64, is used.
+## If @var{n} is not specified the length of the current colormap is used.  If
+## there is no current colormap the default value of 256 is used.
 ## @seealso{colormap}
 ## @end deftypefn
 
 function map = hot (n)
 
   if (nargin == 1)
-    if (! isscalar (n))
-      error ("hot: N must be a scalar");
+    if (! (isscalar (n) && isreal (n) && n == fix (n)))
+      error ("hot: N must be a scalar integer");
     endif
     n = double (n);
   else
@@ -46,7 +47,7 @@
     if (! isempty (hf))
       n = rows (get (hf, "colormap"));
     else
-      n = 64;
+      n = 256;
     endif
   endif
   if (n == 1)
@@ -86,3 +87,35 @@
 %!  rgbplot (cmap, "composite");
 %! subplot (2, 1, 2);
 %!  rgbplot (cmap);
+
+%!assert (size (hot ()), [256, 3])
+%!assert (size (hot (16)), [16, 3])
+
+%!assert (hot (1), [1, 1, 1])
+%!assert (hot (true), double ([1, 1, 1]))
+%!assert (hot (char (1)), double ([1, 1, 1]))
+%!assert (hot (int32 (1)), double ([1, 1, 1]))
+%!assert (hot (2), [1, 1, 1/2; 1, 1, 1])
+%!assert (hot (3), [1, 0, 0; 1, 1, 0; 1 1 1])
+
+%!assert (hot (0), zeros (0, 3))
+%!assert (hot (-1), zeros (0, 3))
+
+%!test
+%! a = [0.25, 0,    0;
+%!      0.50, 0,    0;
+%!      0.75, 0,    0;
+%!      1,    0,    0;
+%!      1,    0.25, 0;
+%!      1,    0.50, 0;
+%!      1,    0.75, 0;
+%!      1,    1,    0;
+%!      1,    1,    1/3;
+%!      1,    1,    2/3;
+%!      1,    1,    1];
+%! assert (hot (11), a, eps);
+
+## Input validation
+%!error <N must be a scalar integer> hot ("foo")
+%!error <N must be a scalar integer> hot ([1, 2, 3])
+%!error <N must be a scalar integer> hot ({1, 2, 3})
--- a/scripts/image/hsv.m	Mon Feb 26 23:28:09 2024 -0500
+++ b/scripts/image/hsv.m	Mon Feb 26 23:30:33 2024 -0500
@@ -35,15 +35,16 @@
 ## @code{hsv2rgb ([(0:N-1)'/N, ones(N,2)])}.
 ##
 ## The argument @var{n} must be a scalar.
-## If unspecified, the length of the current colormap, or 64, is used.
+## If @var{n} is not specified the length of the current colormap is used.  If
+## there is no current colormap the default value of 256 is used.
 ## @seealso{colormap}
 ## @end deftypefn
 
 function map = hsv (n)
 
   if (nargin == 1)
-    if (! isscalar (n))
-      error ("hsv: N must be a scalar");
+    if (! (isscalar (n) && isreal (n) && n == fix (n)))
+      error ("hsv: N must be a scalar integer");
     endif
     n = double (n);
   else
@@ -51,7 +52,7 @@
     if (! isempty (hf))
       n = rows (get (hf, "colormap"));
     else
-      n = 64;
+      n = 256;
     endif
   endif
 
@@ -75,3 +76,21 @@
 %!  rgbplot (cmap, "composite");
 %! subplot (2, 1, 2);
 %!  rgbplot (cmap);
+
+%!assert (size (hsv ()), [256, 3])
+%!assert (size (hsv (16)), [16, 3])
+
+%!assert (hsv (1), [1, 0, 0])
+%!assert (hsv (true), double ([1, 0, 0]))
+%!assert (hsv (char (1)), double ([1, 0, 0]))
+%!assert (hsv (int32 (1)), double ([1, 0, 0]))
+
+%!assert (hsv (0), zeros (0, 3))
+%!assert (hsv (-1), zeros (0, 3))
+
+%!assert (hsv (6)(:), [1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1]')
+
+## Input validation
+%!error <N must be a scalar integer> hsv ("foo")
+%!error <N must be a scalar integer> hsv ([1, 2, 3])
+%!error <N must be a scalar integer> hsv ({1, 2, 3})
--- a/scripts/image/jet.m	Mon Feb 26 23:28:09 2024 -0500
+++ b/scripts/image/jet.m	Mon Feb 26 23:30:33 2024 -0500
@@ -30,7 +30,8 @@
 ## cyan, green, yellow, red, to dark red.
 ##
 ## The argument @var{n} must be a scalar.
-## If unspecified, the length of the current colormap, or 64, is used.
+## If @var{n} is not specified the length of the current colormap is used.  If
+## there is no current colormap the default value of 256 is used.
 ##
 ## Programming Note: The @code{jet} colormap is not perceptually uniform.
 ## Try the @code{viridis} colormap if that is important.  For a drop-in
@@ -42,8 +43,8 @@
 function map = jet (n)
 
   if (nargin == 1)
-    if (! isscalar (n))
-      error ("jet: N must be a scalar");
+    if (! (isscalar (n) && isreal (n) && n == fix (n)))
+      error ("jet: N must be a scalar integer");
     endif
     n = double (n);
   else
@@ -51,7 +52,7 @@
     if (! isempty (hf))
       n = rows (get (hf, "colormap"));
     else
-      n = 64;
+      n = 256;
     endif
   endif
   if (n == 1)
@@ -110,3 +111,28 @@
 %!  rgbplot (cmap, "composite");
 %! subplot (2, 1, 2);
 %!  rgbplot (cmap);
+
+
+%!assert (size (jet ()), [256, 3])
+%!assert (size (jet (16)), [16, 3])
+
+%!assert (jet (1), [0, 1, 1])
+%!assert (jet (true), double ([0, 1, 1]))
+%!assert (jet (char (1)), double ([0, 1, 1]))
+%!assert (jet (int32 (1)), double ([0, 1, 1]))
+%!assert (jet (2), [0, 0, 1; 0, 1, 1])
+
+%!assert (jet (0), zeros (0, 3))
+%!assert (jet (-1), zeros (0, 3))
+
+%!test
+%! a = zeros(15, 3);
+%! a([3:13],2) = [0.25, 0.5, 0.75, 1, 1, 1, 1, 1, 0.75, 0.5, 0.25];
+%! a([7:15], 1) = a([3:11], 2);
+%! a(:,3) = flipud (a(:,1));
+%! assert (jet (15), a, eps)
+
+## Input validation
+%!error <N must be a scalar integer> jet ("foo")
+%!error <N must be a scalar integer> jet ([1, 2, 3])
+%!error <N must be a scalar integer> jet ({1, 2, 3})
--- a/scripts/image/lines.m	Mon Feb 26 23:28:09 2024 -0500
+++ b/scripts/image/lines.m	Mon Feb 26 23:30:33 2024 -0500
@@ -31,7 +31,8 @@
 ## orange, yellow, purple, green, light blue, and dark red.
 ##
 ## The argument @var{n} must be a scalar.
-## If unspecified, the length of the current colormap, or 64, is used.
+## If @var{n} is not specified the length of the current colormap is used.  If
+## there is no current colormap the default value of 256 is used.
 ## @seealso{colormap}
 ## @end deftypefn
 
@@ -39,15 +40,15 @@
 
   hf = get (groot, "currentfigure");
   if (nargin == 1)
-    if (! isscalar (n))
-      error ("lines: N must be a scalar");
+    if (! (isscalar (n) && isreal (n) && n == fix (n)))
+      error ("lines: N must be a scalar integer");
     endif
     n = double (n);
   else
     if (! isempty (hf))
       n = rows (get (hf, "colormap"));
     else
-      n = 64;
+      n = 256;
     endif
   endif
 
@@ -76,3 +77,25 @@
 %!  rgbplot (cmap, "composite");
 %! subplot (2, 1, 2);
 %!  rgbplot (cmap);
+
+
+%!assert (size (lines ()), [256, 3])
+%!assert (size (lines (16)), [16, 3])
+
+%!assert (lines (1), [0, 0, 1])
+%!assert (lines (true), double ([0, 0, 1]))
+%!assert (lines (char (1)), double ([0, 0, 1]))
+%!assert (lines (int32 (1)), double ([0, 0, 1]))
+
+%!assert (lines (0), zeros (0, 3))
+%!assert (lines (-1), zeros (0, 3))
+
+%!test
+%! a = get (groot, "defaultaxescolororder");
+%! nr = rows (a);
+%! assert (lines (3*nr), [a;a;a]);
+
+## Input validation
+%!error <N must be a scalar integer> lines ("foo")
+%!error <N must be a scalar integer> lines ([1, 2, 3])
+%!error <N must be a scalar integer> lines ({1, 2, 3})
--- a/scripts/image/movie.m	Mon Feb 26 23:28:09 2024 -0500
+++ b/scripts/image/movie.m	Mon Feb 26 23:30:33 2024 -0500
@@ -106,7 +106,7 @@
       error ("movie: N must be a nonzero integer");
     endif
 
-    if (! isscalar (n))
+    if (! (isscalar (n) && isreal (n) && n == fix (n)))
       idx = n(2:end)(:)';
       n = n(1);
       if (! isindex (idx, numel (mov)))
--- a/scripts/image/ocean.m	Mon Feb 26 23:28:09 2024 -0500
+++ b/scripts/image/ocean.m	Mon Feb 26 23:30:33 2024 -0500
@@ -30,15 +30,16 @@
 ## of blue.
 ##
 ## The argument @var{n} must be a scalar.
-## If unspecified, the length of the current colormap, or 64, is used.
+## If @var{n} is not specified the length of the current colormap is used.  If
+## there is no current colormap the default value of 256 is used.
 ## @seealso{colormap}
 ## @end deftypefn
 
 function map = ocean (n)
 
   if (nargin == 1)
-    if (! isscalar (n))
-      error ("ocean: N must be a scalar");
+    if (! (isscalar (n) && isreal (n) && n == fix (n)))
+      error ("ocean: N must be a scalar integer");
     endif
     n = double (n);
   else
@@ -46,7 +47,7 @@
     if (! isempty (hf))
       n = rows (get (hf, "colormap"));
     else
-      n = 64;
+      n = 256;
     endif
   endif
 
@@ -78,3 +79,30 @@
 %!  rgbplot (cmap, "composite");
 %! subplot (2, 1, 2);
 %!  rgbplot (cmap);
+
+
+%!assert (size (ocean ()), [256, 3])
+%!assert (size (ocean (16)), [16, 3])
+
+%!assert (ocean (1), [0, 0, 0])
+%!assert (ocean (true), double ([0, 0, 0]))
+%!assert (ocean (char (1)), double ([0, 0, 0]))
+%!assert (ocean (int32 (1)), double ([0, 0, 0]))
+
+%!assert (ocean (0), zeros (0, 3))
+%!assert (ocean (-1), zeros (0, 3))
+
+%!assert (ocean()(1,:), [0, 0, 0])
+%!assert (ocean()(end,:), [1, 1, 1])
+
+%!test
+%! a = zeros (11, 3);
+%! a([9:11],1) = [1/3, 2/3, 1];
+%! a([6:11], 2) = 1/6:1/6:1;
+%! a(:, 3) = 0:.1:1;
+%! assert (ocean (11), a, eps)
+
+## Input validation
+%!error <N must be a scalar integer> ocean ("foo")
+%!error <N must be a scalar integer> ocean ([1, 2, 3])
+%!error <N must be a scalar integer> ocean ({1, 2, 3})
--- a/scripts/image/pink.m	Mon Feb 26 23:28:09 2024 -0500
+++ b/scripts/image/pink.m	Mon Feb 26 23:30:33 2024 -0500
@@ -32,15 +32,16 @@
 ## This colormap gives a sepia tone when used on grayscale images.
 ##
 ## The argument @var{n} must be a scalar.
-## If unspecified, the length of the current colormap, or 64, is used.
+## If @var{n} is not specified the length of the current colormap is used.  If
+## there is no current colormap the default value of 256 is used.
 ## @seealso{colormap}
 ## @end deftypefn
 
 function map = pink (n)
 
   if (nargin == 1)
-    if (! isscalar (n))
-      error ("pink: N must be a scalar");
+    if (! (isscalar (n) && isreal (n) && n == fix (n)))
+      error ("pink: N must be a scalar integer");
     endif
     n = double (n);
   else
@@ -48,7 +49,7 @@
     if (! isempty (hf))
       n = rows (get (hf, "colormap"));
     else
-      n = 64;
+      n = 256;
     endif
   endif
   if (n == 1)
@@ -88,3 +89,29 @@
 %!  rgbplot (cmap, "composite");
 %! subplot (2, 1, 2);
 %!  rgbplot (cmap);
+
+
+%!assert (size (pink ()), [256, 3])
+%!assert (size (pink (16)), [16, 3])
+
+%!assert (pink (1), sqrt ([1/3, 1/3, 1/3]), eps)
+%!assert (pink (true), double (sqrt ([1/3, 1/3, 1/3])), eps)
+%!assert (pink (char (1)), double (sqrt ([1/3, 1/3, 1/3])), eps)
+%!assert (pink (int32 (1)), double (sqrt ([1/3, 1/3, 1/3])), eps)
+%!assert (pink (2), sqrt ([1/3, 1/3, 1/6; 1, 1, 1]))
+
+%!assert (pink (0), zeros (0, 3))
+%!assert (pink (-1), zeros (0, 3))
+%!assert (pink()(end,:), [1 1 1], eps)
+
+%!test
+%! a = sqrt ([1/3, 0,   0;
+%!            5/9, 5/9, 2/9;
+%!            7/9, 7/9, 11/18;
+%!            1,   1,   1]);
+%! assert (pink (4), a, eps)
+
+## Input validation
+%!error <N must be a scalar integer> pink ("foo")
+%!error <N must be a scalar integer> pink ([1, 2, 3])
+%!error <N must be a scalar integer> pink ({1, 2, 3})
--- a/scripts/image/prism.m	Mon Feb 26 23:28:09 2024 -0500
+++ b/scripts/image/prism.m	Mon Feb 26 23:30:33 2024 -0500
@@ -30,15 +30,16 @@
 ## green, blue and violet with each index change.
 ##
 ## The argument @var{n} must be a scalar.
-## If unspecified, the length of the current colormap, or 64, is used.
+## If @var{n} is not specified the length of the current colormap is used.  If
+## there is no current colormap the default value of 256 is used.
 ## @seealso{colormap}
 ## @end deftypefn
 
 function map = prism (n)
 
   if (nargin == 1)
-    if (! isscalar (n))
-      error ("prism: N must be a scalar");
+    if (! (isscalar (n) && isreal (n) && n == fix (n)))
+      error ("prism: N must be a scalar integer");
     endif
     n = double (n);
   else
@@ -46,7 +47,7 @@
     if (! isempty (hf))
       n = rows (get (hf, "colormap"));
     else
-      n = 64;
+      n = 256;
     endif
   endif
   if (n == 1)
@@ -68,3 +69,25 @@
 %!  rgbplot (cmap, "composite");
 %! subplot (2, 1, 2);
 %!  rgbplot (cmap);
+
+
+%!assert (size (prism ()), [256, 3])
+%!assert (size (prism (16)), [16, 3])
+
+%!assert (prism (1), [1, 0, 0])
+%!assert (prism (true), double ([1, 0, 0]))
+%!assert (prism (char (1)), double ([1, 0, 0]))
+%!assert (prism (int32 (1)), double ([1, 0, 0]))
+
+%!assert (prism (0), zeros (0, 3))
+%!assert (prism (-1), zeros (0, 3))
+
+%!test
+%! a = [1, 0, 0; 1, 1/2, 0; 1, 1, 0; 0, 1, 0; 0, 0, 1; 2/3, 0, 1];
+%! nr = rows (a);
+%! assert (prism (3*nr), [a;a;a]);
+
+## Input validation
+%!error <N must be a scalar integer> prism ("foo")
+%!error <N must be a scalar integer> prism ([1, 2, 3])
+%!error <N must be a scalar integer> prism ({1, 2, 3})
--- a/scripts/image/rainbow.m	Mon Feb 26 23:28:09 2024 -0500
+++ b/scripts/image/rainbow.m	Mon Feb 26 23:30:33 2024 -0500
@@ -30,7 +30,8 @@
 ## yellow, green, blue, to violet.
 ##
 ## The argument @var{n} must be a scalar.
-## If unspecified, the length of the current colormap, or 64, is used.
+## If @var{n} is not specified the length of the current colormap is used.  If
+## there is no current colormap the default value of 256 is used.
 ## @seealso{colormap}
 ## @end deftypefn
 
@@ -40,8 +41,8 @@
 function map = rainbow (n)
 
   if (nargin == 1)
-    if (! isscalar (n))
-      error ("rainbow: N must be a scalar");
+    if (! (isscalar (n) && isreal (n) && n == fix (n)))
+      error ("rainbow: N must be a scalar integer");
     endif
     n = double (n);
   else
@@ -49,7 +50,7 @@
     if (! isempty (hf))
       n = rows (get (hf, "colormap"));
     else
-      n = 64;
+      n = 256;
     endif
   endif
 
@@ -84,3 +85,21 @@
 %!  rgbplot (cmap, "composite");
 %! subplot (2, 1, 2);
 %!  rgbplot (cmap);
+
+%!assert (size (rainbow ()), [256, 3])
+%!assert (size (rainbow (16)), [16, 3])
+
+%!assert (rainbow (1), [1, 0, 0])
+%!assert (rainbow (true), double ([1, 0, 0]))
+%!assert (rainbow (char (1)), double ([1, 0, 0]))
+%!assert (rainbow (int32 (1)), double ([1, 0, 0]))
+
+%!assert (rainbow (0), zeros (0, 3))
+%!assert (rainbow (-1), zeros (0, 3))
+
+%!assert (rainbow (6)(:), [1, 1, 1, 0, 0, 2/3, 0, 0.5, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1]', 3*eps)
+
+## Input validation
+%!error <N must be a scalar integer> rainbow ("foo")
+%!error <N must be a scalar integer> rainbow ([1, 2, 3])
+%!error <N must be a scalar integer> rainbow ({1, 2, 3})
--- a/scripts/image/spring.m	Mon Feb 26 23:28:09 2024 -0500
+++ b/scripts/image/spring.m	Mon Feb 26 23:30:33 2024 -0500
@@ -29,15 +29,16 @@
 ## Create color colormap.  This colormap varies from magenta to yellow.
 ##
 ## The argument @var{n} must be a scalar.
-## If unspecified, the length of the current colormap, or 64, is used.
+## If @var{n} is not specified the length of the current colormap is used.  If
+## there is no current colormap the default value of 256 is used.
 ## @seealso{colormap}
 ## @end deftypefn
 
 function map = spring (n)
 
   if (nargin == 1)
-    if (! isscalar (n))
-      error ("spring: N must be a scalar");
+    if (! (isscalar (n) && isreal (n) && n == fix (n)))
+      error ("spring: N must be a scalar integer");
     endif
     n = double (n);
   else
@@ -45,7 +46,7 @@
     if (! isempty (hf))
       n = rows (get (hf, "colormap"));
     else
-      n = 64;
+      n = 256;
     endif
   endif
 
@@ -70,3 +71,22 @@
 %!  rgbplot (cmap, "composite");
 %! subplot (2, 1, 2);
 %!  rgbplot (cmap);
+
+
+%!assert (size (spring ()), [256, 3])
+%!assert (size (spring (16)), [16, 3])
+%!assert (all ((spring ()(:, 1)) == 1), true)
+%!assert (spring (11)(:,2:3), [[0:0.1:1]; [1:-0.1:0]]', eps)
+
+%!assert (spring (1), [1, 0, 1])
+%!assert (spring (true), double ([1, 0, 1]))
+%!assert (spring (char (1)), double ([1, 0, 1]))
+%!assert (spring (int32 (1)), double ([1, 0, 1]))
+
+%!assert (spring (0), zeros (0, 3))
+%!assert (spring (-1), zeros (0, 3))
+
+## Input validation
+%!error <N must be a scalar integer> spring ("foo")
+%!error <N must be a scalar integer> spring ([1, 2, 3])
+%!error <N must be a scalar integer> spring ({1, 2, 3})
--- a/scripts/image/summer.m	Mon Feb 26 23:28:09 2024 -0500
+++ b/scripts/image/summer.m	Mon Feb 26 23:30:33 2024 -0500
@@ -29,15 +29,16 @@
 ## Create color colormap.  This colormap varies from green to yellow.
 ##
 ## The argument @var{n} must be a scalar.
-## If unspecified, the length of the current colormap, or 64, is used.
+## If @var{n} is not specified the length of the current colormap is used.  If
+## there is no current colormap the default value of 256 is used.
 ## @seealso{colormap}
 ## @end deftypefn
 
 function map = summer (n)
 
   if (nargin == 1)
-    if (! isscalar (n))
-      error ("summer: N must be a scalar");
+    if (! (isscalar (n) && isreal (n) && n == fix (n)))
+      error ("summer: N must be a scalar integer");
     endif
     n = double (n);
   else
@@ -45,7 +46,7 @@
     if (! isempty (hf))
       n = rows (get (hf, "colormap"));
     else
-      n = 64;
+      n = 256;
     endif
   endif
 
@@ -70,3 +71,22 @@
 %!  rgbplot (cmap, "composite");
 %! subplot (2, 1, 2);
 %!  rgbplot (cmap);
+
+
+%!assert (size (summer ()), [256, 3])
+%!assert (size (summer (16)), [16, 3])
+
+%!assert (summer (1), [0, 0.5, 0.4])
+%!assert (summer (true), double ([0, 0.5, 0.4]))
+%!assert (summer (char (1)), double ([0, 0.5, 0.4]))
+%!assert (summer (int32 (1)), double ([0, 0.5, 0.4]))
+
+%!assert (summer (0), zeros (0, 3))
+%!assert (summer (-1), zeros (0, 3))
+
+%!assert (summer (11), [[0:0.1:1]; [0.5:0.05:1]; 0.4 * ones(1,11)]', eps)
+
+## Input validation
+%!error <N must be a scalar integer> summer ("foo")
+%!error <N must be a scalar integer> summer ([1, 2, 3])
+%!error <N must be a scalar integer> summer ({1, 2, 3})
--- a/scripts/image/turbo.m	Mon Feb 26 23:28:09 2024 -0500
+++ b/scripts/image/turbo.m	Mon Feb 26 23:30:33 2024 -0500
@@ -31,7 +31,8 @@
 ## uniform.
 ##
 ## The argument @var{n} must be a scalar.
-## If unspecified, the length of the current colormap, or 64, is used.
+## If @var{n} is not specified the length of the current colormap is used.  If
+## there is no current colormap the default value of 256 is used.
 ## @seealso{colormap}
 ## @end deftypefn
 
@@ -42,8 +43,8 @@
 function map = turbo (n)
 
   if (nargin == 1)
-    if (! isscalar (n))
-      error ("turbo: N must be a scalar");
+    if (! (isscalar (n) && isreal (n) && n == fix (n)))
+      error ("turbo: N must be a scalar integer");
     endif
     n = double (n);
   else
@@ -51,7 +52,7 @@
     if (! isempty (hf))
       n = rows (get (hf, "colormap"));
     else
-      n = 64;
+      n = 256;
     endif
   endif
 
@@ -325,3 +326,29 @@
 %!  rgbplot (cmap, "composite");
 %! subplot (2, 1, 2);
 %!  rgbplot (cmap);
+
+
+%!assert (size (turbo ()), [256, 3])
+%!assert (size (turbo (16)), [16, 3])
+
+%!assert (turbo(0), zeros (0, 3))
+%!assert (turbo(-1), zeros (0, 3))
+
+%!shared a
+%! a = [0.18995, 0.07176, 0.23217;
+%!      0.10342, 0.89600, 0.71500;
+%!      0.98000, 0.73000, 0.22161;
+%!      0.47960, 0.01583, 0.01055];
+
+%!assert (turbo (1), a(4,:))
+%!assert (turbo (true), double (a(4,:)))
+%!assert (turbo (char (1)), double (a(4,:)))
+%!assert (turbo (int32 (1)), double (a(4,:)))
+%!assert (turbo (4), a, eps)
+
+%!shared  # Clear shared varibles to avoid echo on unrelated test errors.
+
+## Input validation
+%!error <N must be a scalar integer> turbo ("foo")
+%!error <N must be a scalar integer> turbo ([1, 2, 3])
+%!error <N must be a scalar integer> turbo ({1, 2, 3})
--- a/scripts/image/viridis.m	Mon Feb 26 23:28:09 2024 -0500
+++ b/scripts/image/viridis.m	Mon Feb 26 23:30:33 2024 -0500
@@ -30,7 +30,8 @@
 ## blue, green, to yellow.
 ##
 ## The argument @var{n} must be a scalar.
-## If unspecified, the length of the current colormap, or 64, is used.
+## If @var{n} is not specified the length of the current colormap is used.  If
+## there is no current colormap the default value of 256 is used.
 ## @seealso{colormap}
 ## @end deftypefn
 
@@ -41,8 +42,8 @@
 function map = viridis (n)
 
   if (nargin == 1)
-    if (! isscalar (n))
-      error ("viridis: N must be a scalar");
+    if (! (isscalar (n) && isreal (n) && n == fix (n)))
+      error ("viridis: N must be a scalar integer");
     endif
     n = double (n);
   else
@@ -50,9 +51,10 @@
     if (! isempty (hf))
       n = rows (get (hf, "colormap"));
     else
-      n = 64;
+      n = 256;
     endif
   endif
+
   ## FIXME: Is there no algorithmic definition of the viridis colormap?
   persistent viridi = [0.26700401  0.00487433  0.32941519
                        0.26851048  0.00960483  0.33542652
@@ -325,3 +327,28 @@
 %!  rgbplot (cmap, "composite");
 %! subplot (2, 1, 2);
 %!  rgbplot (cmap);
+
+%!assert (size (viridis ()), [256, 3])
+%!assert (size (viridis (16)), [16, 3])
+
+%!assert (viridis (0), zeros (0, 3))
+%!assert (viridis (-1), zeros (0, 3))
+
+%!shared a
+%! a = [0.26700401, 0.00487433, 0.32941519;
+%!      0.19063135, 0.40706148, 0.55608907;
+%!      0.20803045, 0.71870095, 0.47287330;
+%!      0.99324789, 0.90615657, 0.14393620];
+
+%!assert (viridis (1), a(4,:))
+%!assert (viridis (true), double (a(4,:)))
+%!assert (viridis (char (1)), double (a(4,:)))
+%!assert (viridis (int32 (1)), double (a(4,:)))
+%!assert (viridis (4), a, eps)
+
+%!shared  # Clear shared varibles to avoid echo on unrelated test errors.
+
+## Input validation
+%!error <N must be a scalar integer> viridis ("foo")
+%!error <N must be a scalar integer> viridis ([1, 2, 3])
+%!error <N must be a scalar integer> viridis ({1, 2, 3})
--- a/scripts/image/white.m	Mon Feb 26 23:28:09 2024 -0500
+++ b/scripts/image/white.m	Mon Feb 26 23:30:33 2024 -0500
@@ -29,15 +29,16 @@
 ## Create color colormap.  This colormap is completely white.
 ##
 ## The argument @var{n} must be a scalar.
-## If unspecified, the length of the current colormap, or 64, is used.
+## If @var{n} is not specified the length of the current colormap is used.  If
+## there is no current colormap the default value of 256 is used.
 ## @seealso{colormap}
 ## @end deftypefn
 
 function map = white (n)
 
   if (nargin == 1)
-    if (! isscalar (n))
-      error ("white: N must be a scalar");
+    if (! (isscalar (n) && isreal (n) && n == fix (n)))
+      error ("white: N must be a scalar integer");
     endif
     n = double (n);
   else
@@ -45,7 +46,7 @@
     if (! isempty (hf))
       n = rows (get (hf, "colormap"));
     else
-      n = 64;
+      n = 256;
     endif
   endif
   map = ones (n, 3);
@@ -60,3 +61,20 @@
 %!  rgbplot (cmap, "composite");
 %! subplot (2, 1, 2);
 %!  rgbplot (cmap);
+
+%!assert (size (white ()), [256, 3])
+%!assert (size (white (16)), [16, 3])
+%!assert (all ((white ()(:)) == 1), true)
+
+%!assert (white (1), [1, 1, 1])
+%!assert (white (true), double ([1, 1, 1]))
+%!assert (white (char (1)), double ([1, 1, 1]))
+%!assert (white (int32 (1)), double ([1, 1, 1]))
+%!assert (white (0), zeros (0, 3))
+%!assert (white (-1), zeros (0, 3))
+
+
+## Input validation
+%!error <N must be a scalar integer> white ("foo")
+%!error <N must be a scalar integer> white ([1, 2, 3])
+%!error <N must be a scalar integer> white ({1, 2, 3})
--- a/scripts/image/winter.m	Mon Feb 26 23:28:09 2024 -0500
+++ b/scripts/image/winter.m	Mon Feb 26 23:30:33 2024 -0500
@@ -29,15 +29,16 @@
 ## Create color colormap.  This colormap varies from blue to green.
 ##
 ## The argument @var{n} must be a scalar.
-## If unspecified, the length of the current colormap, or 64, is used.
+## If @var{n} is not specified the length of the current colormap is used.  If
+## there is no current colormap the default value of 256 is used.
 ## @seealso{colormap}
 ## @end deftypefn
 
 function map = winter (n)
 
   if (nargin == 1)
-    if (! isscalar (n))
-      error ("winter: N must be a scalar");
+    if (! (isscalar (n) && isreal (n) && n == fix (n)))
+      error ("winter: N must be a scalar integer");
     endif
     n = double (n);
   else
@@ -45,7 +46,7 @@
     if (! isempty (hf))
       n = rows (get (hf, "colormap"));
     else
-      n = 64;
+      n = 256;
     endif
   endif
 
@@ -70,3 +71,22 @@
 %!  rgbplot (cmap, "composite");
 %! subplot (2, 1, 2);
 %!  rgbplot (cmap);
+
+
+%!assert (size (winter ()), [256, 3])
+%!assert (size (winter (16)), [16, 3])
+
+%!assert (winter (1), [0, 0, 1])
+%!assert (winter (true), double ([0, 0, 1]))
+%!assert (winter (char (1)), double ([0, 0, 1]))
+%!assert (winter (int32 (1)), double ([0, 0, 1]))
+
+%!assert (winter (0), zeros (0, 3))
+%!assert (winter (-1), zeros (0, 3))
+
+%!assert (winter (11), [zeros(1,11); [0:0.1:1]; [1:-0.05:0.5]]', eps)
+
+## Input validation
+%!error <N must be a scalar integer> winter ("foo")
+%!error <N must be a scalar integer> winter ([1, 2, 3])
+%!error <N must be a scalar integer> winter ({1, 2, 3})
--- a/scripts/miscellaneous/inputname.m	Mon Feb 26 23:28:09 2024 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,163 +0,0 @@
-########################################################################
-##
-## Copyright (C) 2004-2024 The Octave Project Developers
-##
-## See the file COPYRIGHT.md in the top-level directory of this
-## distribution or <https://octave.org/copyright/>.
-##
-## 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
-## <https://www.gnu.org/licenses/>.
-##
-########################################################################
-##
-## Original version by Paul Kienzle distributed as free software in the
-## public domain.
-
-## -*- texinfo -*-
-## @deftypefn  {} {@var{namestr} =} inputname (@var{n})
-## @deftypefnx {} {@var{namestr} =} inputname (@var{n}, @var{ids_only})
-## Return the name of the @var{n}-th argument to the calling function.
-##
-## If the argument is not a simple variable name, return an empty string.
-## Examples which will return @qcode{""} are numbers (@code{5.1}),
-## expressions (@code{@var{y}/2}), and cell or structure indexing
-## (@code{@var{c}@{1@}} or @code{@var{s}.@var{field}}).
-##
-## @code{inputname} is only useful within a function.  When used at the command
-## line or within a script it always returns an empty string.
-##
-## By default, return an empty string if the @var{n}-th argument is not a valid
-## variable name.  If the optional argument @var{ids_only} is false, return the
-## text of the argument even if it is not a valid variable name.  This is an
-## Octave extension that allows the programmer to view exactly how the function
-## was invoked even when the inputs are complex expressions.
-## @seealso{nargin, narginchk}
-## @end deftypefn
-
-## FIXME: Actually, it probably *isn't* worth fixing, but there are small
-## differences between Octave and Matlab.
-##
-## 1) When called from the top-level or a script, Matlab throws an error
-##
-##   inputname (1)   % at command prompt
-##   % Octave returns "", Matlab throws an error
-##
-## 2) cell or struct indexing causes all further names to be returned as ""
-##
-##   c = {'a', 'b'}
-##   y = 1; z = 2;
-##   fcn (c, y, z)
-##   % inputname() would return 'c', 'y', 'z' for the inputs.
-##   fcn (c{1}, y, z)
-##   % inputname() would return '', '', '' for the inputs.
-##
-## 3) If inputname is not called from a function, Matlab walks up the stack
-##    until it finds some valid code and then works from there.  This could
-##    be relevant for mex files or anonymous functions.
-##
-##   f = @(x) inputname (x);
-##   a = 1:4;
-##   arrayfun (fn, a, 'uniformoutput', false)
-##   % output is {'fn', 'a', '', ''}
-
-function namestr = inputname (n, ids_only = true)
-
-  if (nargin < 1)
-    print_usage ();
-  endif
-
-  if (! isscalar (n) || ! isindex (n))
-    error ("inputname: N must be a scalar index");
-  endif
-
-  try
-    namestr = evalin ("caller", sprintf ("__varval__ ('.argn.'){%d}", n));
-  catch
-    namestr = "";
-    return;
-  end_try_catch
-
-  ## For compatibility with Matlab, return empty string if argument name is
-  ## not a valid identifier.
-  if (ids_only && ! isvarname (namestr))
-    namestr = "";
-  elseif (ids_only)
-    ## More complicated checking is required to verify name (bug #59103).
-    ## NAME may be text, like "Inf", which is an acceptable variable name
-    ## that passes isvarname(), but that does not mean it is an actual
-    ## variable name, rather than a function or IEEE number.
-    try
-      v = evalin ("caller",
-                  sprintf ("evalin ('caller', '__varval__ (\"%s\")')", namestr));
-    catch
-      namestr = "";
-    end_try_catch
-  endif
-
-endfunction
-
-
-%!function name = __iname1__ (arg1, arg2, arg3)
-%!  name = inputname (1);
-%!endfunction
-
-%!function name = __iname1_ID__ (arg1, arg2, arg3)
-%!  name = inputname (1, false);
-%!endfunction
-
-%!function name = __iname2__ (arg1, arg2, arg3)
-%!  name = inputname (2);
-%!endfunction
-
-%!function names = __iname3__ (arg1, arg2, arg3)
-%!  names = cell (1, 3);
-%!  for i = 1:3
-%!    names{i} = inputname (i);
-%!  endfor
-%!endfunction
-
-%!test
-%! assert (__iname1__ ('xvar'), "");
-%! xvar = 1;
-%! assert (__iname1__ (xvar), "xvar");
-
-%!test
-%! xvar = 1;  yvar = 2;
-%! assert (__iname2__ (xvar), "");
-%! assert (__iname2__ (xvar, yvar), "yvar");
-
-%!test
-%! xvar = 1;  yvar = 2;
-%! assert (__iname3__ (xvar), {"xvar", "", ""});
-%! assert (__iname3__ (xvar, yvar), {"xvar", "yvar", ""});
-%! assert (__iname3__ (xvar, 3, yvar), {"xvar", "", "yvar"});
-
-## Test numbers, expressions, indexing operations
-%!test
-%! assert (__iname1__ (1.0), "");
-%! x = 1;
-%! assert (__iname1__ (x / 2), "");
-%! assert (__iname1__ (Inf), "");
-
-%!test
-%! assert (__iname1_ID__ (1.0), "1.0");
-%! x = 1;
-%! assert (__iname1_ID__ (x / 2), "x / 2");
-%! assert (__iname1_ID__ (Inf), "Inf");
-
-%!error <Invalid call> inputname ()
-%!error <N must be a scalar> inputname (ones (2,2))
-%!error <N must be a scalar index> inputname (-1)
--- a/scripts/miscellaneous/mex.m	Mon Feb 26 23:28:09 2024 -0500
+++ b/scripts/miscellaneous/mex.m	Mon Feb 26 23:30:33 2024 -0500
@@ -45,7 +45,7 @@
   [out, sts] = mkoctfile ("--mex", varargin{:});
 
   if (! isempty (out))
-    printf ("%s", out);
+    printf ("%s\n", out);
   endif
   if (nargout > 0)
     status = sts;
--- a/scripts/miscellaneous/module.mk	Mon Feb 26 23:28:09 2024 -0500
+++ b/scripts/miscellaneous/module.mk	Mon Feb 26 23:30:33 2024 -0500
@@ -34,7 +34,6 @@
   %reldir%/gunzip.m \
   %reldir%/info.m \
   %reldir%/inputParser.m \
-  %reldir%/inputname.m \
   %reldir%/isdeployed.m \
   %reldir%/isfile.m \
   %reldir%/isfolder.m \
--- a/scripts/module.mk	Mon Feb 26 23:28:09 2024 -0500
+++ b/scripts/module.mk	Mon Feb 26 23:30:33 2024 -0500
@@ -151,7 +151,7 @@
 	    ! $(GREP) -q -E '^  *\<function\>' $$m || continue; \
 	    ! (echo $$m | $(GREP) -q __splinefit__.m) || continue; \
 	    echo "source ('$$m');"; \
-	  done ) | $(SHELL) run-octave --norc --silent --no-history
+	  done ) | $(SHELL) run-octave --norc --quiet --no-history
 .PHONY: check-missing-semicolon
 
 ## Include m-files in list of sources when building tag files.
--- a/scripts/optimization/fminbnd.m	Mon Feb 26 23:28:09 2024 -0500
+++ b/scripts/optimization/fminbnd.m	Mon Feb 26 23:30:33 2024 -0500
@@ -102,7 +102,13 @@
     print_usage ();
   endif
 
-  if (a > b)
+  if (! (isscalar (a) && isfloat (a) && isfinite (a)))
+    error ("Octave:invalid-input-arg",
+           "fminbnd: endpoint A must be a finite floating point scalar");
+  elseif (! (isscalar (b) && isfloat (b) && isfinite (b)))
+    error ("Octave:invalid-input-arg",
+           "fminbnd: endpoint B must be a finite floating point scalar");
+  elseif (a > b)
     error ("Octave:invalid-input-arg",
            "fminbnd: the lower bound cannot be greater than the upper one");
   endif
@@ -331,4 +337,12 @@
 %!assert (fminbnd (@(x) x > 0.3, 0, 1) < 0.3)
 %!assert (fminbnd (@(x) sin (x), 0, 0), 0, eps)
 
+## Test input validation
+%!error <Invalid call> fminbnd (1)
+%!error <A must be a finite floating point scalar> fminbnd (1, [2, 3], 4)
+%!error <A must be a finite floating point scalar> fminbnd (1, int8 (2), 3)
+%!error <A must be a finite floating point scalar> fminbnd (1, Inf, 3)
+%!error <B must be a finite floating point scalar> fminbnd (1, 2, [3, 4])
+%!error <B must be a finite floating point scalar> fminbnd (1, 2, int8 (3))
+%!error <B must be a finite floating point scalar> fminbnd (1, 2, Inf)
 %!error <lower bound cannot be greater> fminbnd (@(x) sin (x), 0, -pi)
--- a/scripts/plot/appearance/module.mk	Mon Feb 26 23:28:09 2024 -0500
+++ b/scripts/plot/appearance/module.mk	Mon Feb 26 23:30:33 2024 -0500
@@ -38,10 +38,12 @@
   %reldir%/orient.m \
   %reldir%/pbaspect.m \
   %reldir%/rticks.m \
+  %reldir%/rticklabels.m \
   %reldir%/shading.m \
   %reldir%/specular.m \
   %reldir%/text.m \
   %reldir%/thetaticks.m \
+  %reldir%/tticklabels.m \
   %reldir%/title.m \
   %reldir%/view.m \
   %reldir%/whitebg.m \
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/plot/appearance/rticklabels.m	Mon Feb 26 23:30:33 2024 -0500
@@ -0,0 +1,258 @@
+########################################################################
+##
+## Copyright (C) 2017-2024 The Octave Project Developers
+##
+## See the file COPYRIGHT.md in the top-level directory of this
+## distribution or <https://octave.org/copyright/>.
+##
+## 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
+## <https://www.gnu.org/licenses/>.
+##
+########################################################################
+
+## -*- texinfo -*-
+## @deftypefn  {} {@var{labels} =} rticklabels
+## @deftypefnx {} {} rticklabels (@var{tickval})
+## @deftypefnx {} {@dots{} =} rticklabels (@var{hax}, @dots{})
+## Query or set the tick labels on the r-axis of a polar plot.
+##
+## When called without an argument, return a cell array of strings of the
+## current rtick labels.
+##
+## When called with the argument @var{tickval} being a vector of numbers or
+## a cell array of strings and/or numbers, the labels will be changed to
+## match these new values. Note that the center point of the plots made by
+## @code{polar} are never labeled, so the first specified label will be
+## applied to the second rtick location and subesquent labels will progress
+## outward.
+##
+## If fewer labels are specified than the current number of tick marks, those
+## labels will be applied starting with the innermost tick labels, and blank
+## labels will be appended to the remainder.  If the specified label count
+## exceeds the number of tick labels, the excess labels are ignored.
+##
+## If the first argument @var{hax} is an axes handle, then operate on
+## this axis rather than the current axes returned by @code{gca}.
+##
+## Requesting a return value when calling @code{rticklabels} to set a property
+## value will result in an error.
+##
+## Compatability Note:  The 'mode' property for rticklabels has not yet been
+##                      implemented.
+##
+## @seealso{polar, rticks, tticklabels, xticklabels, yticklabels, zticklabels,
+## get, set}
+## @end deftypefn
+
+## FIXME:  Octave's polar plot implementation does not currently create the
+##         properties rticklabel, rticklabelmode, and rtickmode.  Fully
+##         implemented versions of those proporties could simplify much of the
+##         code below, which could then mimick much the behavior of the
+##         equivalent Cartesian functions.
+
+function labels = rticklabels (varargin)
+  [hax, varargin, nargs] = __plt_get_axis_arg__ ("rticklabels", varargin{:});
+
+  if (nargs > 1)
+    print_usage;
+  endif
+
+  returnlabels = true;
+
+  ## Check first input for axes handle and remove from argument list.
+  if (nargs > 0)
+    ## Single remaining input must be tick labels and should be a numeric
+    ## vector or a cell vector of numbers and strings.
+
+    ## Error if trying to request and set values simultaneously.
+    if (nargout > 0)
+      error ("rticklabels: cannot set and return labels simultaneously");
+    endif
+
+    returnlabels = false;
+    arg = varargin{1};
+
+    if (isnumeric (arg))
+      ## All inputs handled the same way as cells. (:) permits nonvectors.
+      cellarg_num = ones (1, numel (arg));
+      cellarg_char = zeros (1, numel (arg));
+      arg = num2cell (arg(:));
+
+    elseif (iscell (arg))
+
+      if (! all ((cellarg_num = cellfun ('isnumeric', arg))
+                           | (cellarg_char = cellfun ('ischar', arg))))
+        error ("rticklabels: TICKVAL cell must contain numbers or strings");
+      endif
+
+    else
+      error (["rticklabels: TICKVAL must be numeric or a cell ", ...
+              "containing numbers and strings"]);
+    endif
+
+  ## Finish converting TICVAL into a cellstr.
+
+  ## Convert numeric elements to characters and make it a 1-D cell array.
+  arg(cellarg_num) = cellfun (@num2str, arg(cellarg_num), ...
+                                "UniformOutput", false);
+  arg = arg(:);
+  endif
+
+  if (isempty (hax))
+    hax = gca ();
+  endif
+
+  ## Error if the remaining input
+  polarhandle = findall (hax, "tag", "polar_grid");
+
+  ## Error if hax does not point to a polar plot with r elements.
+  if (isempty (polarhandle))
+    error ("rticklabels: rticklabels can only be used on a polar plot");
+  elseif (! isfield (get (hax), "rtick") )
+    error ("rticklabels: rtick property not defined for current axes");
+  endif
+
+  ## Get count of radius and theta curves.
+  nr = numel (get (hax, "rtick")); # Must check if it includes unlabeled center.
+  nt = numel (get (hax, "ttick"));
+  rt_label_handles = get (polarhandle, "children");
+
+  ## Center is never labeled in polar plots.
+  ## If rtick does not include unlabled center, label_count = 2*nr+2*nt-1,
+  ## otherwise label_count = 2*nr+2*nt+1 and nr should be reduced by 1
+  ## to prevent attempts to get label value from nonlabel handle.
+  if (2 * (nr + nt) + 1 > numel (rt_label_handles))
+    nr--;
+  endif
+
+  ## rtick and ttick object ordering:
+  ##  1:nt = text handles containing theta labels (reverse order)
+  ##  nt+1:2*nt = line object handles for ttick radial grid lines
+  ##  2*nt+1:2*nt+nr = text handles containing nr rtick labels (reverse order)
+  ##  2*nt+nr+1:2*nt+2*nr = line object handles for rtick circles
+  ##  end = patch object handle for darker outside border
+
+  rlabelrange = 2*nt + [nr:-1:1]; # Flip back to increasing order.
+
+  if (nargs == 0)
+    ## Get radius labels.
+    labels = get (rt_label_handles(rlabelrange), "string");
+
+  else
+    ## Set new label values.
+
+    if isempty (arg)
+      ## If an empty cell or array is set, set all labels to "".
+      arg = cell (nr, 1);
+      arg(:) = {""};
+
+    else
+      ## Pad and trim arg as needed to match number of labels.
+      if (nr < numel (arg))
+        arg (nr + 1 : end) = [];
+      else
+        arg(end + 1 : nr) = {""};
+      endif
+    endif
+
+    ## Replace labels with values from arg, ensure column vector.
+    set (rt_label_handles(rlabelrange), {"string"}, arg(:));
+  endif
+
+endfunction
+
+%!test
+%! t = [0:15:180] * pi / 180;
+%! r = sin (t);
+%! hf = figure ("visible", "off");
+%! unwind_protect
+%!   hp = polar (t, r);
+%!   hax = gca ();
+%!   rticks (hax, [0, 0.5, 1]);
+%!   assert (rticklabels (hax), {"0.5"; "1"});
+%!   rticklabels (hax, [1 2]);
+%!   assert (rticklabels (hax), {"1"; "2"});
+%!   rticklabels (hax, [3 4]');
+%!   assert (rticklabels (hax), {"3"; "4"});
+%!   rticklabels (hax, {5, 6});
+%!   assert (rticklabels (hax), {"5"; "6"});
+%!   rticklabels (hax, {"a", "bee"});
+%!   assert (rticklabels (hax), {"a"; "bee"});
+%!   rticklabels (hax, {1, "two"});
+%!   assert (rticklabels (hax), {"1"; "two"});
+%!   rticklabels (hax, {1, 2, 3, 4});
+%!   assert (rticklabels (hax), {"1"; "2"});
+%!   rticklabels (hax, [5, 6, 7, 8]);
+%!   assert (rticklabels (hax), {"5"; "6"});
+%!   rticklabels (hax, {1});
+%!   assert (rticklabels (hax), {"1"; ""});
+%!   rticklabels (hax, {1,2});
+%!   assert (rticklabels (hax), {"1"; "2"});
+%!   rticklabels (hax, []);
+%!   assert (rticklabels (hax), {""; ""});
+%!   rticklabels (hax, {1,2});
+%!   assert (rticklabels (hax), {"1"; "2"});
+%!   rticklabels (hax, {});
+%!   assert (rticklabels (hax), {""; ""});
+%! unwind_protect_cleanup
+%!   close (hf);
+%! end_unwind_protect
+
+
+## Test input validation
+%!test
+%! hf = figure ("visible", "off");
+%! unwind_protect
+%!   hax = gca ();
+%!   fail ("rticklabels (1,2,3)", "Invalid call");
+%!   fail ("rticklabels (-1, 2)", "Invalid call");
+%!   fail ("rticklabels (hax, 2, 3)", "Invalid call");
+%!   fail ("rticklabels (hf, 2)", "Invalid call");
+%! unwind_protect_cleanup
+%!   close (hf);
+%! end_unwind_protect
+
+%!test
+%! hf = figure ("visible", "off");
+%! unwind_protect
+%!   hax = gca ();
+%!   fail ("tmp = rticklabels ([1, 2, 3])", "cannot set and return labels simultaneously");
+%!   fail ("tmp = rticklabels (hax, [1, 2, 3])", "cannot set and return labels simultaneously");
+%!   fail ("rticklabels (hax, {{1}, 'two', 3})", "TICKVAL cell must contain numbers or strings");
+%!   fail ("rticklabels (hax, {1, 'two', false})", "TICKVAL cell must contain numbers or strings");
+%!   fail ("rticklabels (hax, {1, struct()})", "TICKVAL cell must contain numbers or strings");
+%!   fail ("rticklabels (hax, struct())", "TICKVAL must be numeric or a cell containing");
+%!   fail ("rticklabels (hax, [true false])", "TICKVAL must be numeric or a cell containing");
+%! unwind_protect_cleanup
+%!   close (hf);
+%! end_unwind_protect
+
+%!test
+%! t = [0:45:180] * pi / 180;
+%! r = sin (t);
+%! hf = figure ("visible", "off");
+%! unwind_protect
+%!   hp = plot (t, r);
+%!   hax = gca ();
+%!   fail ("rticklabels (hax, 1)", "rticklabels can only be used on a polar plot");
+%!   fail ("rticklabels ({1})", "rticklabels can only be used on a polar plot");
+%!   hp = polar (t, r);
+%!   hax = gca ();
+%!   delete (findall (hax, "tag", "polar_grid"));
+%!   fail ("rticklabels (hax, 1)", "rticklabels can only be used on a polar plot");
+%! unwind_protect_cleanup
+%!   close (hf);
+%! end_unwind_protect
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/plot/appearance/tticklabels.m	Mon Feb 26 23:30:33 2024 -0500
@@ -0,0 +1,247 @@
+########################################################################
+##
+## Copyright (C) 2017-2024 The Octave Project Developers
+##
+## See the file COPYRIGHT.md in the top-level directory of this
+## distribution or <https://octave.org/copyright/>.
+##
+## 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
+## <https://www.gnu.org/licenses/>.
+##
+########################################################################
+
+## -*- texinfo -*-
+## @deftypefn  {} {@var{labels} =} tticklabels
+## @deftypefnx {} {} tticklabels (@var{tickval})
+## @deftypefnx {} {@dots{} =} tticklabels (@var{hax}, @dots{})
+## Query or set the tick labels on the theta-axis of a polar plot.
+##
+## When called without an argument, return a cell array of strings of the
+## current ttick labels.
+##
+## When called with the argument @var{tickval} being a vector of numbers or
+## a cell array of strings and/or numbers, the labels will be changed to
+## match these new values.  Values will be applied starting with the
+## zero-degree tick mark and will progress counter-clockwise.
+##
+## If fewer labels are specified than the current number of theta tick marks,
+## those labels will be applied starting at the zero-degree tick mark and
+## blank labels will be appended to the remainder.  If the specified label
+## count exceeds the number of tick labels, the excess labels are ignored.
+##
+## If the first argument @var{hax} is an axes handle, then operate on
+## this axis rather than the current axes returned by @code{gca}.
+##
+## Requesting a return value when calling @code{tticklabels} to set a property
+## value will result in an error.
+##
+## Compatability Note:  The 'mode' property for tticklabels has not yet been
+##                      implemented.
+##
+## @seealso{polar, thetaticks, rticklabels, xticklabels, yticklabels,
+## zticklabels, get, set}
+## @end deftypefn
+
+## FIXME:  Octave's polar plot implementation does not currently create the
+##         properties tticklabel, tticklabelmode, and ttickmode.  Fully
+##         implemented versions of those proporties could simplify much of the
+##         code below, which could then mimick much the behavior of the
+##         equivalent Cartesian functions.
+
+function labels = tticklabels (varargin)
+  [hax, varargin, nargs] = __plt_get_axis_arg__ ("tticklabels", varargin{:});
+
+  if (nargs > 1)
+    print_usage;
+  endif
+
+  returnlabels = true;
+
+  ## Check first input for axes handle and remove from argument list.
+  if (nargs > 0)
+    ## Single remaining input must be tick labels and should be a numeric
+    ## vector or a cell vector of numbers and strings.
+
+    ## Error if trying to request and set values simultaneously.
+    if (nargout > 0)
+      error ("tticklabels: cannot set and return labels simultaneously");
+    endif
+
+    returnlabels = false;
+    arg = varargin{1};
+
+    if (isnumeric (arg))
+      ## All inputs handled the same way as cells. (:) permits nonvectors.
+      cellarg_num = ones (1, numel (arg));
+      cellarg_char = zeros (1, numel (arg));
+      arg = num2cell (arg(:));
+
+    elseif (iscell (arg))
+
+      if (! all ((cellarg_num = cellfun ('isnumeric', arg))
+                           | (cellarg_char = cellfun ('ischar', arg))))
+        error ("tticklabels: TICKVAL cell must contain numbers or strings");
+      endif
+
+    else
+      error (["tticklabels: TICKVAL must be numeric or a cell ", ...
+              "containing numbers and strings"]);
+    endif
+
+  ## Finish converting TICVAL into a cellstr.
+
+  ## Convert numeric elements to characters and make it a 1-D cell array.
+  arg(cellarg_num) = cellfun (@num2str, arg(cellarg_num), ...
+                                "UniformOutput", false);
+  arg = arg(:);
+  endif
+
+  if (isempty (hax))
+    hax = gca ();
+  endif
+
+  ## Error if the remaining input
+  polarhandle = findall (hax, "tag", "polar_grid");
+
+  ## Error if hax does not point to a polar plot with theta elements.
+  if (isempty (polarhandle))
+    error ("tticklabels: tticklabels can only be used on a polar plot");
+  elseif (! isfield (get (hax), "ttick") )
+    error ("tticklabels: ttick property not defined for current axes");
+  endif
+
+  ## Get theta curves count.
+  nt = numel (get (hax, "ttick"));
+
+  ## rtick and ttick object ordering:
+  ##  1:nt = text handles containing theta labels (reverse order)
+  ##  nt+1:2*nt = line object handles for ttick radial grid lines
+  ##  2*nt+1:2*nt+nr = text handles containing nr rtick labels (reverse order)
+  ##  2*nt+nr+1:2*nt+2*nr = line object handles for rtick circles
+  ##  end = patch object handle for darker outside border
+
+  ## Get theta label handles, reverse order so output is in increasing.
+  tlabel_handles = get (polarhandle, "children")(nt:-1:1);
+
+  if (nargs == 0)
+    ## Just return theta labels.
+    labels = get (tlabel_handles, "string");
+
+  else
+    ## Set new label values.
+
+    if isempty (arg)
+      ## If an empty cell or array is set, set all labels to "".
+      arg = cell (nt, 1);
+      arg(:) = {""};
+
+    else
+      ## Pad and trim arg as needed to match number of labels.
+      if (nt < numel (arg))
+        arg (nt + 1 : end) = [];
+      else
+        arg(end + 1 : nt) = {""};
+      endif
+    endif
+
+    ## Replace labels with values from arg, ensure column vector.
+    set (tlabel_handles, {"string"}, arg(:));
+  endif
+
+endfunction
+
+%!test
+%! t = [0:15:180] * pi / 180;
+%! r = sin (t);
+%! hf = figure ("visible", "off");
+%! unwind_protect
+%!   hp = polar (t, r);
+%!   hax = gca ();
+%!   thetaticks (hax, [0:60:300]);
+%!   assert (tticklabels (hax), {"0"; "60"; "120"; "180"; "240"; "300"});
+%!   tticklabels (hax, [0:20:100]);
+%!   assert (tticklabels (hax), {"0"; "20"; "40"; "60"; "80"; "100"});
+%!   tticklabels (hax, [0:-20:-100]');
+%!   assert (tticklabels (hax), {"0"; "-20"; "-40"; "-60"; "-80"; "-100"});
+%!   tticklabels (hax, {1, 2, 3, 4, 5 ,6});
+%!   assert (tticklabels (hax), {"1"; "2"; "3"; "4"; "5"; "6"});
+%!   tticklabels (hax, {"a", "bee", "c", "d", "eeee", "f"});
+%!   assert (tticklabels (hax), {"a"; "bee"; "c"; "d"; "eeee"; "f"});
+%!   tticklabels (hax, {1, "two", 3, "4", 5, "six"}');
+%!   assert (tticklabels (hax), {"1"; "two"; "3"; "4"; "5"; "six"});
+%!   tticklabels (hax, {1, 2, 3, 4, 5 ,6, 7});
+%!   assert (tticklabels (hax), {"1"; "2"; "3"; "4"; "5"; "6"});
+%!   tticklabels (hax, [5, 6, 7, 8, 9, 10, 11]);
+%!   assert (tticklabels (hax), {"5"; "6"; "7"; "8"; "9"; "10"});
+%!   tticklabels (hax, {1});
+%!   assert (tticklabels (hax), {"1"; ""; ""; ""; ""; ""});
+%!   tticklabels (hax, {1, 2, 3, 4, 5 ,6});
+%!   assert (tticklabels (hax), {"1"; "2"; "3"; "4"; "5"; "6"});
+%!   tticklabels (hax, []);
+%!   assert (tticklabels (hax), {""; ""; ""; ""; ""; ""});
+%!   tticklabels (hax, {1, 2, 3, 4, 5 ,6});
+%!   assert (tticklabels (hax), {"1"; "2"; "3"; "4"; "5"; "6"});
+%!   tticklabels (hax, {});
+%!   assert (tticklabels (hax), {""; ""; ""; ""; ""; ""});
+%! unwind_protect_cleanup
+%!   close (hf);
+%! end_unwind_protect
+
+
+## Test input validation
+%!test
+%! hf = figure ("visible", "off");
+%! unwind_protect
+%!   hax = gca ();
+%!   fail ("tticklabels (1,2,3)", "Invalid call");
+%!   fail ("tticklabels (-1, 2)", "Invalid call");
+%!   fail ("tticklabels (hax, 2, 3)", "Invalid call");
+%!   fail ("tticklabels (hf, 2)", "Invalid call");
+%! unwind_protect_cleanup
+%!   close (hf);
+%! end_unwind_protect
+
+%!test
+%! hf = figure ("visible", "off");
+%! unwind_protect
+%!   hax = gca ();
+%!   fail ("tmp = tticklabels ([1, 2, 3])", "cannot set and return labels simultaneously");
+%!   fail ("tmp = tticklabels (hax, [1, 2, 3])", "cannot set and return labels simultaneously");
+%!   fail ("tticklabels (hax, {{1}, 'two', 3})", "TICKVAL cell must contain numbers or strings");
+%!   fail ("tticklabels (hax, {1, 'two', false})", "TICKVAL cell must contain numbers or strings");
+%!   fail ("tticklabels (hax, {1, struct()})", "TICKVAL cell must contain numbers or strings");
+%!   fail ("tticklabels (hax, struct())", "TICKVAL must be numeric or a cell containing");
+%!   fail ("tticklabels (hax, [true false])", "TICKVAL must be numeric or a cell containing");
+%! unwind_protect_cleanup
+%!   close (hf);
+%! end_unwind_protect
+
+%!test
+%! t = [0:45:180] * pi / 180;
+%! r = sin (t);
+%! hf = figure ("visible", "off");
+%! unwind_protect
+%!   hp = plot (t, r);
+%!   hax = gca ();
+%!   fail ("tticklabels (hax, 1)", "tticklabels can only be used on a polar plot");
+%!   fail ("tticklabels ({1})", "tticklabels can only be used on a polar plot");
+%!   hp = polar (t, r);
+%!   hax = gca ();
+%!   delete (findall (hax, "tag", "polar_grid"));
+%!   fail ("tticklabels (hax, 1)", "tticklabels can only be used on a polar plot");
+%! unwind_protect_cleanup
+%!   close (hf);
+%! end_unwind_protect
--- a/scripts/plot/draw/polar.m	Mon Feb 26 23:28:09 2024 -0500
+++ b/scripts/plot/draw/polar.m	Mon Feb 26 23:30:33 2024 -0500
@@ -173,7 +173,7 @@
   set (hax, "xlim", [-maxr maxr], "ylim", [-maxr maxr]);
 
   xtick = get (hax, "xtick");
-  minidx = find (xtick > 0, 1);
+  minidx = find (xtick >= 0, 1);
   maxidx = find (xtick >= maxr, 1);
   if (! isempty (maxidx))
     rtick = xtick(minidx:maxidx);
@@ -557,7 +557,7 @@
 %!   assert (vertcat (linedata.ydata)', rm .* sin (tv1'), eps);
 %!   assert (isempty (vertcat (linedata.zdata)));
 %!
-%!   h = polar (hax, tv1', rm); # Verify orientation independence.
+%!   h = polar (hax, tv1', rm);  # Verify orientation independence.
 %!   linedata = get (h);
 %!   assert (numel (linedata), 3);
 %!   assert (vertcat (linedata.xdata)', rm .* cos (tv1'), eps);
@@ -571,13 +571,13 @@
 %!   assert (vertcat (linedata.ydata), rm .* sin (tv2), eps);
 %!   assert (isempty (vertcat (linedata.zdata)));
 %!
-%!   h = polar (hax, tv2', rm); # Verify orientation independence.
+%!   h = polar (hax, tv2', rm);  # Verify orientation independence.
 %!   linedata = get (h);
 %!   assert (numel (linedata), 2);
 %!   assert (vertcat (linedata.xdata), rm .* cos (tv2), eps);
 %!   assert (vertcat (linedata.ydata), rm .* sin (tv2), eps);
 %!   assert (isempty (vertcat (linedata.zdata)));
-
+%!
 %!   h = polar (hax, tm, rv1);
 %!   linedata = get (h);
 %!   assert (numel (linedata), 3);
@@ -585,7 +585,7 @@
 %!   assert (vertcat (linedata.ydata)', rv1' .* sin (tm), eps);
 %!   assert (isempty (vertcat (linedata.zdata)));
 %!
-%!   h = polar (hax, tm, rv1'); # Verify orientation independence.
+%!   h = polar (hax, tm, rv1');  # Verify orientation independence.
 %!   linedata = get (h);
 %!   assert (vertcat (linedata.xdata)', rv1' .* cos (tm), eps);
 %!   assert (vertcat (linedata.ydata)', rv1' .* sin (tm), eps);
@@ -598,7 +598,7 @@
 %!   assert (vertcat (linedata.ydata), rv2 .* sin (tm), eps);
 %!   assert (isempty (vertcat (linedata.zdata)));
 %!
-%!   h = polar (hax, tm, rv2'); # Verify orientation independence.
+%!   h = polar (hax, tm, rv2');  # Verify orientation independence.
 %!   linedata = get (h);
 %!   assert (numel (linedata), 2);
 %!   assert (vertcat (linedata.xdata), rv2 .* cos (tm), eps);
@@ -621,7 +621,7 @@
 %!   haxtr = get (hax);
 %!   linetr = get (h);
 %!
-%!   haxtr.children = []; # Clear child handles that should be unique.
+%!   haxtr.children = [];  # Clear child handles that should be unique.
 %!   haxtr.xlabel= [];
 %!   haxtr.ylabel= [];
 %!   haxtr.zlabel= [];
@@ -632,26 +632,26 @@
 %!   haxcplx.zlabel = [];
 %!   haxcplx.title = [];
 %!
-%!   assert (isequaln (haxcplx, haxtr)); # Check parent objects.
-%!   assert (isequaln (linecplx, linetr)); # Check actual data objects.
+%!   assert (isequaln (haxcplx, haxtr));    # Check parent objects.
+%!   assert (isequaln (linecplx, linetr));  # Check actual data objects.
 %! unwind_protect_cleanup
 %!   close (hf);
 %! end_unwind_protect
 
-##Test rtick, ttick being properly set
-%!test
+##Test rtick, ttick being set - including the unlabeled 0 (bug #64991)
+%!test <*64991>
 %! hf = figure ("visible", "off");
 %! hax = gca ();
 %! unwind_protect
 %!   polar (hax, [1 2 3], [4 5 6]);
 %!   haxdata = get (hax);
-%!   assert (haxdata.rtick, [2 4 6]);
+%!   assert (haxdata.rtick, [0 2 4 6]);
 %!   assert (haxdata.ttick, [0:30:330]);
 %! unwind_protect_cleanup
 %!   close (hf);
 %! end_unwind_protect
 
-##Test FMT string inputs
+## Test FMT string inputs
 %!test
 %! hf = figure ("visible", "off");
 %! hax = gca ();
@@ -680,7 +680,7 @@
 %!   close (hf);
 %! end_unwind_protect
 
-##Test input validation
+## Test input validation
 %!error <Invalid call> polar ()
 %!test
 %! hf = figure ("visible", "off");
@@ -695,7 +695,7 @@
 %!   fail ("polar (hax, [1 2 3], [1 2; 3 4])", "THETA vector and RHO matrix sizes must match");
 %!   fail ("polar (hax, [1 2; 3 4], [1 2 3])", "THETA matrix and RHO vector sizes must match");
 %!   fail ("polar (hax, [1 2; 3 4], [1 2 3; 4 5 6])", "THETA and RHO matrix dimensions must match");
-%!   h = polar (hax, 1, 2); # Generates line object handle.
+%!   h = polar (hax, 1, 2);  # Generates line object handle.
 %!   fail ("polar (h, 1, 2)", "first argument must be axes handle");
 %! unwind_protect_cleanup
 %!   close (hf);
--- a/scripts/plot/util/hdl2struct.m	Mon Feb 26 23:28:09 2024 -0500
+++ b/scripts/plot/util/hdl2struct.m	Mon Feb 26 23:30:33 2024 -0500
@@ -51,7 +51,7 @@
     s.special = [];
 
     ## Process, in reverse order, all children except for
-    ## legends, colorbars, uimenu, and hggroup children
+    ## legends, colorbars, uimenu, and hggroup children.
     ii = 0;
     allkids = get (h, "children");
     if (! strcmp (s.type, "hggroup"))
@@ -71,7 +71,7 @@
     endif
 
     ## Add non "children" children objects (title, xlabel, ...) and
-    ## hggroup children and tag them in "special"
+    ## hggroup children and tag them in "special".
     if (strcmp (s.type, "hggroup"))
       special = allkids;
     else
@@ -88,8 +88,8 @@
 
     if (strcmp (s.type, "axes") ...
         && ! any (strcmp (get (h, "tag"), {'colorbar', 'legend'})))
-      ## look for legends and colorbars among axes brothers and add them
-      ## to the children list
+      ## Look for legends and colorbars among axes brothers and add them
+      ## to the children list.
       try
         lg = get (h, "__legend_handle__");
       catch
@@ -146,13 +146,8 @@
   persistent excluded;
 
   if (isempty (excluded))
-    excluded = cell2struct (repmat ({[]}, 1, 17),
-                            {"beingdeleted", "busyaction", "buttondownfcn", ...
-                             "children", "clipping", "contextmenu", ...
-                             "createfcn", "deletefcn", "handlevisibility", ...
-                             "hittest", "interruptible", "parent", ...
-                             "selected" , "selectionhighlight", ...
-                             "selectedobject", "type", "uicontextmenu"}, 2);
+    excluded = cell2struct (repmat ({[]}, 1, 4),
+                            {"beingdeleted", "children", "parent", "type"}, 2);
   endif
 
   obj = get (h);
@@ -174,6 +169,7 @@
 
 endfunction
 
+
 ## FIXME: need validation tests
 
 ## FIXME: Need to test code for legends, colorbars.
--- a/scripts/set/intersect.m	Mon Feb 26 23:28:09 2024 -0500
+++ b/scripts/set/intersect.m	Mon Feb 26 23:30:33 2024 -0500
@@ -111,8 +111,8 @@
     else
       c = [a; b];
       ## FIXME: Is there a way to avoid a call to sort?
-      [c_ind, sort_ind] = sort (ic(match));
-      c = c(c_ind, :);
+      [c_idx, sort_idx] = sort (ic(match));
+      c = c(c_idx, :);
     endif
     len_a = rows (a);
   else
@@ -133,8 +133,8 @@
     else
       c = [a(:); b(:)];
       ## FIXME: Is there a way to avoid a call to sort?
-      [c_ind, sort_ind] = sort (ic(match));
-      c = c(c_ind);
+      [c_idx, sort_idx] = sort (ic(match));
+      c = c(c_idx);
     endif
 
     ## Adjust output orientation for Matlab compatibility
@@ -149,7 +149,7 @@
     if (! optsorted)
       ## FIXME: Is there a way to avoid a call to sort?
       ia = sort (ia);
-      ib_ind(sort_ind) = 1:numel(sort_ind);
+      ib_ind(sort_idx) = 1:numel(sort_idx);
       ## Change ordering to conform to unsorted c
       ib(ib_ind) = ib;
     endif
--- a/scripts/set/unique.m	Mon Feb 26 23:28:09 2024 -0500
+++ b/scripts/set/unique.m	Mon Feb 26 23:30:33 2024 -0500
@@ -84,9 +84,6 @@
 ## outputs @var{i}, @var{j} will follow the shape of the input @var{x} rather
 ## than always being column vectors.
 ##
-## The third output, @var{j}, has not been implemented yet when the sort
-## order is @qcode{"stable"}.
-##
 ## @seealso{uniquetol, union, intersect, setdiff, setxor, ismember}
 ## @end deftypefn
 
@@ -189,8 +186,8 @@
   ## Calculate y output
   if (optrows)
     if (nargout > 1 || ! optsorted)
-      [y, i] = sortrows (x);
-      i = i(:);
+      [y, j] = sortrows (x);
+      j = j(:);
     else
       y = sortrows (x);
     endif
@@ -199,7 +196,7 @@
       y(match,:) = [];
     else
       y = x;
-      y(i([false; match]), :) = [];
+      y(j([false; match]), :) = [];
     endif
   else
     if (isvector (x))
@@ -208,8 +205,8 @@
       y = x(:);
     endif
     if (nargout > 1 || ! optsorted)
-      [y, i] = sort (y);
-      i = i(:);
+      [y, j] = sort (y);
+      j = j(:);
     else
       y = sort (y);
     endif
@@ -226,40 +223,76 @@
       else
         y = x(:);
       endif
-      y(i([false; match(:)])) = [];
+      y(j([false; match(:)])) = [];
     endif
   endif
 
-  ## Calculate j output (3rd output)
-  if (nargout > 2)
-    j = i;  # cheap way to copy dimensions
-    j(i) = cumsum ([1; ! match(:)]);
-    if (! optsorted)
-      warning ("unique: third output J is not yet implemented");
-      j = [];
-    endif
+
+  ## Calculate i and j outputs (2nd and 3rd outputs)
+  if (nargout > 1)
 
-    if (optlegacy && isrowvec)
-      j = j.';
-    endif
-  endif
+    if (optsorted)
 
-  ## Calculate i output (2nd output)
-  if (nargout > 1)
-    if (optsorted)
       idx = find (match);
+
       if (! optlegacy && optfirst)
         idx += 1;   # in-place is faster than other forms of increment
       endif
+
+      i = j;
       i(idx) = [];
+
+      if (nargout > 2)
+        j(j) = cumsum (! [false; match(:)]);
+      endif
+
     else
-      i([false; match(:)]) = [];
-      ## FIXME: Is there a way to avoid a call to sort?
-      i = sort (i);
+
+      ## Get inverse of sort index j so that sort(x)(k) = x(j)(k) = x.
+      k = j;  # cheap way to copy dimensions
+      k(j) = 1:n;
+
+      ## Generate logical index of sorted unique value locations.
+      uniquex = ! [false; match(:)];
+
+      ## Remap unique locations to unsorted x, such that y = x(i).
+      i = find (uniquex(k));
+
+      if (nargout > 2)
+        ## Example of index mappings to obtain i and j ('stable').
+        ## x = [40,20,40,20,20,30,10]'     # input data, n = 7, m = 4
+        ## x(j) = [10,20,20,20,30,40,40]'  # sorted x
+        ## j =   [7,2,4,5,6,1,3]'          # sort index, x(j) = sort(x)
+        ## k = [6,2,7,3,4,5,1]'            # inverse idx of j, sort(x)(k) = x
+        ## y = [40,20,30,10]'              # unique x preserving ordering
+        ## uniquex = [1,1,0,0,1,1,0]'      # logical sorted idx of unique x vals
+        ## i = [1,2,6,7]'                  # unique output index, y = x(i)
+        ## u = [1,2,5,6]'                  # linear idx of unique x(j) elems.
+        ## l = [1,2,2,2,5,6,6]'            # unique elem. in full sort(x)
+        ## l(k) = [6,2,6,2,2,5,1]'         # l mapped back to unsorted x
+        ## j(l(k)) =  [1,2,1,2,2,6,7]'     # unique elem. mapped to x idx
+        ## p(i) = [1,2,#,#,#,3,4]'         # map between i and j(l(k))
+
+        ni = numel (i);
+
+        u = find (uniquex); # Linear index of unique elements of sort(x)
+        l = u(cumsum (uniquex)); # Expand u for all elements in sort(x)
+
+        p = j; # cheap way to copy dimensions
+        p(i) = 1:ni; # set p to contain the vector positions of i.
+
+        j = p(j(l(k))); # Replace j with 3rd output mapping y->x.
+
+      endif
     endif
 
     if (optlegacy && isrowvec)
       i = i.';
+
+      if (nargout > 2)
+        j = j.';
+      endif
+
     endif
   endif
 
@@ -302,11 +335,10 @@
 %! assert (j, [1;1;2;3;3;3;4]);
 
 %!test
-%! [y,i,~] = unique ([4,4,2,2,2,3,1], "stable");
+%! [y,i,j] = unique ([4,4,2,2,2,3,1], "stable");
 %! assert (y, [4,2,3,1]);
 %! assert (i, [1;3;6;7]);
-%! ## FIXME: 'j' input not calculated with stable
-%! ##assert (j, []);
+%! assert (j, [1;1;2;2;2;3;4]);
 
 %!test
 %! [y,i,j] = unique ([1,1,2,3,3,3,4]', "last");
@@ -335,11 +367,10 @@
 
 %!test
 %! A = [4,5,6; 1,2,3; 4,5,6];
-%! [y,i,~] = unique (A, "rows", "stable");
+%! [y,i,j] = unique (A, "rows", "stable");
 %! assert (y, [4,5,6; 1,2,3]);
 %! assert (A(i,:), y);
-%! ## FIXME: 'j' output not calculated correctly with "stable"
-%! ##assert (y(j,:), A);
+%! assert (y(j,:), A);
 
 ## Test "legacy" option
 %!test
@@ -355,6 +386,60 @@
 %! assert (i, [2; 5; 4; 3]);
 %! assert (j, [4; 1; 4; 3; 2]);
 
+%!test <*65176>
+%! a = [3 2 1 2; 1 2 2 1];
+%! [o1, o2, o3] = unique (a);
+%! assert ({o1, o2, o3}, {[1;2;3], [2;3;1], [3;1;2;2;1;2;2;1]});
+%! [o1, o2, o3] = unique (a, "stable");
+%! assert ({o1, o2, o3}, {[3;1;2], [1;2;3], [1;2;3;3;2;3;3;2]})
+
+%!test <*65176>
+%! a = [4,2,4,2,2,3,1];
+%! [o1, o2, o3] = unique (a);
+%! assert ({o1, o2, o3}, {[1,2,3,4], [7;2;6;1], [4;2;4;2;2;3;1]});
+%! [o1, o2, o3] = unique (a, "stable");
+%! assert ({o1, o2, o3}, {[4,2,3,1], [1;2;6;7], [1;2;1;2;2;3;4]})
+
+%!test <*65176>
+%! a = [3 2 1 2; 2 1 2 1];
+%! [o1, o2, o3] = unique (a(1,:), "rows");
+%! assert ({o1, o2, o3}, {a(1,:), 1, 1});
+%! [o1, o2, o3] = unique (a(1,:), "rows", "stable");
+%! assert ({o1, o2, o3}, {a(1,:), 1, 1});
+%! [o1, o2, o3] = unique (a, "rows");
+%! assert ({o1, o2, o3}, {[a(2,:); a(1,:)], [2;1], [2;1]});
+%! [o1, o2, o3] = unique (a, "rows", "stable");
+%! assert ({o1, o2, o3}, {a, [1;2], [1;2]});
+%! [o1, o2, o3] = unique ([a;a], "rows");
+%! assert ({o1, o2, o3}, {[a(2,:); a(1,:)], [2;1], [2;1;2;1]});
+%! [o1, o2, o3] = unique ([a;a], "rows", "stable");
+%! assert ({o1, o2, o3}, {a, [1;2], [1;2;1;2]});
+
+
+%!test <*65176>
+%! a = gallery ("integerdata", [-100, 100], 6, 6);
+%! a = [a(2,:); a(1:5,:); a(2:6,:)];
+%! [o1, o2, o3] = unique (a);
+%! assert ({o1, o1(o3), o2, o3}, {a(:)(o2), a(:), ...
+%! [26;22;34;45;57; 6;11;17;33;28;35;15;56; 2;59; 4;66; ...
+%!  16;50;49;27;24;37;44;48;39;38;13;23; 5;12;46;55; 1], ...
+%! [34;14;34;16;30; 6;34;16;30; 6; 7;31;28;31;12;18; 8;31;12;18; 8; 2;29; ...
+%!  22;29; 1;21;10;29; 1;21;10; 9; 3;11; 3;23;27;26; 3;23;27;26;24; 4;32; ...
+%!  4; 25;20;19; 4;25;20;19;33;13; 5;13;15; 2;24;13;15; 2;24;17]});
+%! [o1, o2, o3] = unique (a, "stable");
+%! assert ({o1, o1(o3), o2, o3}, {a(:)(o2), a(:), ...
+%! [ 1; 2; 4; 5; 6;11;12;13;15;16;17;22;23;24;26;27;28; ...
+%!  33;34;35;37;38;39;44;45;46;48;49;50;55;56;57;59;66], ...
+%! [ 1; 2; 1; 3; 4; 5; 1; 3; 4; 5; 6; 7; 8; 7; 9;10;11; 7; 9;10;11;12;13; ...
+%!  14;13;15;16;17;13;15;16;17;18;19;20;19;21;22;23;19;21;22;23;24;25;26;...
+%!  25;27;28;29;25;27;28;29;30;31;32;31;33;12;24;31;33;12;24;34]});
+%! [o1, o2, o3] = unique (a, "rows");
+%! assert ({o1, o1(o3,:), o2, o3}, {a(o2,:), a, ...
+%! [6;11;2;4;5;1], [6;3;6;4;5;1;6;4;5;1;2]});
+%! [o1, o2, o3] = unique (a, "rows", "stable");
+%! assert ({o1, o1(o3,:), o2, o3}, {a(o2,:), a, ...
+%! [1;2;4;5;6;11], [1;2;1;3;4;5;1;3;4;5;6]});
+
 ## Test input validation
 %!error <Invalid call> unique ()
 %!error <X must be an array or cell array of strings> unique ({1})
@@ -376,6 +461,4 @@
 %!error <invalid option> unique ({"a", "b", "c"}, "rows", "UnknownOption2")
 %!error <invalid option> unique ({"a", "b", "c"}, "UnknownOption1", "last")
 %!warning <"rows" is ignored for cell arrays> unique ({"1"}, "rows");
-%!warning <third output J is not yet implemented>
-%! [y,i,j] = unique ([2,1], "stable");
-%! assert (j, []);
+
--- a/scripts/signal/movfun.m	Mon Feb 26 23:28:09 2024 -0500
+++ b/scripts/signal/movfun.m	Mon Feb 26 23:30:33 2024 -0500
@@ -178,23 +178,25 @@
   valid_bc = {"shrink", "discard", "fill", "same", "periodic"};
 
   ## Parse input arguments
-  parser = inputParser ();
-  parser.FunctionName = "movfun";
-  parser.addParamValue ("Endpoints", "shrink", ...
-    @(x) any (strcmpi (x, valid_bc)) || (isnumeric (x) && isscalar (x)));
-  parser.addParamValue ("dim", [], ...
-    @(d) isempty (d) || (isscalar (d) && isindex (d, ndims (x))));
-  parser.addParamValue ("nancond", "includenan", ...
-    @(x) any (strcmpi (x, {"includenan", "omitnan"})));
-  parser.addParamValue ("outdim", [], ...
-    @(d) isempty (d) || (isvector (d) && isindex (d)));
+  persistent parser;
+  if isempty (parser)
+    parser = inputParser ();
+    parser.FunctionName = "movfun";
+    parser.addParamValue ("Endpoints", "shrink", ...
+      @(x) any (strcmpi (x, valid_bc)) || (isnumeric (x) && isscalar (x)));
+    parser.addParamValue ("dim", [], ...
+      @(d) isempty (d) || (isscalar (d) && isindex (d, ndims (x))));
+    parser.addParamValue ("nancond", "includenan", ...
+      @(x) any (strcmpi (x, {"includenan", "omitnan"})));
+    parser.addParamValue ("outdim", [], ...
+      @(d) isempty (d) || (isvector (d) && isindex (d)));
+  endif
 
   parser.parse (varargin{:});
   bc      = parser.Results.Endpoints;   # boundary condition
   dim     = parser.Results.dim;         # dimension to be used as input
   nancond = parser.Results.nancond;     # whether NaN are ignored or not
   outdim  = parser.Results.outdim;      # selected output dimension of fcn
-  clear parser
   ## End parse input arguments
 
   if (isempty (x))
@@ -261,11 +263,10 @@
     endswitch
   endif
 
-  ## FIXME: Validation doesn't seem to work correctly (noted 12/16/2018).
   ## Validate that outdim makes sense
-  fout = fcn (zeros (length (win), 1, class (x)));  # output for window
-  yclass = class (fout);                    # record class of fcn output
-  noutdim = length (fout);                  # number of output dimensions
+  fout = fcn (x(1:length (win))(:));  # output for window (see bug #55984)
+  yclass = class (fout);              # record class of fcn output
+  noutdim = length (fout);            # number of output dimensions
   if (! isempty (outdim))
     if (max (outdim) > noutdim)
       error ("Octave:invalid-input-arg", ...
--- a/scripts/signal/private/triangle_sw.m	Mon Feb 26 23:28:09 2024 -0500
+++ b/scripts/signal/private/triangle_sw.m	Mon Feb 26 23:30:33 2024 -0500
@@ -24,21 +24,21 @@
 ########################################################################
 
 ## -*- texinfo -*-
-## @deftypefn {} {@var{retval} =} triangle_sw (@var{n}, @var{b})
+## @deftypefn {} {@var{c} =} triangle_sw (@var{n}, @var{b})
 ## Triangular spectral window.
 ##
 ## Subfunction used for spectral density estimation.
 ## @seealso{spectral_xdf}
 ## @end deftypefn
 
-function retval = triangle_sw (n, b)
+function c = triangle_sw (n, b)
 
-  retval = zeros (n,1);
-  retval(1) = 1 / b;
+  c = zeros (n,1);
+  c(1) = 1 / b;
 
   l = (2:n)' - 1;
   l = 2 * pi * l / n;
 
-  retval(2:n) = b * (sin (l / (2*b)) ./ sin (l / 2)).^2;
+  c(2:n) = b * (sin (l / (2*b)) ./ sin (l / 2)).^2;
 
 endfunction
--- a/scripts/specfun/betaln.m	Mon Feb 26 23:28:09 2024 -0500
+++ b/scripts/specfun/betaln.m	Mon Feb 26 23:30:33 2024 -0500
@@ -56,8 +56,6 @@
 
   if (! isreal (a) || ! isreal (b))
     error ("betaln: A and B must be real");
-  elseif (! size_equal (a, b) && numel (a) != 1 && numel (b) != 1)
-    error ("betaln: A and B must have consistent sizes");
   endif
 
   lnb = gammaln (a) + gammaln (b) - gammaln (a + b);
@@ -72,6 +70,3 @@
 %!error <Invalid call> betaln (1)
 %!error <A and B must be real> betaln (1i, 2)
 %!error <A and B must be real> betaln (2, 1i)
-%!error <A and B must have consistent sizes> betaln ([1 2], [1 2 3])
-%!error <A and B must have consistent sizes> betaln ([1 2 3], [1 2])
-%!error <A and B must have consistent sizes> betaln ([1 2 3], [1 2 3]')
--- a/scripts/specfun/nchoosek.m	Mon Feb 26 23:28:09 2024 -0500
+++ b/scripts/specfun/nchoosek.m	Mon Feb 26 23:30:33 2024 -0500
@@ -112,48 +112,53 @@
   n = numel (v);
 
   if (n == 1 && isnumeric (v))
-    ## Improve precision over direct call to prod().
-    ## Steps: 1) Make a list of integers for numerator and denominator,
-    ## 2) filter out common factors, 3) multiply what remains.
-    k = min (k, v-k);
-
-    if (isinteger (v) || isinteger (k))
-      numer = (v-k+1):v;
-      denom = (1:k);
+    ## Compute number of combinations rather than actual set combinations.
+    try
+      ## Use subtraction operation to validate combining integer data types
+      ## and for type propagation rules between integer and floating point.
+      k = min (k, v-k);
+    catch
+      error ("nchoosek: incompatible input types for N (%s), K (%s)", ...
+             class (v), class (k));
+    end_try_catch
+    is_int = isinteger (k);
+    if (is_int)
+      imax = intmax (k);
     else
-      ## For a ~25% performance boost, multiply values pairwise so there
-      ## are fewer elements in do/until loop which is the slow part.
-      ## Since Odd*Even is guaranteed to be Even, also take out a factor
-      ## of 2 from numerator and denominator.
-      if (rem (k, 2))  # k is odd
-        numer = [((v-k+1:v-(k+1)/2) .* (v-1:-1:v-(k-1)/2)) / 2, v];
-        denom = [((1:(k-1)/2) .* (k-1:-1:(k+1)/2)) / 2, k];
-      else             # k is even
-        numer = ((v-k+1:v-k/2) .* (v:-1:v-k/2+1)) / 2;
-        denom = ((1:k/2) .* (k:-1:k/2+1)) / 2;
-      endif
+      imax = flintmax (k);
     endif
-
-    ## Remove common factors from numerator and denominator
-    do
-      for i = numel (denom):-1:1
-        factors = gcd (denom(i), numer);
-        [f, j] = max (factors);
-        denom(i) /= f;
-        numer(j) /= f;
-      endfor
-      denom = denom(denom > 1);
-      numer = numer(numer > 1);
-    until (isempty (denom))
-
-    C = prod (numer, "native");
-    if (isfloat (C) && C > flintmax (C))
+    C = 1;
+    for i = 1:k
+      if (C * (v - k + i) >= imax)
+        ## Avoid overflow / precision loss by determining the smallest
+        ## possible factor of (C * (n-k+i)) and i via the gcd.
+        ## Note that by design in each iteration
+        ##   1) C will always increase (factor is always > 1).
+        ##   2) C will always be a whole number.
+        ## Therefore, using the gcd will always provide the best possible
+        ## solution until saturation / has the least precision loss.
+        g1 = gcd (C, i);
+        g2 = gcd (v - k + i, i/g1);
+        C /= g1;
+        C *= (v - k + i)/g2;
+        if (is_int && (C == imax))
+          break;  # Stop here; saturation reached.
+        endif
+        C /= i/(g1 * g2);
+      else
+        C *= (v - k + i);
+        C /= i;
+      endif
+    endfor
+    if (! is_int && C > imax)
       warning ("Octave:nchoosek:large-output-float", ...
                "nchoosek: possible loss of precision");
-    elseif (isinteger (C) && C == intmax (C))
+    elseif (is_int && C == imax)
       warning ("Octave:nchoosek:large-output-integer", ...
                "nchoosek: result may have saturated at intmax");
     endif
+
+  ## Compute actual set combinations
   elseif (k == 0)
     C = v(zeros (1, 0));  # Return 1x0 object for Matlab compatibility
   elseif (k == 1)
@@ -283,6 +288,15 @@
 %! assert (x, uint8 (252));
 %! assert (class (x), "uint8");
 
+## Test combining rules for integers and floating point
+%!test
+%! x = nchoosek (uint8 (10), single (5));
+%! assert (x, uint8 (252));
+
+%!test
+%! x = nchoosek (double (10), single (5));
+%! assert (x, single (252));
+
 %!test <*63538>
 %! x = nchoosek ([1:3]', 2);
 %! assert (x, [1 2; 1 3; 2 3]);
@@ -299,6 +313,7 @@
 %!error <N must be a non-negative integer .= K> nchoosek (100, 145)
 %!error <N must be a non-negative integer .= K> nchoosek (-100, 45)
 %!error <N must be a non-negative integer .= K> nchoosek (100.5, 45)
+%!error <incompatible input types> nchoosek (uint8 (15), uint16 (5))
 %!warning <possible loss of precision> nchoosek (100, 45);
 %!warning <result .* saturated> nchoosek (uint64 (80), uint64 (40));
 %!warning <result .* saturated> nchoosek (uint32 (80), uint32 (40));
--- a/src/main.in.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/src/main.in.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -314,7 +314,8 @@
           file = octave_cli;
           break;
 
-        case NO_GUI_OPTION:
+        case 'G':
+          // option "--no-gui"
           // If we see this option, then we can just exec octave; we don't
           // have to create a child process and wait for it to exit.  But do
           // exec "octave-gui", not "octave-cli", because even if the
@@ -324,10 +325,10 @@
           new_argv[k++] = argv[old_optind];
           break;
 
-        case GUI_OPTION:
+        case 'g':
+          // option "--gui"
           // If we see this option, then we fork and exec octave with the
-          // --gui option, while continuing to handle signals in the
-          // terminal.
+          // --gui option, while continuing to handle signals in the terminal.
           // Do not copy the arg now, since we still not know if the gui
           // should really be launched.  Just store the index.
           start_gui = true;
@@ -354,14 +355,15 @@
           new_argv[k++] = argv[old_optind];
           break;
 
-        case EVAL_OPTION:
+        case 'e':
+          // option "--eval"
           eval_code = true;
           for (int i = old_optind; i < next_optind; i++)
             new_argv[k++] = argv[i];
           break;
 
         case 'q':
-          // options "--silent" or "--quiet"
+          // options "--quiet" or "--silent"
           warn_display = false;
           new_argv[k++] = argv[old_optind];
           break;
--- a/src/mkoctfile.in.cc	Mon Feb 26 23:28:09 2024 -0500
+++ b/src/mkoctfile.in.cc	Mon Feb 26 23:30:33 2024 -0500
@@ -516,7 +516,7 @@
   "\n"
   "  -v, --verbose           Echo commands as they are executed.\n"
   "\n"
-  "  --silent                Ignored.  Intended to suppress output from\n"
+  "  --quiet                 Ignored.  Intended to suppress output from\n"
   "                          compiler steps.\n"
   "\n"
   "  FILE                    Compile or link FILE.  Recognized file types are:\n"
@@ -799,7 +799,8 @@
         {
           verbose = true;
         }
-      else if (arg == "-silent" ||  arg == "--silent")
+      else if (arg == "-silent" || arg == "--silent"
+               || arg == "-quiet" || arg == "--quiet")
         {
           // Ignored for now.
         }
--- a/test/Makefile.am	Mon Feb 26 23:28:09 2024 -0500
+++ b/test/Makefile.am	Mon Feb 26 23:30:33 2024 -0500
@@ -76,6 +76,7 @@
 include bug-38236/module.mk
 include bug-38691/module.mk
 include bug-41723/module.mk
+include bug-44643/module.mk
 include bug-44940/module.mk
 include bug-45351/module.mk
 include bug-46660/module.mk
@@ -84,6 +85,7 @@
 include bug-49379/module.mk
 include bug-50014/module.mk
 include bug-50035/module.mk
+include bug-50395/module.mk
 include bug-50716/module.mk
 include bug-50831/module.mk
 include bug-51192/module.mk
@@ -134,7 +136,7 @@
 # run-octave (optional-prepare-commands)
 
 define run-octave-tests
-  ( $(SHELL) ../run-octave $(RUN_OCTAVE_OPTIONS) --no-init-file --silent \
+  ( $(SHELL) ../run-octave $(RUN_OCTAVE_OPTIONS) --no-init-file --quiet  \
       --no-history -p $(abs_top_builddir)/test/mex \
       $(abs_top_srcdir)/test/fntests.m $(abs_top_srcdir)/test "$(1)" ) && \
   if $(AM_V_P); then \
--- a/test/args.tst	Mon Feb 26 23:28:09 2024 -0500
+++ b/test/args.tst	Mon Feb 26 23:30:33 2024 -0500
@@ -33,6 +33,8 @@
 %!endfunction
 %!test
 %! f;
+%!error <function called with too many inputs> f (1)
+%!error <function called with too many outputs> y = f ()
 
 ## one input with two possible inputs
 %!function f (x, y)
@@ -41,6 +43,8 @@
 %!endfunction
 %!test
 %! f (1);
+%!error <function called with too many inputs> f (1, 2, 3)
+%!error <function called with too many outputs> y = f ()
 
 ## no inputs, one of multiple outputs
 %!function [x, y] = f ()
@@ -50,6 +54,8 @@
 %!endfunction
 %!test
 %! assert (f (), 2);
+%!error <function called with too many inputs> f (1)
+%!error <function called with too many outputs> [x, y, z] = f ()
 
 ## one of multiple inputs, one of multiple outputs
 %!function [x, y] = f (a, b)
@@ -59,6 +65,8 @@
 %!endfunction
 %!test
 %! assert (f (1), 1);
+%!error <function called with too many inputs> f (1, 2, 3)
+%!error <function called with too many outputs> [x, y, z] = f ()
 
 ########################################
 ## Varargin, varargout
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/bug-44643/bug-44643.tst	Mon Feb 26 23:30:33 2024 -0500
@@ -0,0 +1,8 @@
+%!test <44643>
+%! a = bug44643 ();
+%! b = bug44643 ();
+%! a.parent = b;
+%! b.child  = a;
+%!
+%! assert (isequal (a, b));
+%! assert (isequal (a, a));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/bug-44643/bug44643.m	Mon Feb 26 23:30:33 2024 -0500
@@ -0,0 +1,6 @@
+classdef bug44643 < handle
+  properties
+    child
+    parent
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/bug-44643/module.mk	Mon Feb 26 23:30:33 2024 -0500
@@ -0,0 +1,5 @@
+bug_44643_TEST_FILES = \
+  %reldir%/bug-44643.tst \
+  %reldir%/bug44643.m
+
+TEST_FILES += $(bug_44643_TEST_FILES)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/bug-50395/bug-50395.tst	Mon Feb 26 23:30:33 2024 -0500
@@ -0,0 +1,5 @@
+%!test <50395>
+%! a = bug50395_a ();
+%! clear all
+%! c = 3;
+%! a = bug50395_a ();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/bug-50395/bug50395_a.m	Mon Feb 26 23:30:33 2024 -0500
@@ -0,0 +1,6 @@
+classdef bug50395_a < bug50395_c
+  methods
+     function obj = bug50395_a ()
+     end
+  end
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/bug-50395/bug50395_c.m	Mon Feb 26 23:30:33 2024 -0500
@@ -0,0 +1,2 @@
+classdef bug50395_c
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/bug-50395/module.mk	Mon Feb 26 23:30:33 2024 -0500
@@ -0,0 +1,6 @@
+bug_50395_TEST_FILES = \
+  %reldir%/bug-50395.tst \
+  %reldir%/bug50395_a.m \
+  %reldir%/bug50395_c.m
+
+TEST_FILES += $(bug_50395_TEST_FILES)
--- a/test/classdef/classdef.tst	Mon Feb 26 23:28:09 2024 -0500
+++ b/test/classdef/classdef.tst	Mon Feb 26 23:30:33 2024 -0500
@@ -80,7 +80,7 @@
 %! obj = obj.move_element_to_end (2);
 %! assert (isequal (obj.element, [1 3 2]));
 
-%!error <parse error> plist_t1
+%!error <syntax error> plist_t1
 %!assert (strcmp (class (plist_t2), 'plist_t2'))
 %!assert (strcmp (class (plist_t3), 'plist_t3'))
 
--- a/test/for.tst	Mon Feb 26 23:28:09 2024 -0500
+++ b/test/for.tst	Mon Feb 26 23:30:33 2024 -0500
@@ -130,15 +130,15 @@
 %! __printf_assert__ ("\n");
 %! assert (__prog_output_assert__ ("1234"));
 
-%!test <*50893>
+%!test <*55622>
 %! cnt = 0;
 %! for k = zeros (0,3)
 %!   cnt++;
 %! endfor
-%! assert (cnt, 0);
-%! assert (k, zeros (0,3));
+%! assert (cnt, 3);
+%! assert (k, zeros (0,1));
 
-%!test <*50893>
+%!test <*55622>
 %! cnt = 0;
 %! for k = zeros (3,0)
 %!   cnt++;
@@ -159,8 +159,24 @@
 %! for k = cell (0,3)
 %!   cnt++;
 %! endfor
+%! assert (cnt, 3);
+%! assert (k, cell (0,1));
+
+%!test <*55622>
+%! cnt = 0;
+%! for k = zeros (1,2,3);
+%!   cnt++;
+%! endfor
+%! assert (cnt, 6);
+%! assert (k, 0);
+
+%!test <*55622>
+%! cnt = 0;
+%! for k = zeros (1,2,0);
+%!   cnt++;
+%! endfor
 %! assert (cnt, 0);
-%! assert (k, cell (0,3));
+%! assert (k, zeros (1,0));
 
 %!test <*45143>
 %! warning ("on", "Octave:infinite-loop", "local");
--- a/test/json/jsonencode_BIST.tst	Mon Feb 26 23:28:09 2024 -0500
+++ b/test/json/jsonencode_BIST.tst	Mon Feb 26 23:30:33 2024 -0500
@@ -15,6 +15,8 @@
 %! assert (isequal (jsonencode (logical (1)), 'true'));
 %! assert (isequal (jsonencode (logical (0)), 'false'));
 %! assert (isequal (jsonencode (50.025), '50.025'));
+%! %% FIXME: Uncomment when bug #64960 is fixed
+%! %% assert (isequal (jsonencode (single (50.025)), '50.025'));
 %! assert (isequal (jsonencode (NaN), 'null'));
 %! assert (isequal (jsonencode (NA), 'null'));    % Octave-only test
 %! assert (isequal (jsonencode (Inf), 'null'));
--- a/test/leftdiv.tst	Mon Feb 26 23:28:09 2024 -0500
+++ b/test/leftdiv.tst	Mon Feb 26 23:30:33 2024 -0500
@@ -30,6 +30,72 @@
 %#!assert (0 \ i, Inf)
 %#!assert (0 \ single (i), single (Inf))
 
+################################################################################
+## Series of tests for memory leaks in function
+## sparse_qr<SPARSE_T>min2norm_solve<RHS_T, RET_T> (A, b)
+## in sparse-qr.cc.
+################################################################################
+%!testif HAVE_SPQR, HAVE_CHOLMOD
+%! # <RHS=real full>, <RET=Matrix>, (real sparse, real full)
+%! m = 11; n = 10; mn = max (m ,n);
+%! A = spdiags ([ones(mn,1), 10*ones(mn,1), -ones(mn,1)],[-1,0,1], m, n);
+%! x0 = mldivide (A, ones (m,1));
+
+%!testif HAVE_SPQR, HAVE_CHOLMOD
+%! # <RHS=real sparse>, <RET=SparseMatrix>, (real sparse, real sparse)
+%! m = 11; n = 10; mn = max (m ,n);
+%! A = spdiags ([ones(mn,1), 10*ones(mn,1), -ones(mn,1)],[-1,0,1], m, n);
+%! b = sparse (ones (m,1));
+%! x0 = mldivide (A, b);
+
+%!testif HAVE_SPQR, HAVE_CHOLMOD
+%! # <RHS=complex full>, <RET=ComplexMatrix>, (real sparse, complex full)
+%! m = 11; n = 10; mn = max (m ,n);
+%! A = spdiags ([ones(mn,1), 10*ones(mn,1), -ones(mn,1)],[-1,0,1], m, n);
+%! b = ones (m,1) + i;
+%! x0 = mldivide (A, b);
+
+%!testif HAVE_SPQR, HAVE_CHOLMOD
+%! # <RHS=complex sparse>, <RET=SparseComplexMatrix>, (real sparse, complex sparse)
+%! m = 11; n = 10; mn = max (m ,n);
+%! A = spdiags ([ones(mn,1), 10*ones(mn,1), -ones(mn,1)],[-1,0,1], m, n);
+%! b = sparse (ones (m, 1) + i);
+%! x0 = A \ b;
+
+%!testif HAVE_SPQR, HAVE_CHOLMOD
+%! # <RHS=complex sparse>, <RET=SparseComplexMatrix>, (real sparse, complex sparse)
+%! m = 11; n = 10; mn = max (m ,n);
+%! A = spdiags ([ones(mn,1), 10*ones(mn,1), -ones(mn,1)],[-1,0,1], m, n);
+%! b = sparse (ones (m, 1) + i);
+%! x0 = A \ b;
+
+%!testif HAVE_SPQR, HAVE_CHOLMOD
+%! # <RHS=complex full>, <RET=ComplexMatrix>, (complex sparse, complex full)
+%! m = 11; n = 10; mn = max (m ,n);
+%! A = spdiags ([ones(mn,1), 10*ones(mn,1) + i, -ones(mn,1)],[-1,0,1], m, n);
+%! b = ones (m, 1) + i;
+%! x0 = A \ b;
+
+%!testif HAVE_SPQR, HAVE_CHOLMOD
+%! # <RHS=real full>, <RET=ComplexMatrix>, (complex sparse, real full)
+%! m = 11; n = 10; mn = max (m ,n);
+%! A = spdiags ([ones(mn,1), 10*ones(mn,1) + i, -ones(mn,1)],[-1,0,1], m, n);
+%! b = ones (m, 1);
+%! x0 = A \ b;
+
+%!testif HAVE_SPQR, HAVE_CHOLMOD
+%! # <RHS=complex sparse>, <RET=SparseComplexMatrix>, (complex sparse, complex sparse)
+%! m = 11; n = 10; mn = max (m ,n);
+%! A = spdiags ([ones(mn,1), 10*ones(mn,1) + i, -ones(mn,1)],[-1,0,1], m, n);
+%! b = sparse (ones (m, 1) + i);
+%! x0 = A \ b;
+
+%!testif HAVE_SPQR, HAVE_CHOLMOD
+%! # <RHS=real sparse>, <RET=SparseComplexMatrix>, (complex sparse, real sparse)
+%! m = 11; n = 10; mn = max (m ,n);
+%! A = spdiags ([ones(mn,1), 10*ones(mn,1) + i, -ones(mn,1)],[-1,0,1], m, n);
+%! b = sparse (ones (m, 1));
+
 %!warning <matrix singular to machine precision>
 %! warning ('on', 'Octave:singular-matrix', 'local');
 %! assert ([Inf, 0; 0, 0] \ [1; 1], zeros (2,1));