changeset 32900:af3d1dec5e5d

maint: merge stable to default
author John W. Eaton <jwe@octave.org>
date Thu, 01 Feb 2024 13:28:57 -0500
parents 212bb363f1fa (diff) 4d24afc1d32b (current diff)
children f4d7e6efb2e9 9aeb66a38955
files
diffstat 500 files changed, 7086 insertions(+), 5139 deletions(-) [+]
line wrap: on
line diff
--- a/.github/workflows/make.yaml	Thu Feb 01 13:28:20 2024 -0500
+++ b/.github/workflows/make.yaml	Thu Feb 01 13:28:57 2024 -0500
@@ -638,7 +638,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
@@ -648,14 +648,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
@@ -851,6 +860,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
@@ -863,10 +873,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@v3
+        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/configure.ac	Thu Feb 01 13:28:20 2024 -0500
+++ b/configure.ac	Thu Feb 01 13:28:57 2024 -0500
@@ -27,7 +27,7 @@
 
 ### Initialize Autoconf
 AC_PREREQ([2.65])
-AC_INIT([GNU Octave], [9.0.1], [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=1
+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 ;;
@@ -2784,10 +2784,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 ;;
--- a/doc/interpreter/basics.txi	Thu Feb 01 13:28:20 2024 -0500
+++ b/doc/interpreter/basics.txi	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/doc/interpreter/doccheck/mk_undocumented_list	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/doc/interpreter/external.txi	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/doc/interpreter/graphics_properties.mk	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/doc/interpreter/images.awk	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/doc/interpreter/module.mk	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:57 2024 -0500
@@ -0,0 +1,100 @@
+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.
+
+### 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.
+
+### 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/etc/RELEASE_CHECKLIST.md	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/etc/module.mk	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/examples/code/fortrandemo.cc	Thu Feb 01 13:28:57 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/FigureWindow.cc	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/graphics/FigureWindow.cc	Thu Feb 01 13:28:57 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/GenericEventNotify.h	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/graphics/GenericEventNotify.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/graphics/KeyMap.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/graphics/Object.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/graphics/ObjectProxy.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/graphics/PopupMenuControl.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/graphics/QtHandlesUtils.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/graphics/Table.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/graphics/ToolBarButton.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/graphics/annotation-dialog.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/graphics/qt-graphics-toolkit.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/qterminal/libqterminal/QTerminal.cc	Thu Feb 01 13:28:57 2024 -0500
@@ -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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/qterminal/libqterminal/QTerminal.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/qterminal/libqterminal/unix/QUnixTerminalImpl.cpp	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/qterminal/libqterminal/unix/TerminalView.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/qterminal/libqterminal/win32/QTerminalColors.cpp	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/qterminal/libqterminal/win32/QTerminalColors.h	Thu Feb 01 13:28:57 2024 -0500
@@ -31,7 +31,7 @@
 class QConsoleColors : public QMap<int, QColor>
 {
 public:
-  QConsoleColors (void);
+  QConsoleColors ();
 };
 
 //////////////////////////////////////////////////////////////////////////////
--- a/libgui/qterminal/libqterminal/win32/QWinTerminalImpl.cpp	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/qterminal/libqterminal/win32/QWinTerminalImpl.cpp	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/qterminal/libqterminal/win32/QWinTerminalImpl.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/color-picker.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/command-widget.cc	Thu Feb 01 13:28:57 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
@@ -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
@@ -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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/community-news.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/dialog.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/documentation-bookmarks.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/documentation-dock-widget.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/documentation.cc	Thu Feb 01 13:28:57 2024 -0500
@@ -357,9 +357,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 +381,8 @@
   return a;
 }
 
-void documentation::construct_tool_bar ()
+void
+documentation::construct_tool_bar ()
 {
   // Home, Previous, Next
   gui_settings settings;
@@ -470,7 +472,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 +511,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 +591,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 +618,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 +647,8 @@
   m_doc_browser->moveCursor (QTextCursor::Start);
 }
 
-void documentation::notice_settings ()
+void
+documentation::notice_settings ()
 {
   gui_settings settings;
 
@@ -673,7 +681,8 @@
   m_doc_browser->notice_settings ();
 }
 
-void documentation::save_settings ()
+void
+documentation::save_settings ()
 {
   gui_settings settings;
 
@@ -681,7 +690,8 @@
   m_bookmarks->save_settings ();
 }
 
-void documentation::copyClipboard ()
+void
+documentation::copyClipboard ()
 {
   if (m_doc_browser->hasFocus ())
     {
@@ -689,11 +699,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 +720,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 +787,8 @@
     }
 }
 
-void documentation::activate_find ()
+void
+documentation::activate_find ()
 {
   if (m_find_line_edit->parentWidget ()->isVisible ())
     {
@@ -788,7 +803,8 @@
     }
 }
 
-void documentation::filter_update (const QString& expression)
+void
+documentation::filter_update (const QString& expression)
 {
   if (! m_help_engine)
     return;
@@ -800,7 +816,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 +829,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 +860,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 +880,8 @@
     }
 }
 
-void documentation::record_anchor_position ()
+void
+documentation::record_anchor_position ()
 {
   if (! m_help_engine)
     return;
@@ -868,7 +889,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 +899,8 @@
     record_anchor_position ();
 }
 
-void documentation::registerDoc (const QString& qch)
+void
+documentation::registerDoc (const QString& qch)
 {
   if (m_help_engine)
     {
@@ -906,7 +929,8 @@
     }
 }
 
-void documentation::unregisterDoc (const QString& qch)
+void
+documentation::unregisterDoc (const QString& qch)
 {
   if (! m_help_engine)
     return;
@@ -921,7 +945,8 @@
     }
 }
 
-void documentation::update_history_menus ()
+void
+documentation::update_history_menus ()
 {
   if (m_prev_pages_count != m_doc_browser->backwardHistoryCount ())
     {
@@ -938,7 +963,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 +1002,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 ();
@@ -1037,7 +1065,8 @@
   // 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 +1087,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 +1099,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 (url);
@@ -1078,7 +1108,8 @@
     QDesktopServices::openUrl (url);
 }
 
-void documentation_browser::notice_settings ()
+void
+documentation_browser::notice_settings ()
 {
   gui_settings settings;
 
@@ -1090,7 +1121,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 +1130,8 @@
     return QTextBrowser::loadResource(type, url);
 }
 
-void documentation_browser::save_settings ()
+void
+documentation_browser::save_settings ()
 {
   gui_settings settings;
 
@@ -1107,7 +1140,8 @@
   settings.sync ();
 }
 
-void documentation_browser::zoom_in ()
+void
+documentation_browser::zoom_in ()
 {
   if (m_zoom_level < max_zoom_level)
     {
@@ -1116,7 +1150,8 @@
     }
 }
 
-void documentation_browser::zoom_out ()
+void
+documentation_browser::zoom_out ()
 {
   if (m_zoom_level > min_zoom_level)
     {
@@ -1125,13 +1160,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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/dw-main-window.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/external-editor-interface.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/files-dock-widget.cc	Thu Feb 01 13:28:57 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 }
   {
   }
 
@@ -415,7 +415,8 @@
     make_window ();
 }
 
-void files_dock_widget::save_settings ()
+void
+files_dock_widget::save_settings ()
 {
   gui_settings settings;
 
@@ -441,24 +442,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 +472,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 +481,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 +546,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 +557,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 +583,8 @@
     }
 }
 
-void files_dock_widget::headercontextmenu_requested (const QPoint& mpos)
+void
+files_dock_widget::headercontextmenu_requested (const QPoint& mpos)
 {
   QMenu menu (this);
 
@@ -604,7 +616,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);
@@ -701,7 +714,8 @@
     }
 }
 
-void files_dock_widget::contextmenu_open (bool)
+void
+files_dock_widget::contextmenu_open (bool)
 {
 
   QItemSelectionModel *m = m_file_tree_view->selectionModel ();
@@ -715,7 +729,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 +744,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 +754,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 +773,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 +789,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 +804,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 +816,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 +847,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 +893,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 +913,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 +930,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 +947,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 +956,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 +970,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 +1007,8 @@
     }
 }
 
-void files_dock_widget::notice_settings ()
+void
+files_dock_widget::notice_settings ()
 {
   gui_settings settings;
 
@@ -993,7 +1024,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 +1033,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 +1053,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 +1064,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 +1076,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 +1119,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 +1136,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 +1165,8 @@
     }
 }
 
-void files_dock_widget::pasteClipboard ()
+void
+files_dock_widget::pasteClipboard ()
 {
   if (m_current_directory->hasFocus ())
     {
@@ -1136,7 +1178,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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/find-files-dialog.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/find-files-model.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/gui-preferences-cs.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/gui-preferences-ed.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/gui-preferences-global.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/gui-preferences-sc.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/gui-preferences-ve.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/gui-preferences-ws.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/gui-preferences.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/gui-settings.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/gui-utils.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/history-dock-widget.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/interpreter-qobject.cc	Thu Feb 01 13:28:57 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?
@@ -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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/led-indicator.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/led-indicator.h	Thu Feb 01 13:28:57 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-tab.cc	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/m-editor/file-editor-tab.cc	Thu Feb 01 13:28:57 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)));
@@ -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
@@ -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 ();
 
@@ -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,7 +1236,8 @@
   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)
@@ -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,7 +1315,8 @@
   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;
@@ -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
@@ -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);
@@ -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;
@@ -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"
@@ -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.
@@ -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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/m-editor/file-editor.cc	Thu Feb 01 13:28:57 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 ());
 }
@@ -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,7 +323,8 @@
   request_new_file ("");
 }
 
-void file_editor::restore_session ()
+void
+file_editor::restore_session ()
 {
   gui_settings settings;
 
@@ -355,7 +363,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 +386,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 +398,8 @@
   reset_focus ();
 }
 
-void file_editor::set_focus (QWidget *fet)
+void
+file_editor::set_focus (QWidget *fet)
 {
   setFocus ();
 
@@ -399,7 +410,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 +450,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 +494,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 +545,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 +581,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 +599,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 +620,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 +638,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 +649,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 +659,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
@@ -715,166 +745,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 +946,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 +971,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 +1022,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 +1077,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 +1111,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 +1146,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 +1163,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 +1224,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 +1252,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 +1333,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 +1365,8 @@
   m_tmp_closed_files.clear ();
 }
 
-void file_editor::notice_settings ()
+void
+file_editor::notice_settings ()
 {
   gui_settings settings;
 
@@ -1393,7 +1473,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 +1568,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);
 
@@ -1506,7 +1588,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 +1602,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 +1643,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 +1850,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 +1956,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 +1965,8 @@
 }
 
 // handler for the close event
-void file_editor::closeEvent (QCloseEvent *e)
+void
+file_editor::closeEvent (QCloseEvent *e)
 {
   gui_settings settings;
 
@@ -1887,7 +1992,8 @@
   octave_dock_widget::closeEvent (e);
 }
 
-void file_editor::dragEnterEvent (QDragEnterEvent *e)
+void
+file_editor::dragEnterEvent (QDragEnterEvent *e)
 {
   if (e->mimeData ()->hasUrls ())
     {
@@ -1895,7 +2001,8 @@
     }
 }
 
-void file_editor::dropEvent (QDropEvent *e)
+void
+file_editor::dropEvent (QDropEvent *e)
 {
   if (e->mimeData ()->hasUrls ())
     {
@@ -1904,7 +2011,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 +2035,8 @@
   return false;
 }
 
-void file_editor::construct ()
+void
+file_editor::construct ()
 {
   QWidget *editor_widget = new QWidget (this);
 
@@ -2417,7 +2526,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 +2551,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
@@ -2650,8 +2761,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 +2775,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 +2815,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 +2838,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 +2849,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 +2918,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 +2928,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 +2953,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 +2986,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/find-dialog.cc	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/m-editor/find-dialog.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/m-editor/marker.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/m-editor/marker.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/m-editor/octave-qscintilla.cc	Thu Feb 01 13:28:57 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,7 +336,8 @@
 }
 
 // common function with flag for documentation
-void octave_qscintilla::contextmenu_help_doc (bool documentation)
+void
+octave_qscintilla::contextmenu_help_doc (bool documentation)
 {
   if (documentation)
     {
@@ -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)
@@ -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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/m-editor/octave-qscintilla.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/m-editor/octave-txt-lexer.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/main-window.cc	Thu Feb 01 13:28:57 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.
@@ -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.
@@ -701,7 +719,8 @@
     }
 }
 
-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 ())
     {
@@ -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,8 +801,9 @@
     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)
@@ -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.
 
@@ -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 ())
     {
@@ -1147,7 +1190,8 @@
   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)
@@ -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,7 +1272,8 @@
   m_debug_quit->setEnabled (false);
 }
 
-void main_window::debug_continue ()
+void
+main_window::debug_continue ()
 {
   emit interpreter_event
     ([=] (interpreter& interp)
@@ -1239,7 +1287,8 @@
      });
 }
 
-void main_window::debug_step_into ()
+void
+main_window::debug_step_into ()
 {
   emit interpreter_event
     ([=] (interpreter& interp)
@@ -1253,7 +1302,8 @@
      });
 }
 
-void main_window::debug_step_over ()
+void
+main_window::debug_step_over ()
 {
   if (m_debug_quit->isEnabled ())
     {
@@ -1278,7 +1328,8 @@
     }
 }
 
-void main_window::debug_step_out ()
+void
+main_window::debug_step_out ()
 {
   emit interpreter_event
     ([=] (interpreter& interp)
@@ -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
@@ -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
 
@@ -1807,7 +1876,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 +1913,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,7 +1944,8 @@
 
 }
 
-void main_window::set_screen_size (int ht, int wd)
+void
+main_window::set_screen_size (int ht, int wd)
 {
   emit interpreter_event
     ([=] ()
@@ -1884,7 +1956,8 @@
      });
 }
 
-void main_window::clipboard_has_changed ()
+void
+main_window::clipboard_has_changed ()
 {
   if (m_clipboard->text ().isEmpty ())
     {
@@ -1898,12 +1971,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 +1989,8 @@
     }
 }
 
-void main_window::restore_create_file_setting ()
+void
+main_window::restore_create_file_setting ()
 {
   // restore the new files creation setting
 
@@ -1925,7 +2001,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,13 +2010,15 @@
 // 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)
@@ -1949,7 +2028,8 @@
       });
 }
 
-void main_window::profiler_session_resume ()
+void
+main_window::profiler_session_resume ()
 {
   emit interpreter_event
     ([=] (interpreter& interp)
@@ -1959,7 +2039,8 @@
       });
 }
 
-void main_window::profiler_stop ()
+void
+main_window::profiler_stop ()
 {
   emit interpreter_event
     ([=] (interpreter& interp)
@@ -1969,7 +2050,8 @@
       });
 }
 
-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 +2063,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 +2073,8 @@
   execute_command_in_terminal ("profshow");
 }
 
-void main_window::closeEvent (QCloseEvent *e)
+void
+main_window::closeEvent (QCloseEvent *e)
 {
   write_settings ();
 
@@ -2023,7 +2107,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 +2124,8 @@
 
 // Main subroutine of the constructor
 
-void main_window::construct ()
+void
+main_window::construct ()
 {
   setWindowIcon (QIcon (dw_icon_set_names["NONE"]));
 
@@ -2086,7 +2172,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 ();
 
@@ -2129,9 +2216,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 +2233,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 +2252,8 @@
   return menu;
 }
 
-void main_window::construct_menu_bar ()
+void
+main_window::construct_menu_bar ()
 {
   QMenuBar *menu_bar = menuBar ();
 
@@ -2184,7 +2274,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 +2289,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 +2337,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 +2357,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"));
 
@@ -2352,9 +2446,10 @@
 
 }
 
-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 +2466,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 +2497,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 +2525,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 +2563,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 +2615,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 +2623,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 +2650,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,7 +2662,8 @@
                                     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"));
 
@@ -2581,7 +2684,8 @@
   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 +2750,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 +2759,8 @@
     focus_command_window ();
 }
 
-void main_window::configure_shortcuts ()
+void
+main_window::configure_shortcuts ()
 {
   gui_settings settings;
 
@@ -2729,7 +2835,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 +2851,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 ();
@@ -2760,7 +2868,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 +2879,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 +2889,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 ();
@@ -2802,7 +2913,8 @@
 // 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/octave-dock-widget.cc	Thu Feb 01 13:28:57 2024 -0500
@@ -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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/octave-qobject.cc	Thu Feb 01 13:28:57 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
     {
@@ -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 ();
 }
@@ -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,7 +932,8 @@
   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)
@@ -930,7 +951,8 @@
     });
 }
 
-void base_qobject::close_gui ()
+void
+base_qobject::close_gui ()
 {
   if (m_app_context.experimental_terminal_widget ())
     {
@@ -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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/qt-application.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/qt-interpreter-events.cc	Thu Feb 01 13:28:57 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,17 +669,19 @@
   delete_debugger_pointer (file, line);
 }
 
-void qt_interpreter_events::exit_debugger_event ()
+void
+qt_interpreter_events::exit_debugger_event ()
 {
   emit exit_debugger_signal ();
 }
 
 // Display (if @insert true) or remove the appropriate symbol for a breakpoint
 // in @file at @line with condition @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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/release-notes.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/set-path-dialog.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/set-path-model.cc	Thu Feb 01 13:28:57 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,7 +74,8 @@
   return path_str;
 }
 
-void set_path_model::model_to_path ()
+void
+set_path_model::model_to_path ()
 {
   std::string path_str = to_string ();
 
@@ -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
@@ -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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/settings-dialog.cc	Thu Feb 01 13:28:57 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 ());
@@ -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,
@@ -1475,7 +1492,8 @@
            [=] () { 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);
@@ -1587,7 +1607,8 @@
            [=] () { 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);
@@ -1697,7 +1720,8 @@
            [=] () { 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/shortcuts-tree-widget.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/tab-bar.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/terminal-dock-widget.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/variable-editor-model.cc	Thu Feb 01 13:28:57 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 ())
--- a/libgui/src/variable-editor.cc	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/variable-editor.cc	Thu Feb 01 13:28:57 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 ());
@@ -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);
     }
 }
 
@@ -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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/variable-editor.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/welcome-wizard.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libgui/src/workspace-view.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/Cell.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/Cell.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/__betainc__.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/__dsearchn__.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/__expint__.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/__gammainc__.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/__ichol__.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/__ilu__.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/__lin_interpn__.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/__magick_read__.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/__pchip_deriv__.cc	Thu Feb 01 13:28:57 2024 -0500
@@ -82,7 +82,7 @@
                 {
                   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)
@@ -124,7 +124,7 @@
                 {
                   F77_XFCN (pchim, PCHIM, (nx, xvec.data (),
                                            ymat.data () + k * inc,
-                                           dmat.fortran_vec () + k * inc,
+                                           dmat.rwdata () + k * inc,
                                            incfd, ierr));
 
                   k++;
@@ -165,7 +165,7 @@
                 {
                   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)
@@ -207,7 +207,7 @@
                 {
                   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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/amd.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/auto-shlib.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/base-text-renderer.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/besselj.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/bitfcns.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/c-file-ptr-stream.h	Thu Feb 01 13:28:57 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.h	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/call-stack.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/cellfun.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/chol.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/data.cc	Thu Feb 01 13:28:57 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)
                 {
@@ -2927,11 +2927,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);
@@ -2993,9 +2993,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 */)
 {
@@ -3008,6 +3013,8 @@
   return ovl ((octave_value (args(0)).size ())(0));
 }
 
+DEFALIAS (height, rows);
+
 /*
 %!assert (rows (ones (2,5)), 2)
 %!assert (rows (ones (5,2)), 5)
@@ -3038,9 +3045,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 */)
 {
@@ -3053,6 +3065,8 @@
   return ovl ((octave_value (args(0)).size ())(1));
 }
 
+DEFALIAS (width, columns);
+
 DEFUN (sum, args, ,
        doc: /* -*- texinfo -*-
 @deftypefn  {} {@var{y} =} sum (@var{x})
@@ -5659,9 +5673,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)
@@ -7863,7 +7877,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)
@@ -7947,7 +7961,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;
@@ -7956,7 +7970,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 ();
@@ -8337,7 +8351,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/defun-int.h	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/defun-int.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/dlmread.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/dot.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/dynamic-ld.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/ellipj.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/event-manager.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/event-queue.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/filter.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/find.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/ft-text-renderer.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/gcd.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/gl-render.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/gl-render.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/gl2ps-print.cc	Thu Feb 01 13:28:57 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:
 
@@ -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);
 }
--- a/libinterp/corefcn/graphics.cc	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/graphics.cc	Thu Feb 01 13:28:57 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;
@@ -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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/graphics.in.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/input.cc	Thu Feb 01 13:28:57 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:
 
--- a/libinterp/corefcn/interpreter.cc	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/interpreter.cc	Thu Feb 01 13:28:57 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),
@@ -1100,8 +1100,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 +1109,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 +1130,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 +1179,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 +1205,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 +1229,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 +1237,8 @@
         }
     }
 
-  if (m_interactive && verbose)
-    std::cout << std::endl;
+  if (m_interactive && trace)
+    octave_stdout << std::endl;
 
   return exit_status;
 }
@@ -1655,6 +1655,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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/interpreter.h	Thu Feb 01 13:28:57 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)
@@ -393,6 +405,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,
@@ -638,9 +652,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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/jsondecode.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/jsonencode.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/kron.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/latex-text-renderer.cc	Thu Feb 01 13:28:57 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.h	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/load-path.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/ls-mat4.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/ls-mat5.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/matrix_type.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/mex.cc	Thu Feb 01 13:28:57 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 ())
       {
@@ -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 ())
       {
@@ -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 ();
 }
@@ -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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/mx-type-traits.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/oct-errno.h	Thu Feb 01 13:28:57 2024 -0500
@@ -34,8 +34,7 @@
 
 #include "oct-map.h"
 
-class
-octave_errno
+class octave_errno
 {
 protected:
 
--- a/libinterp/corefcn/oct-fstrm.h	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/oct-fstrm.h	Thu Feb 01 13:28:57 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-iostrm.h	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/oct-iostrm.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/oct-map.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/oct-prcstrm.h	Thu Feb 01 13:28:57 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.h	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/oct-procbuf.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/oct-process.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/oct-stdstrm.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/oct-stream.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/oct-stream.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/oct-strstrm.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/ordqz.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/ordschur.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/pager.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/perms.cc	Thu Feb 01 13:28:57 2024 -0500
@@ -101,7 +101,7 @@
   // 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;
@@ -165,7 +165,7 @@
   // 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;
--- a/libinterp/corefcn/pr-flt-fmt.h	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/pr-flt-fmt.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/pr-output.cc	Thu Feb 01 13:28:57 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);
 
--- a/libinterp/corefcn/pr-output.h	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/pr-output.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/procstream.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/psi.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/qr.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/quadcc.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/qz.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/rand.cc	Thu Feb 01 13:28:57 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/sqrtm.cc	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/sqrtm.cc	Thu Feb 01 13:28:57 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.fortran_vec ();
+  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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/stack-frame.cc	Thu Feb 01 13:28:57 2024 -0500
@@ -190,6 +190,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 +323,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 +564,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 +636,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;
@@ -1377,6 +1400,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 ()
 {
@@ -2402,6 +2434,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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/stack-frame.h	Thu Feb 01 13:28:57 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);
--- a/libinterp/corefcn/strfind.cc	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/strfind.cc	Thu Feb 01 13:28:57 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/sub2ind.cc	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/sub2ind.cc	Thu Feb 01 13:28:57 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.h	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/syminfo.h	Thu Feb 01 13:28:57 2024 -0500
@@ -50,9 +50,7 @@
   std::string line;
 };
 
-class
-OCTINTERP_API
-symbol_info
+class OCTINTERP_API symbol_info
 {
 public:
 
@@ -90,9 +88,7 @@
   bool m_is_persistent;
 };
 
-class
-OCTINTERP_API
-symbol_info_list : public base_list<symbol_info>
+class OCTINTERP_API symbol_info_list : public base_list<symbol_info>
 {
 public:
 
--- a/libinterp/corefcn/symrcm.cc	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/symrcm.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/symrec.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/symscope.cc	Thu Feb 01 13:28:57 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/text-engine.h	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/text-engine.h	Thu Feb 01 13:28:57 2024 -0500
@@ -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,9 +103,7 @@
   int m_symbol;
 };
 
-class
-OCTINTERP_API
-text_element_list
+class OCTINTERP_API text_element_list
   : public text_element, public base_list<text_element *>
 {
 public:
@@ -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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/text-renderer.h	Thu Feb 01 13:28:57 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/tril.cc	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/tril.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/typecast.cc	Thu Feb 01 13:28:57 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.h	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/utils.h	Thu Feb 01 13:28:57 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:
 
--- a/libinterp/corefcn/xdiv.cc	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/xdiv.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/corefcn/xpow.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/dldfcn/__delaunayn__.cc	Thu Feb 01 13:28:57 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;
--- a/libinterp/dldfcn/__glpk__.cc	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/dldfcn/__glpk__.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/dldfcn/__ode15__.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/dldfcn/__voronoi__.cc	Thu Feb 01 13:28:57 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/audioread.cc	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/dldfcn/audioread.cc	Thu Feb 01 13:28:57 2024 -0500
@@ -128,7 +128,7 @@
 
   Matrix audio (items, info.channels);
 
-  double *paudio = audio.fortran_vec ();
+  double *paudio = audio.rwdata ();
 
   data += start * info.channels;
 
--- a/libinterp/dldfcn/convhulln.cc	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/dldfcn/convhulln.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/cdef-class.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/cdef-manager.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/cdef-method.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/cdef-object.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/cdef-package.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/cdef-property.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-base-diag.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-base-diag.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-base-int.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-base-int.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-base-mat.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-base-mat.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-base-scalar.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-base-sparse.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-base-sparse.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-base.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-base.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-bool-mat.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-bool-mat.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-bool-sparse.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-bool-sparse.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-bool.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-builtin.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-cell.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-cell.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-ch-mat.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-ch-mat.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-class.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-class.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-classdef.cc	Thu Feb 01 13:28:57 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 ())
--- a/libinterp/octave-value/ov-classdef.h	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-classdef.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-colon.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-complex.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-cs-list.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-cx-diag.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-cx-diag.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-cx-mat.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-cx-mat.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-cx-sparse.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-cx-sparse.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-dld-fcn.h	Thu Feb 01 13:28:57 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.h	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-fcn-handle.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-fcn.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-float.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-flt-complex.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-flt-cx-diag.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-flt-cx-diag.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-flt-cx-mat.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-flt-cx-mat.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-flt-re-diag.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-flt-re-diag.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-flt-re-mat.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-flt-re-mat.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-int-traits.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-intx.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-java.cc	Thu Feb 01 13:28:57 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);
@@ -1443,7 +1443,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; \
@@ -1496,7 +1496,7 @@
                                        (jni_env->CallObjectMethod (jobj,
                                            mID)));
                   jni_env->GetDoubleArrayRegion (dv, 0, m.numel (),
-                                                 m.fortran_vec ());
+                                                 m.rwdata ());
                   retval = m;
                   break;
                 }
@@ -1512,7 +1512,7 @@
                                              mID)));
                       jni_env->GetByteArrayRegion (dv, 0, m.numel (),
                                                    reinterpret_cast<jbyte *>
-                                                   (m.fortran_vec ()));
+                                                   (m.rwdata ()));
                       retval = m;
                       break;
                     }
@@ -1526,7 +1526,7 @@
                                              mID)));
                       jni_env->GetByteArrayRegion (dv, 0, m.numel (),
                                                    reinterpret_cast<jbyte *>
-                                                   (m.fortran_vec ()));
+                                                   (m.rwdata ()));
                       retval = m;
                       break;
                     }
@@ -1543,7 +1543,7 @@
                                             mID)));
                       jni_env->GetIntArrayRegion (dv, 0, m.numel (),
                                                   reinterpret_cast<jint *>
-                                                  (m.fortran_vec ()));
+                                                  (m.rwdata ()));
                       retval = m;
                       break;
                     }
@@ -1557,7 +1557,7 @@
                                             mID)));
                       jni_env->GetIntArrayRegion (dv, 0, m.numel (),
                                                   reinterpret_cast<jint *>
-                                                  (m.fortran_vec ()));
+                                                  (m.rwdata ()));
                       retval = m;
                       break;
                     }
@@ -1612,7 +1612,7 @@
                 {
                   Matrix m (1, len);
                   jni_env->GetDoubleArrayRegion (jarr, 0, len,
-                                                 m.fortran_vec ());
+                                                 m.rwdata ());
                   retval = m;
                 }
               else
@@ -1647,7 +1647,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 ();
                 }
@@ -1825,7 +1825,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);
     }
@@ -1835,7 +1835,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);
 
@@ -1849,7 +1849,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));
@@ -1861,7 +1861,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));
@@ -1873,7 +1873,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));
@@ -1885,7 +1885,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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-lazy-idx.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-legacy-range.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-legacy-range.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-magic-int.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-mex-fcn.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-null-mat.h	Thu Feb 01 13:28:57 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-perm.cc	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-perm.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-perm.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-range-traits.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-range.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-re-diag.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-re-diag.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-re-mat.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-re-mat.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-re-sparse.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-re-sparse.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-scalar.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-str-mat.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-str-mat.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-struct.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-struct.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-typeinfo.h	Thu Feb 01 13:28:57 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.h	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov-usr-fcn.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ov.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ovl.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave-value/ovl.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/octave.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/operators/op-int.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/operators/op-mi.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/operators/op-str-str.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/operators/op-struct.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/options.h	Thu Feb 01 13:28:57 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/comment-list.h	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/parse-tree/comment-list.h	Thu Feb 01 13:28:57 2024 -0500
@@ -40,8 +40,7 @@
 
 extern void save_comment_text (const std::string& text);
 
-class
-comment_elt
+class comment_elt
 {
 public:
 
@@ -93,8 +92,7 @@
   comment_type m_type;
 };
 
-class
-comment_list : public base_list<comment_elt>
+class comment_list : public base_list<comment_elt>
 {
 public:
 
--- a/libinterp/parse-tree/lex.h	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/parse-tree/lex.h	Thu Feb 01 13:28:57 2024 -0500
@@ -48,8 +48,7 @@
 
 // For communication between the lexer and parser.
 
-class
-lexical_feedback
+class lexical_feedback
 {
 public:
 
@@ -526,8 +525,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:
 
@@ -562,8 +560,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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/parse-tree/oct-parse.yy	Thu Feb 01 13:28:57 2024 -0500
@@ -3935,7 +3935,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;
@@ -5528,34 +5528,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)
   {
@@ -5573,56 +5545,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 ();
   }
 
@@ -5683,7 +5648,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;
   }
@@ -5755,7 +5720,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;
   }
--- a/libinterp/parse-tree/profiler.h	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/parse-tree/profiler.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/parse-tree/pt-anon-scopes.h	Thu Feb 01 13:28:57 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-eval.cc	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/parse-tree/pt-eval.cc	Thu Feb 01 13:28:57 2024 -0500
@@ -1451,6 +1451,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
 {
@@ -2187,7 +2194,10 @@
   code->call (*this, 0, octave_value_list ());
 
   if (verbose)
-    octave_stdout << "done." << std::endl;
+    {
+      octave_stdout << "done." << std::endl;
+      octave_stdout.flush ();
+    }
 }
 
 void
@@ -3178,7 +3188,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);
@@ -5559,4 +5569,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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/parse-tree/pt-eval.h	Thu Feb 01 13:28:57 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 *);
--- a/libinterp/parse-tree/pt-tm-const.cc	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/parse-tree/pt-tm-const.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/libinterp/usage.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/Array-base.cc	Thu Feb 01 13:28:57 2024 -0500
@@ -508,7 +508,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 +749,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 +765,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 +777,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 +811,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 +820,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 +884,7 @@
               retval = Array<T, Alloc> (rdv);
 
               // Do it.
-              rh.index (data (), retval.fortran_vec ());
+              rh.index (data (), retval.rwdata ());
             }
         }
     }
@@ -951,10 +951,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 +965,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 +988,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 +1035,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 +1072,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 +1101,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));
@@ -1163,9 +1163,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 +1243,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 +1367,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
@@ -1429,7 +1429,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 +1482,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 +1633,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 +1761,7 @@
 
 template <typename T, typename Alloc>
 T *
-Array<T, Alloc>::fortran_vec ()
+Array<T, Alloc>::rwdata ()
 {
   make_unique ();
 
@@ -1800,7 +1800,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 +1898,7 @@
 
   Array<T, Alloc> m (dims ());
 
-  dim_vector dv = m.dims ();
+  const dim_vector& dv = m.dims ();
 
   if (m.numel () < 1)
     {
@@ -1913,13 +1913,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 +2087,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 +2196,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 +2211,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 +2250,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 +2275,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 +2400,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 +2540,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 +2685,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 +2791,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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/Array-util.cc	Thu Feb 01 13:28:57 2024 -0500
@@ -574,7 +574,7 @@
           // 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)
             {
@@ -617,7 +617,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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/Array.h	Thu Feb 01 13:28:57 2024 -0500
@@ -124,9 +124,7 @@
 //!   - Cell: Array<octave_value>, equivalent to an Octave cell.
 
 template <typename T, typename Alloc>
-class
-OCTARRAY_TEMPLATE_API
-Array
+class OCTARRAY_TEMPLATE_API Array
 {
 protected:
 
@@ -157,8 +155,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) { }
@@ -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; }
@@ -863,7 +868,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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/CColVector.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/CColVector.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/CDiagMatrix.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/CDiagMatrix.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/CMatrix.cc	Thu Feb 01 13:28:57 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);
 
@@ -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,
@@ -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))
@@ -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),
@@ -1657,7 +1657,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 +1683,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),
@@ -1751,7 +1751,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 +1779,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,
@@ -1809,7 +1809,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 +1831,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)
@@ -1902,7 +1902,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),
@@ -2310,11 +2310,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 +2353,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 +2423,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;
@@ -2536,11 +2536,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 +2570,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 +2597,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 +2645,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 +2749,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 +2770,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 +3275,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 +3374,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 +3412,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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/CMatrix.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/CNDArray.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/CNDArray.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/CRowVector.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/CRowVector.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/CSparse.cc	Thu Feb 01 13:28:57 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),
@@ -3709,7 +3704,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 +3770,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 +3842,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 ())
             {
@@ -4042,7 +4037,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 +4103,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 +4173,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 ())
             {
@@ -4346,7 +4341,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 +4390,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),
@@ -4431,7 +4426,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 +4458,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 +4488,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 +4521,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);
 
@@ -4564,7 +4559,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 ());
@@ -4617,7 +4612,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 +4659,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),
@@ -4767,7 +4762,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 +4792,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 +4823,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);
 
@@ -4956,7 +4951,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 +5000,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),
@@ -5043,7 +5038,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 +5067,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 +5097,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 +5128,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);
 
@@ -5174,7 +5169,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),
@@ -5223,7 +5218,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 +5268,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),
@@ -5380,7 +5375,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 +5405,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 +5436,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);
 
@@ -5554,7 +5549,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 +5583,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),
@@ -5829,8 +5824,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 +5838,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)
                 {
@@ -6086,8 +6081,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 ();
@@ -6360,15 +6355,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)
                 {
@@ -6596,8 +6591,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 ();
@@ -6756,12 +6751,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 +6812,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 +6873,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 +6935,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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/CSparse.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/DiagArray2.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/MArray.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/MArray.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/MDiagArray2.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/MSparse.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/MatrixType.h	Thu Feb 01 13:28:57 2024 -0500
@@ -32,8 +32,7 @@
 
 #include "MSparse.h"
 
-class
-MatrixType
+class MatrixType
 {
 public:
   enum matrix_type
--- a/liboctave/array/PermMatrix.cc	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/PermMatrix.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/Range.h	Thu Feb 01 13:28:57 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,7 +249,7 @@
         // 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)
         {
--- a/liboctave/array/Sparse.cc	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/Sparse.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/Sparse.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/boolMatrix.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/boolNDArray.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/boolSparse.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/boolSparse.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/chMatrix.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/chNDArray.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/dColVector.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/dColVector.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/dDiagMatrix.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/dDiagMatrix.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/dMatrix.cc	Thu Feb 01 13:28:57 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);
 
@@ -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,
@@ -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));
 
@@ -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),
@@ -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),
@@ -1418,7 +1418,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 +1446,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,
@@ -1476,7 +1476,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 +1501,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;
 
@@ -1563,7 +1563,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 +1675,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 +1692,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;
@@ -1959,11 +1959,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 +1998,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 +2066,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;
@@ -2181,11 +2181,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 +2213,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 +2230,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 +2338,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 +2730,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 +2807,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 +2829,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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/dMatrix.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/dNDArray.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/dNDArray.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/dRowVector.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/dRowVector.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/dSparse.cc	Thu Feb 01 13:28:57 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),
@@ -3656,7 +3651,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 +3716,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 +3784,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 ())
             {
@@ -3978,7 +3973,7 @@
           rcond = 1.;
 
           retval = b;
-          Complex *result = retval.fortran_vec ();
+          Complex *result = retval.rwdata ();
 
           F77_INT tmp_err = 0;
 
@@ -4044,7 +4039,7 @@
           rcond = 1.;
 
           retval = b;
-          Complex *result = retval.fortran_vec ();
+          Complex *result = retval.rwdata ();
 
           F77_INT tmp_err = 0;
 
@@ -4113,7 +4108,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 ())
             {
@@ -4296,7 +4291,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 +4340,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),
@@ -4381,7 +4376,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 +4408,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 +4440,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 +4470,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);
 
@@ -4513,7 +4508,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 ());
@@ -4566,7 +4561,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 +4608,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),
@@ -4716,7 +4711,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 +4744,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 +4772,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);
 
@@ -4906,7 +4901,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 +4950,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),
@@ -5056,7 +5051,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 +5084,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 +5112,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);
 
@@ -5230,7 +5225,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 +5275,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),
@@ -5410,7 +5405,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 +5438,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 +5466,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);
 
@@ -5598,7 +5593,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 +5626,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),
@@ -5870,12 +5865,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 ();
@@ -6100,8 +6095,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 ();
@@ -6345,8 +6340,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 ();
@@ -6595,8 +6590,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 +6743,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 +6803,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 +6864,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 +6925,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 +7186,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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/dSparse.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/dim-vector.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/fCColVector.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/fCColVector.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/fCDiagMatrix.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/fCDiagMatrix.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/fCMatrix.cc	Thu Feb 01 13:28:57 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);
 
@@ -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,
@@ -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))
@@ -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),
@@ -1663,7 +1663,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 +1689,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),
@@ -1761,7 +1761,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 +1789,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,
@@ -1819,7 +1819,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 +1841,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)
@@ -1912,7 +1912,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),
@@ -2336,11 +2336,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 +2379,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 +2449,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;
@@ -2565,11 +2565,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 +2599,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 +2626,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 +2674,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 +2778,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 +2799,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 +3307,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 +3406,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 +3444,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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/fCMatrix.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/fCNDArray.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/fCNDArray.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/fCRowVector.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/fCRowVector.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/fColVector.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/fColVector.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/fDiagMatrix.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/fMatrix.cc	Thu Feb 01 13:28:57 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);
 
@@ -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,
@@ -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));
 
@@ -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),
@@ -1343,7 +1343,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 +1369,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),
@@ -1441,7 +1441,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 +1469,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,
@@ -1499,7 +1499,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 +1521,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;
 
@@ -1583,7 +1583,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 +1694,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 +1711,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;
@@ -1985,11 +1985,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 +2024,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 +2093,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;
@@ -2206,11 +2206,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 +2238,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 +2255,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 +2362,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 +2741,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 +2813,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 +2835,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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/fMatrix.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/fNDArray.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/fNDArray.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/fRowVector.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/fRowVector.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/idx-vector.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/idx-vector.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/array/intNDArray.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/external/Faddeeva/Faddeeva.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/CollocWt.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/DAE.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/DAEFunc.h	Thu Feb 01 13:28:57 2024 -0500
@@ -30,8 +30,7 @@
 
 #include "mx-fwd.h"
 
-class
-DAEFunc
+class DAEFunc
 {
 public:
 
--- a/liboctave/numeric/DAERT.h	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/DAERT.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/DAERTFunc.h	Thu Feb 01 13:28:57 2024 -0500
@@ -30,8 +30,7 @@
 
 #include "DAEFunc.h"
 
-class
-DAERTFunc : public DAEFunc
+class DAERTFunc : public DAEFunc
 {
 public:
 
--- a/liboctave/numeric/DASPK.cc	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/DASPK.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/DASPK.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/DASRT.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/DASRT.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/DASSL.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/DASSL.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/DET.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/EIG.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/EIG.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/LSODE.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/LSODE.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/ODE.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/ODEFunc.h	Thu Feb 01 13:28:57 2024 -0500
@@ -30,8 +30,7 @@
 
 #include "mx-fwd.h"
 
-class
-ODEFunc
+class ODEFunc
 {
 public:
 
--- a/liboctave/numeric/ODES.h	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/ODES.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/ODESFunc.h	Thu Feb 01 13:28:57 2024 -0500
@@ -32,8 +32,7 @@
 
 #include "dMatrix.h"
 
-class
-ODESFunc
+class ODESFunc
 {
 public:
 
--- a/liboctave/numeric/Quad.cc	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/Quad.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/Quad.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/aepbalance.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/aepbalance.h	Thu Feb 01 13:28:57 2024 -0500
@@ -35,8 +35,7 @@
 OCTAVE_BEGIN_NAMESPACE(math)
 
 template <typename MT>
-class
-aepbalance
+class aepbalance
 {
 public:
 
--- a/liboctave/numeric/base-dae.h	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/base-dae.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/base-de.h	Thu Feb 01 13:28:57 2024 -0500
@@ -32,8 +32,7 @@
 
 #include "dColVector.h"
 
-class
-base_diff_eqn
+class base_diff_eqn
 {
 public:
 
--- a/liboctave/numeric/bsxfun-defs.cc	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/bsxfun-defs.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/chol.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/chol.h	Thu Feb 01 13:28:57 2024 -0500
@@ -33,8 +33,7 @@
 OCTAVE_BEGIN_NAMESPACE(math)
 
 template <typename T>
-class
-chol
+class chol
 {
 public:
 
--- a/liboctave/numeric/eigs-base.cc	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/eigs-base.cc	Thu Feb 01 13:28:57 2024 -0500
@@ -538,7 +538,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 +557,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;
@@ -720,7 +720,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 +739,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;
@@ -892,7 +892,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 +908,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 +917,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 +1000,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 +1159,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 +1175,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 +1193,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 +1312,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 +1512,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 +1528,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 +1537,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 +1685,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 +1869,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 +1885,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 +1894,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 +1981,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 +1991,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 +2013,7 @@
     k = ip(4);
 
   eig_val.resize (k);
-  Complex *d = eig_val.fortran_vec ();
+  Complex *d = eig_val.rwdata ();
 
   if (info2 == 0)
     {
@@ -2196,7 +2196,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 +2212,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 +2230,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 +2354,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 +2364,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 +2386,7 @@
     k = ip(4);
 
   eig_val.resize (k);
-  Complex *d = eig_val.fortran_vec ();
+  Complex *d = eig_val.rwdata ();
 
   if (info2 == 0)
     {
@@ -2617,7 +2617,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 +2633,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 +2642,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 +2794,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 +2804,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 +2826,7 @@
     k = ip(4);
 
   eig_val.resize (k);
-  Complex *d = eig_val.fortran_vec ();
+  Complex *d = eig_val.rwdata ();
 
   if (info2 == 0)
     {
@@ -3038,7 +3038,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 +3054,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 +3064,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 +3147,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 +3317,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 +3333,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 +3352,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 +3473,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 +3688,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 +3704,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 +3714,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 +3863,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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/fEIG.cc	Thu Feb 01 13:28:57 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);
   FloatMatrix vr (nvr, nvr);
-  float *pvr = vr.fortran_vec ();
+  float *pvr = vr.rwdata ();
 
   volatile 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);
   FloatMatrix vr (nvr, nvr);
-  float *pvr = vr.fortran_vec ();
+  float *pvr = vr.rwdata ();
 
   volatile 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/fEIG.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/gepbalance.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/gepbalance.h	Thu Feb 01 13:28:57 2024 -0500
@@ -35,8 +35,7 @@
 OCTAVE_BEGIN_NAMESPACE(math)
 
 template <typename T>
-class
-gepbalance
+class gepbalance
 {
 public:
 
--- a/liboctave/numeric/gsvd.cc	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/gsvd.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/gsvd.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/hess.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/hess.h	Thu Feb 01 13:28:57 2024 -0500
@@ -35,8 +35,7 @@
 OCTAVE_BEGIN_NAMESPACE(math)
 
 template <typename T>
-class
-hess
+class hess
 {
 public:
 
--- a/liboctave/numeric/lo-mappers.cc	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/lo-mappers.cc	Thu Feb 01 13:28:57 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-specfun.cc	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/lo-specfun.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/lu.cc	Thu Feb 01 13:28:57 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 <>
@@ -346,9 +346,9 @@
     {
       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
 }
@@ -412,9 +412,9 @@
     {
       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 <>
@@ -501,9 +501,9 @@
     {
       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
 }
@@ -568,9 +568,9 @@
     {
       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 <>
@@ -660,11 +660,11 @@
       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)));
@@ -733,10 +733,10 @@
       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 <>
@@ -828,10 +828,10 @@
     {
       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)));
@@ -899,9 +899,9 @@
     {
       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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/lu.h	Thu Feb 01 13:28:57 2024 -0500
@@ -37,8 +37,7 @@
 OCTAVE_BEGIN_NAMESPACE(math)
 
 template <typename T>
-class
-lu
+class lu
 {
 public:
 
--- a/liboctave/numeric/oct-convn.cc	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/oct-convn.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/oct-fftw.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/oct-norm.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/oct-rand.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/qr.cc	Thu Feb 01 13:28:57 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 <>
@@ -528,9 +528,9 @@
     {
       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));
 }
 
@@ -621,8 +621,8 @@
           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)
     {
@@ -692,8 +692,8 @@
           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 <>
@@ -942,9 +942,9 @@
     {
       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));
 }
 
@@ -1037,8 +1037,8 @@
           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)
     {
@@ -1108,8 +1108,8 @@
           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));
 }
 
@@ -1376,10 +1376,10 @@
       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));
 }
@@ -1474,9 +1474,9 @@
           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)
@@ -1549,9 +1549,9 @@
           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));
 }
 
@@ -1818,10 +1818,10 @@
     {
       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));
 }
 
@@ -1914,8 +1914,8 @@
           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)
@@ -1988,8 +1988,8 @@
           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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/qr.h	Thu Feb 01 13:28:57 2024 -0500
@@ -35,8 +35,7 @@
 OCTAVE_BEGIN_NAMESPACE(math)
 
 template <typename T>
-class
-qr
+class qr
 {
 public:
 
--- a/liboctave/numeric/qrp.cc	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/qrp.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/qrp.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/randgamma.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/randpoisson.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/schur.cc	Thu Feb 01 13:28:57 2024 -0500
@@ -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),
@@ -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),
@@ -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);
@@ -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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/schur.h	Thu Feb 01 13:28:57 2024 -0500
@@ -42,8 +42,7 @@
 OCTAVE_BEGIN_NAMESPACE(math)
 
 template <typename T>
-class
-schur
+class schur
 {
 public:
 
--- a/liboctave/numeric/sparse-chol.h	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/sparse-chol.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/sparse-dmsolve.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/sparse-lu.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/sparse-lu.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/sparse-qr.cc	Thu Feb 01 13:28:57 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");
@@ -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");
@@ -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++)
@@ -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,7 +1000,7 @@
   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);
 
@@ -1054,7 +1059,7 @@
   const double *bvec = b.data ();
 
   Matrix x (nc, b_nc);
-  double *vec = x.fortran_vec ();
+  double *vec = x.rwdata ();
 
   volatile octave_idx_type nbuf = (nc > S->m2 ? nc : S->m2);
 
@@ -1282,7 +1287,7 @@
   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));
@@ -1366,7 +1371,7 @@
   octave_idx_type b_nr = b.rows ();
 
   ComplexMatrix x (nc, b_nc);
-  Complex *vec = x.fortran_vec ();
+  Complex *vec = x.rwdata ();
 
   volatile octave_idx_type nbuf = (nc > S->m2 ? nc : S->m2);
 
@@ -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");
@@ -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");
@@ -2063,7 +2068,7 @@
   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);
@@ -2127,7 +2132,7 @@
   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 ());
 
   volatile octave_idx_type nbuf = (nc > S->m2 ? nc : S->m2);
 
@@ -2385,7 +2390,7 @@
 
   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);
 
@@ -2447,7 +2452,7 @@
                              (b.data ());
 
   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 ());
 
   volatile octave_idx_type nbuf = (nc > S->m2 ? nc : S->m2);
 
@@ -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 ();
+  double *xdata = x.rwdata ();
   for (volatile 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,14 +2851,14 @@
   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 ();
+  Complex *xdata = x.rwdata ();
   for (volatile 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 ();
+  Complex *xdata = x.rwdata ();
   for (volatile 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 ();
+  Complex *xdata = x.rwdata ();
   for (volatile 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/sparse-qr.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/svd.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/numeric/svd.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/operators/mx-inlines.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/operators/mx-op-defs.h	Thu Feb 01 13:28:57 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/dir-ops.h	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/system/dir-ops.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/system/file-stat.h	Thu Feb 01 13:28:57 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/oct-env.h	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/system/oct-env.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/system/oct-group.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/system/oct-password.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/system/oct-time.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/system/oct-uname.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/util/action-container.h	Thu Feb 01 13:28:57 2024 -0500
@@ -56,8 +56,7 @@
 
 OCTAVE_END_NAMESPACE(util)
 
-class
-action_container
+class action_container
 {
 public:
 
--- a/liboctave/util/base-list.h	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/util/base-list.h	Thu Feb 01 13:28:57 2024 -0500
@@ -35,8 +35,7 @@
 OCTAVE_BEGIN_NAMESPACE(octave)
 
 template <typename elt_type>
-class
-base_list
+class base_list
 {
 public:
 
--- a/liboctave/util/cmd-edit.cc	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/util/cmd-edit.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/util/cmd-edit.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/util/cmd-hist.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/util/cmd-hist.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/util/data-conv.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/util/glob-match.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/util/lo-ieee.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/util/lo-ieee.h	Thu Feb 01 13:28:57 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.h	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/util/lo-regexp.h	Thu Feb 01 13:28:57 2024 -0500
@@ -39,9 +39,7 @@
 
 OCTAVE_BEGIN_NAMESPACE(octave)
 
-class
-OCTAVE_API
-regexp
+class OCTAVE_API regexp
 {
 public:
 
--- a/liboctave/util/lo-utils.cc	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/util/lo-utils.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/util/oct-base64.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/util/oct-binmap.h	Thu Feb 01 13:28:57 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-inttypes.cc	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/util/oct-inttypes.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/util/oct-inttypes.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/util/oct-mutex.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/util/oct-mutex.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/util/oct-shlib.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/util/oct-shlib.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/util/oct-sort.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/util/oct-string.cc	Thu Feb 01 13:28:57 2024 -0500
@@ -917,10 +917,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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/util/oct-string.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/util/octave-preserve-stream-state.h	Thu Feb 01 13:28:57 2024 -0500
@@ -32,8 +32,7 @@
 
 OCTAVE_BEGIN_NAMESPACE(octave)
 
-class
-preserve_stream_state
+class preserve_stream_state
 {
 public:
 
--- a/liboctave/util/pathsearch.h	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/util/pathsearch.h	Thu Feb 01 13:28:57 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.h	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/util/quit.h	Thu Feb 01 13:28:57 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)
@@ -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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/util/singleton-cleanup.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/util/str-vec.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/util/str-vec.h	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/util/unwind-prot.h	Thu Feb 01 13:28:57 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.h	Thu Feb 01 13:28:20 2024 -0500
+++ b/liboctave/util/url-transfer.h	Thu Feb 01 13:28:57 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/scripts/deprecated/module.mk	Thu Feb 01 13:28:20 2024 -0500
+++ b/scripts/deprecated/module.mk	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 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	Thu Feb 01 13:28:20 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/scripts/geometry/griddata.m	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/scripts/help/error_ids.m	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/scripts/image/autumn.m	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/scripts/image/bone.m	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/scripts/image/colorcube.m	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/scripts/image/colormap.m	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/scripts/image/cool.m	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/scripts/image/copper.m	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/scripts/image/cubehelix.m	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/scripts/image/flag.m	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/scripts/image/gray.m	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/scripts/image/hot.m	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/scripts/image/hsv.m	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/scripts/image/jet.m	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/scripts/image/lines.m	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/scripts/image/movie.m	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/scripts/image/ocean.m	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/scripts/image/pink.m	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/scripts/image/prism.m	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/scripts/image/rainbow.m	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/scripts/image/spring.m	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/scripts/image/summer.m	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/scripts/image/turbo.m	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/scripts/image/viridis.m	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/scripts/image/white.m	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/scripts/image/winter.m	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/scripts/miscellaneous/mex.m	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/scripts/miscellaneous/module.mk	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/scripts/module.mk	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/scripts/optimization/fminbnd.m	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/scripts/plot/appearance/module.mk	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/scripts/plot/draw/polar.m	Thu Feb 01 13:28:57 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/set/intersect.m	Thu Feb 01 13:28:20 2024 -0500
+++ b/scripts/set/intersect.m	Thu Feb 01 13:28:57 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/signal/movfun.m	Thu Feb 01 13:28:20 2024 -0500
+++ b/scripts/signal/movfun.m	Thu Feb 01 13:28:57 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/src/main.in.cc	Thu Feb 01 13:28:20 2024 -0500
+++ b/src/main.in.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/src/mkoctfile.in.cc	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/test/Makefile.am	Thu Feb 01 13:28:57 2024 -0500
@@ -75,6 +75,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
@@ -83,6 +84,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
@@ -132,7 +134,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	Thu Feb 01 13:28:20 2024 -0500
+++ b/test/args.tst	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/test/classdef/classdef.tst	Thu Feb 01 13:28:57 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/json/jsonencode_BIST.tst	Thu Feb 01 13:28:20 2024 -0500
+++ b/test/json/jsonencode_BIST.tst	Thu Feb 01 13:28:57 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	Thu Feb 01 13:28:20 2024 -0500
+++ b/test/leftdiv.tst	Thu Feb 01 13:28:57 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));