changeset 15188:3a33f93c9e62

Merge in polyeig
author Jordi Gutiérrez Hermoso <jordigh@octave.org>
date Thu, 16 Aug 2012 12:12:05 -0400
parents 82d51d6e470c (diff) 045ae93e8fe9 (current diff)
children 2ad5e6212cd7
files NEWS scripts/help/unimplemented.m
diffstat 813 files changed, 34562 insertions(+), 6773 deletions(-) [+]
line wrap: on
line diff
--- a/.hgsub
+++ b/.hgsub
@@ -1,1 +1,2 @@
 gnulib = [git]git://git.sv.gnu.org/gnulib
+gui/qterminal = [git]https://code.google.com/p/qterminal/
--- a/.hgsubstate
+++ b/.hgsubstate
@@ -1,1 +1,2 @@
-33f823397dbb0edb57503f2f6dad2362456bc6a9 gnulib
+0e3af50c9e20938bd1cea0182bf749ce61cb6782 gnulib
+0f7cc1d7ef5c34b146ff71207ada3ec87a24097c gui/qterminal
--- a/Makefile.am
+++ b/Makefile.am
@@ -67,8 +67,14 @@
 
 include m4/module.mk
 
+if AMCOND_BUILD_GUI
+GUIDIR = gui
+else
+GUIDIR =
+endif
+
 # Subdirectories in which to run `make all'.
-SUBDIRS = libgnu libcruft liboctave src scripts @DOCDIR@ examples test
+SUBDIRS = libgnu libcruft liboctave $(GUIDIR) src scripts @DOCDIR@ examples test
 
 if ! AMCOND_BUILD_DOCS
 dist-hook:
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,8 @@
+Summary of important user-visible changes for version 4.0:
+---------------------------------------------------------
+
+ ** A new GUI is now available with Octave.
+
 Summary of important user-visible changes for version 3.8:
 ---------------------------------------------------------
 
@@ -72,13 +77,15 @@
     January 1st of the current year.  The previous default was the current day,
     month, and year.  This may produce changes in existing scripts.
 
+ ** The default name of the Octave crash dump file is now called
+    octave-workspace instead of octave-core.
+      
  ** Other new functions added in 3.8.0:
 
-      betaincinv  lines         splinefit
-      colorcube   polyeig       tetramesh
-      erfcinv     rgbplot
-      findfigs    shrinkfaces
-      
+      betaincinv   erfcinv      polyeig      shrinkfaces 
+      cmpermute    findfigs     splinefit
+      cmunique     fminsearch   tetramesh
+      colorcube    lines        rgbplot     
  ** Deprecated functions.
 
     The following functions were deprecated in Octave 3.4 and have been
@@ -102,6 +109,14 @@
 
       static
 
+    The following configuration variables have been deprecated in Octave
+    3.8 and will be removed from Octave 3.12 (or whatever version is the
+    second major release after 3.8):
+
+      CC_VERSION  (now GCC_VERSION)
+      CXX_VERSION (now GXX_VERSION)
+
+
 Summary of important user-visible changes for version 3.6:
 ---------------------------------------------------------
 
--- a/autogen.sh
+++ b/autogen.sh
@@ -30,9 +30,9 @@
 
 (cd doc/interpreter; ./config-images.sh)
 
-echo "generating src/DLD-FUNCTIONS/module.mk..."
+echo "generating src/dldfcn/module.mk..."
 
-(cd src/DLD-FUNCTIONS; ./config-module.sh)
+(cd src/dldfcn; ./config-module.sh)
 
 echo "bootstrapping..."
 
--- a/build-aux/bootstrap
+++ b/build-aux/bootstrap
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Print a version string.
-scriptversion=2011-08-11.17; # UTC
+scriptversion=2012-07-19.14; # UTC
 
 # Bootstrap this package from checked-out sources.
 
@@ -36,12 +36,12 @@
 LC_ALL=C
 export LC_ALL
 
+# Ensure that CDPATH is not set.  Otherwise, the output from cd
+# would cause trouble in at least one use below.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
 local_gl_dir=gl
 
-# Temporary directory names.
-bt='._bootmp'
-bt_regex=`echo "$bt"| sed 's/\./[.]/g'`
-bt2=${bt}2
 me=$0
 
 usage() {
@@ -77,6 +77,33 @@
 EOF
 }
 
+# warnf_ FORMAT-STRING ARG1...
+warnf_ ()
+{
+  warnf_format_=$1
+  shift
+  nl='
+'
+  case $* in
+    *$nl*) me_=$(printf "$me"|tr "$nl|" '??')
+       printf "$warnf_format_" "$@" | sed "s|^|$me_: |" ;;
+    *) printf "$me: $warnf_format_" "$@" ;;
+  esac >&2
+}
+
+# warn_ WORD1...
+warn_ ()
+{
+  # If IFS does not start with ' ', set it and emit the warning in a subshell.
+  case $IFS in
+    ' '*) warnf_ '%s\n' "$*";;
+    *)    (IFS=' '; warn_ "$@");;
+  esac
+}
+
+# die WORD1...
+die() { warn_ "$@"; exit 1; }
+
 # Configuration.
 
 # Name of the Makefile.am
@@ -88,9 +115,12 @@
 # Any gnulib files needed that are not in modules.
 gnulib_files=
 
-# A function to be called to edit gnulib.mk right after it's created.
+: ${AUTOPOINT=autopoint}
+: ${AUTORECONF=autoreconf}
+
+# A function to be called right after gnulib-tool is run.
 # Override it via your own definition in bootstrap.conf.
-gnulib_mk_hook() { :; }
+bootstrap_post_import_hook() { :; }
 
 # A function to be called after everything else in this script.
 # Override it via your own definition in bootstrap.conf.
@@ -105,6 +135,11 @@
 "rsync --delete --exclude '*.s1' -Lrtvz \
  'translationproject.org::tp/latest/%s/' '%s'"
 
+# Fallback for downloading .po files (if rsync fails).
+po_download_command_format2=\
+"wget --mirror -nd -q -np -A.po -P '%s' \
+ http://translationproject.org/latest/%s/"
+
 extract_package_name='
   /^AC_INIT(/{
      /.*,.*,.*, */{
@@ -122,7 +157,8 @@
      p
   }
 '
-package=`sed -n "$extract_package_name" configure.ac` || exit
+package=$(sed -n "$extract_package_name" configure.ac) \
+  || die 'cannot find package name in configure.ac'
 gnulib_name=lib$package
 
 build_aux=build-aux
@@ -169,10 +205,8 @@
 # default.
 bootstrap_sync=false
 
-# Don't use git to update gnulib sources. We keep gnulib under a
-# Mercurial subrepository instead
-use_git=false
-GNULIB_SRCDIR=gnulib/
+# Use git to update gnulib sources
+use_git=true
 
 # find_tool ENVVAR NAMES...
 # -------------------------
@@ -180,6 +214,8 @@
 # otherwise find the first of the NAMES that can be run (i.e.,
 # supports --version).  If found, set ENVVAR to the program name,
 # die otherwise.
+#
+# FIXME: code duplication, see also gnu-web-doc-update.
 find_tool ()
 {
   find_tool_envvar=$1
@@ -197,19 +233,15 @@
   else
     find_tool_error_prefix="\$$find_tool_envvar: "
   fi
-  if test x"$find_tool_res" = x; then
-    echo >&2 "$me: one of these is required: $find_tool_names"
-    exit 1
-  fi
-  ($find_tool_res --version </dev/null) >/dev/null 2>&1 || {
-    echo >&2 "$me: ${find_tool_error_prefix}cannot run $find_tool_res --version"
-    exit 1
-  }
+  test x"$find_tool_res" != x \
+    || die "one of these is required: $find_tool_names"
+  ($find_tool_res --version </dev/null) >/dev/null 2>&1 \
+    || die "${find_tool_error_prefix}cannot run $find_tool_res --version"
   eval "$find_tool_envvar=\$find_tool_res"
   eval "export $find_tool_envvar"
 }
 
-# Find sha1sum, named gsha1sum on MacPorts, and shasum on MacOS 10.6.
+# Find sha1sum, named gsha1sum on MacPorts, and shasum on Mac OS X 10.6.
 find_tool SHA1SUM sha1sum gsha1sum shasum
 
 # Override the default configuration, if necessary.
@@ -224,7 +256,6 @@
 test -z "${gnulib_extra_files}" && \
   gnulib_extra_files="
         $build_aux/install-sh
-        $build_aux/missing
         $build_aux/mdate-sh
         $build_aux/texinfo.tex
         $build_aux/depcomp
@@ -250,7 +281,7 @@
     usage
     exit;;
   --gnulib-srcdir=*)
-    GNULIB_SRCDIR=`expr "X$option" : 'X--gnulib-srcdir=\(.*\)'`;;
+    GNULIB_SRCDIR=${option#--gnulib-srcdir=};;
   --skip-po)
     SKIP_PO=t;;
   --force)
@@ -264,21 +295,15 @@
   --no-git)
     use_git=false;;
   *)
-    echo >&2 "$0: $option: unknown option"
-    exit 1;;
+    die "$option: unknown option";;
   esac
 done
 
-if $use_git || test -d "$GNULIB_SRCDIR"; then
-  :
-else
-  echo "$0: Error: --no-git requires --gnulib-srcdir" >&2
-  exit 1
-fi
+$use_git || test -d "$GNULIB_SRCDIR" \
+  || die "Error: --no-git requires --gnulib-srcdir"
 
 if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then
-  echo "$0: Bootstrapping from a non-checked-out distribution is risky." >&2
-  exit 1
+  die "Bootstrapping from a non-checked-out distribution is risky."
 fi
 
 # Ensure that lines starting with ! sort last, per gitignore conventions
@@ -301,10 +326,10 @@
   file=$1
   str=$2
   test -f $file || touch $file
-  echo "$str" | sort_patterns - $file | cmp - $file > /dev/null \
+  echo "$str" | sort_patterns - $file | cmp -s - $file > /dev/null \
     || { echo "$str" | sort_patterns - $file > $file.bak \
       && mv $file.bak $file; } \
-    || exit 1
+    || die "insert_sorted_if_absent $file $str: failed"
 }
 
 # Adjust $PATTERN for $VC_IGNORE_FILE and insert it with
@@ -314,10 +339,10 @@
   pattern="$2"
   case $vc_ignore_file in
   *.gitignore)
-    # A .gitignore entry that does not start with `/' applies
-    # recursively to subdirectories, so prepend `/' to every
+    # A .gitignore entry that does not start with '/' applies
+    # recursively to subdirectories, so prepend '/' to every
     # .gitignore entry.
-    pattern=`echo "$pattern" | sed s,^,/,`;;
+    pattern=$(echo "$pattern" | sed s,^,/,);;
   esac
   insert_sorted_if_absent "$vc_ignore_file" "$pattern"
 }
@@ -328,11 +353,8 @@
     >/dev/null && found_aux_dir=yes
 grep '^[	 ]*AC_CONFIG_AUX_DIR('"$build_aux"')' configure.ac \
     >/dev/null && found_aux_dir=yes
-if test $found_aux_dir = no; then
-  echo "$0: expected line not found in configure.ac. Add the following:" >&2
-  echo "  AC_CONFIG_AUX_DIR([$build_aux])" >&2
-  exit 1
-fi
+test $found_aux_dir = yes \
+  || die "configure.ac lacks 'AC_CONFIG_AUX_DIR([$build_aux])'; add it"
 
 # If $build_aux doesn't exist, create it now, otherwise some bits
 # below will malfunction.  If creating it, also mark it as ignored.
@@ -421,31 +443,48 @@
       $use_git || continue
     fi
     # Honor $APP variables ($TAR, $AUTOCONF, etc.)
-    appvar=`echo $app | tr '[a-z]-' '[A-Z]_'`
+    appvar=$(echo $app | LC_ALL=C tr '[a-z]-' '[A-Z]_')
     test "$appvar" = TAR && appvar=AMTAR
     case $appvar in
         GZIP) ;; # Do not use $GZIP:  it contains gzip options.
         *) eval "app=\${$appvar-$app}" ;;
     esac
+
+    # Handle the still-experimental Automake-NG programs specially.
+    # They remain named as the mainstream Automake programs ("automake",
+    # and "aclocal") to avoid gratuitous incompatibilities with
+    # pre-existing usages (by, say, autoreconf, or custom autogen.sh
+    # scripts), but correctly identify themselves (as being part of
+    # "GNU automake-ng") when asked their version.
+    case $app in
+      automake-ng|aclocal-ng)
+        app=${app%-ng}
+        ($app --version | grep '(GNU automake-ng)') >/dev/null 2>&1 || {
+          warn_ "Error: '$app' not found or not from Automake-NG"
+          ret=1
+          continue
+        } ;;
+    esac
     if [ "$req_ver" = "-" ]; then
       # Merely require app to exist; not all prereq apps are well-behaved
       # so we have to rely on $? rather than get_version.
       $app --version >/dev/null 2>&1
       if [ 126 -le $? ]; then
-        echo "$me: Error: '$app' not found" >&2
+        warn_ "Error: '$app' not found"
         ret=1
       fi
     else
       # Require app to produce a new enough version string.
       inst_ver=$(get_version $app)
       if [ ! "$inst_ver" ]; then
-        echo "$me: Error: '$app' not found" >&2
+        warn_ "Error: '$app' not found"
         ret=1
       else
         latest_ver=$(sort_ver $req_ver $inst_ver | cut -d' ' -f2)
         if [ ! "$latest_ver" = "$inst_ver" ]; then
-          echo "$me: Error: '$app' version == $inst_ver is too old" >&2
-          echo "       '$app' version >= $req_ver is required" >&2
+          warnf_ '%s\n'                                        \
+              "Error: '$app' version == $inst_ver is too old"  \
+              "       '$app' version >= $req_ver is required"
           ret=1
         fi
       fi
@@ -475,14 +514,37 @@
   find_tool LIBTOOLIZE glibtoolize libtoolize
 fi
 
+# gnulib-tool requires at least automake and autoconf.
+# If either is not listed, add it (with minimum version) as a prerequisite.
+case $buildreq in
+  *automake*) ;;
+  *) buildreq="automake 1.9
+$buildreq" ;;
+esac
+case $buildreq in
+  *autoconf*) ;;
+  *) buildreq="autoconf 2.59
+$buildreq" ;;
+esac
+
+# When we can deduce that gnulib-tool will require patch,
+# and when patch is not already listed as a prerequisite, add it, too.
+if test -d "$local_gl_dir" \
+    && ! find "$local_gl_dir" -name '*.diff' -exec false {} +; then
+  case $buildreq in
+    *patch*) ;;
+    *) buildreq="patch -
+$buildreq" ;;
+  esac
+fi
+
 if ! printf "$buildreq" | check_versions; then
   echo >&2
   if test -f README-prereq; then
-    echo "$0: See README-prereq for how to get the prerequisite programs" >&2
+    die "See README-prereq for how to get the prerequisite programs"
   else
-    echo "$0: Please install the prerequisite programs" >&2
+    die "Please install the prerequisite programs"
   fi
-  exit 1
 fi
 
 echo "$0: Bootstrapping from checked-out $package sources..."
@@ -511,7 +573,7 @@
   test -f .gitmodules && git config --file .gitmodules "$@"
 }
 
-gnulib_path=`git_modules_config submodule.gnulib.path`
+gnulib_path=$(git_modules_config submodule.gnulib.path)
 test -z "$gnulib_path" && gnulib_path=gnulib
 
 # Get gnulib files.
@@ -576,7 +638,7 @@
 fi
 
 gnulib_tool=$GNULIB_SRCDIR/gnulib-tool
-<$gnulib_tool || exit
+<$gnulib_tool || exit $?
 
 # Get translations.
 
@@ -584,7 +646,10 @@
   subdir=$1
   domain=$2
   echo "$me: getting translations into $subdir for $domain..."
-  cmd=`printf "$po_download_command_format" "$domain" "$subdir"`
+  cmd=$(printf "$po_download_command_format" "$domain" "$subdir")
+  eval "$cmd" && return
+  # Fallback to HTTP.
+  cmd=$(printf "$po_download_command_format2" "$subdir" "$domain")
   eval "$cmd"
 }
 
@@ -607,7 +672,7 @@
     && ls "$ref_po_dir"/*.po 2>/dev/null |
       sed 's|.*/||; s|\.po$||' > "$po_dir/LINGUAS" || return
 
-  langs=`cd $ref_po_dir && echo *.po|sed 's/\.po//g'`
+  langs=$(cd $ref_po_dir && echo *.po | sed 's/\.po//g')
   test "$langs" = '*' && langs=x
   for po in $langs; do
     case $po in x) continue;; esac
@@ -644,18 +709,18 @@
 
     # If the destination directory doesn't exist, create it.
     # This is required at least for "lib/uniwidth/cjk.h".
-    dst_dir=`dirname "$dst"`
+    dst_dir=$(dirname "$dst")
     if ! test -d "$dst_dir"; then
       mkdir -p "$dst_dir"
 
       # If we've just created a directory like lib/uniwidth,
       # tell version control system(s) it's ignorable.
       # FIXME: for now, this does only one level
-      parent=`dirname "$dst_dir"`
+      parent=$(dirname "$dst_dir")
       for dot_ig in x $vc_ignore; do
         test $dot_ig = x && continue
         ig=$parent/$dot_ig
-        insert_vc_ignore $ig `echo "$dst_dir"|sed 's,.*/,,'`
+        insert_vc_ignore $ig "${dst_dir##*/}"
       done
     fi
 
@@ -679,10 +744,10 @@
       # so that broken tools aren't confused into skipping needed builds.  See
       # <http://lists.gnu.org/archive/html/bug-gnulib/2011-05/msg00326.html>.
       test -h "$dst" &&
-      src_ls=`ls -diL "$src" 2>/dev/null` && set $src_ls && src_i=$1 &&
-      dst_ls=`ls -diL "$dst" 2>/dev/null` && set $dst_ls && dst_i=$1 &&
+      src_ls=$(ls -diL "$src" 2>/dev/null) && set $src_ls && src_i=$1 &&
+      dst_ls=$(ls -diL "$dst" 2>/dev/null) && set $dst_ls && dst_i=$1 &&
       test "$src_i" = "$dst_i" &&
-      both_ls=`ls -dt "$src" "$dst"` &&
+      both_ls=$(ls -dt "$src" "$dst") &&
       test "X$both_ls" = "X$dst$nl$src" || {
         dot_dots=
         case $src in
@@ -690,11 +755,10 @@
         *)
           case /$dst/ in
           *//* | */../* | */./* | /*/*/*/*/*/)
-             echo >&2 "$me: invalid symlink calculation: $src -> $dst"
-             exit 1;;
-          /*/*/*/*/)	dot_dots=../../../;;
-          /*/*/*/)	dot_dots=../../;;
-          /*/*/)	dot_dots=../;;
+             die "invalid symlink calculation: $src -> $dst";;
+          /*/*/*/*/)    dot_dots=../../../;;
+          /*/*/*/)      dot_dots=../../;;
+          /*/*/)        dot_dots=../;;
           esac;;
         esac
 
@@ -705,151 +769,94 @@
   }
 }
 
-cp_mark_as_generated()
-{
-  cp_src=$1
-  cp_dst=$2
-
-  if cmp -s "$cp_src" "$GNULIB_SRCDIR/$cp_dst"; then
-    symlink_to_dir "$GNULIB_SRCDIR" "$cp_dst"
-  elif cmp -s "$cp_src" "$local_gl_dir/$cp_dst"; then
-    symlink_to_dir $local_gl_dir "$cp_dst"
+version_controlled_file() {
+  parent=$1
+  file=$2
+  if test -d .git; then
+    git rm -n "$file" > /dev/null 2>&1
+  elif test -d .svn; then
+    svn log -r HEAD "$file" > /dev/null 2>&1
+  elif test -d CVS; then
+    grep -F "/${file##*/}/" "$parent/CVS/Entries" 2>/dev/null |
+             grep '^/[^/]*/[0-9]' > /dev/null
   else
-    case $cp_dst in
-      *.[ch])             c1='/* '; c2=' */';;
-      *.texi)             c1='@c '; c2=     ;;
-      *.m4|*/Make*|Make*) c1='# ' ; c2=     ;;
-      *)                  c1=     ; c2=     ;;
-    esac
-
-    # If the destination directory doesn't exist, create it.
-    # This is required at least for "lib/uniwidth/cjk.h".
-    dst_dir=`dirname "$cp_dst"`
-    test -d "$dst_dir" || mkdir -p "$dst_dir"
-
-    if test -z "$c1"; then
-      cmp -s "$cp_src" "$cp_dst" || {
-        # Copy the file first to get proper permissions if it
-        # doesn't already exist.  Then overwrite the copy.
-        echo "$me: cp -f $cp_src $cp_dst" &&
-        rm -f "$cp_dst" &&
-        cp "$cp_src" "$cp_dst-t" &&
-        sed "s!$bt_regex/!!g" "$cp_src" > "$cp_dst-t" &&
-        mv -f "$cp_dst-t" "$cp_dst"
-      }
-    else
-      # Copy the file first to get proper permissions if it
-      # doesn't already exist.  Then overwrite the copy.
-      cp "$cp_src" "$cp_dst-t" &&
-      (
-        echo "$c1-*- buffer-read-only: t -*- vi: set ro:$c2" &&
-        echo "${c1}DO NOT EDIT! GENERATED AUTOMATICALLY!$c2" &&
-        sed "s!$bt_regex/!!g" "$cp_src"
-      ) > $cp_dst-t &&
-      if cmp -s "$cp_dst-t" "$cp_dst"; then
-        rm -f "$cp_dst-t"
-      else
-        echo "$me: cp $cp_src $cp_dst # with edits" &&
-        mv -f "$cp_dst-t" "$cp_dst"
-      fi
-    fi
+    warn_ "no version control for $file?"
+    false
   fi
 }
 
-version_controlled_file() {
-  dir=$1
-  file=$2
-  found=no
-  if test -d CVS; then
-    grep -F "/$file/" $dir/CVS/Entries 2>/dev/null |
-             grep '^/[^/]*/[0-9]' > /dev/null && found=yes
-  elif test -d .git; then
-    git rm -n "$dir/$file" > /dev/null 2>&1 && found=yes
-  elif test -d .svn; then
-    svn log -r HEAD "$dir/$file" > /dev/null 2>&1 && found=yes
-  else
-    echo "$me: no version control for $dir/$file?" >&2
+# NOTE: we have to be careful to run both autopoint and libtoolize
+# before gnulib-tool, since gnulib-tool is likely to provide newer
+# versions of files "installed" by these two programs.
+# Then, *after* gnulib-tool (see below), we have to be careful to
+# run autoreconf in such a way that it does not run either of these
+# two just-pre-run programs.
+
+# Import from gettext.
+with_gettext=yes
+grep '^[	 ]*AM_GNU_GETTEXT_VERSION(' configure.ac >/dev/null || \
+    with_gettext=no
+
+if test $with_gettext = yes || test $use_libtool = 1; then
+
+  tempbase=.bootstrap$$
+  trap "rm -f $tempbase.0 $tempbase.1" 1 2 13 15
+
+  > $tempbase.0 > $tempbase.1 &&
+  find . ! -type d -print | sort > $tempbase.0 || exit
+
+  if test $with_gettext = yes; then
+    # Released autopoint has the tendency to install macros that have been
+    # obsoleted in current gnulib, so run this before gnulib-tool.
+    echo "$0: $AUTOPOINT --force"
+    $AUTOPOINT --force || exit
   fi
-  test $found = yes
-}
 
-slurp() {
-  for dir in . `(cd $1 && find * -type d -print)`; do
-    copied=
-    sep=
-    for file in `ls -a $1/$dir`; do
-      case $file in
-      .|..) continue;;
-      # FIXME: should all file names starting with "." be ignored?
-      .*) continue;;
-      esac
-      test -d $1/$dir/$file && continue
-      for excluded_file in $excluded_files; do
-        test "$dir/$file" = "$excluded_file" && continue 2
+  # Autoreconf runs aclocal before libtoolize, which causes spurious
+  # warnings if the initial aclocal is confused by the libtoolized
+  # (or worse out-of-date) macro directory.
+  # libtoolize 1.9b added the --install option; but we support back
+  # to libtoolize 1.5.22, where the install action was default.
+  if test $use_libtool = 1; then
+    install=
+    case $($LIBTOOLIZE --help) in
+      *--install*) install=--install ;;
+    esac
+    echo "running: $LIBTOOLIZE $install --copy"
+    $LIBTOOLIZE $install --copy
+  fi
+
+  find . ! -type d -print | sort >$tempbase.1
+  old_IFS=$IFS
+  IFS=$nl
+  for file in $(comm -13 $tempbase.0 $tempbase.1); do
+    IFS=$old_IFS
+    parent=${file%/*}
+    version_controlled_file "$parent" "$file" || {
+      for dot_ig in x $vc_ignore; do
+        test $dot_ig = x && continue
+        ig=$parent/$dot_ig
+        insert_vc_ignore "$ig" "${file##*/}"
       done
-      if test $file = Makefile.am && test "X$gnulib_mk" != XMakefile.am; then
-        copied=$copied${sep}$gnulib_mk; sep=$nl
-        remove_intl='/^[^#].*\/intl/s/^/#/;'"s!$bt_regex/!!g"
-        sed "$remove_intl" $1/$dir/$file |
-        cmp - $dir/$gnulib_mk > /dev/null || {
-          echo "$me: Copying $1/$dir/$file to $dir/$gnulib_mk ..." &&
-          rm -f $dir/$gnulib_mk &&
-          sed "$remove_intl" $1/$dir/$file >$dir/$gnulib_mk &&
-          gnulib_mk_hook $dir/$gnulib_mk
-        }
-      elif { test "${2+set}" = set && test -r $2/$dir/$file; } ||
-           version_controlled_file $dir $file; then
-        echo "$me: $dir/$file overrides $1/$dir/$file"
-      else
-        copied=$copied$sep$file; sep=$nl
-        cp_mark_as_generated $1/$dir/$file $dir/$file
-      fi || exit
-    done
+    }
+  done
+  IFS=$old_IFS
 
-    for dot_ig in x $vc_ignore; do
-      test $dot_ig = x && continue
-      ig=$dir/$dot_ig
-      if test -n "$copied"; then
-        insert_vc_ignore $ig "$copied"
-        # If an ignored file name ends with .in.h, then also add
-        # the name with just ".h".  Many gnulib headers are generated,
-        # e.g., stdint.in.h -> stdint.h, dirent.in.h ->..., etc.
-        # Likewise for .gperf -> .h, .y -> .c, and .sin -> .sed
-        f=`echo "$copied" |
-          sed '
-            s/\.in\.h$/.h/
-            s/\.sin$/.sed/
-            s/\.y$/.c/
-            s/\.gperf$/.h/
-          '
-        `
-        insert_vc_ignore $ig "$f"
-
-        # For files like sys_stat.in.h and sys_time.in.h, record as
-        # ignorable the directory we might eventually create: sys/.
-        f=`echo "$copied"|sed 's/sys_.*\.in\.h$/sys/'`
-        insert_vc_ignore $ig "$f"
-      fi
-    done
-  done
-}
-
-
-# Create boot temporary directories to import from gnulib and gettext.
-rm -fr $bt $bt2 &&
-mkdir $bt $bt2 || exit
+  rm -f $tempbase.0 $tempbase.1
+  trap - 1 2 13 15
+fi
 
 # Import from gnulib.
 
 gnulib_tool_options="\
  --import\
  --no-changelog\
- --aux-dir $bt/$build_aux\
- --doc-base $bt/$doc_base\
+ --aux-dir $build_aux\
+ --doc-base $doc_base\
  --lib $gnulib_name\
- --m4-base $bt/$m4_base/\
- --source-base $bt/$source_base/\
- --tests-base $bt/$tests_base\
+ --m4-base $m4_base/\
+ --source-base $source_base/\
+ --tests-base $tests_base\
  --local-dir $local_gl_dir\
  $gnulib_tool_option_extras\
 "
@@ -861,25 +868,14 @@
 fi
 echo "$0: $gnulib_tool $gnulib_tool_options --import ..."
 $gnulib_tool $gnulib_tool_options --import $gnulib_modules &&
-slurp $bt || exit
 
 for file in $gnulib_files; do
-  symlink_to_dir "$GNULIB_SRCDIR" $file || exit
+  symlink_to_dir "$GNULIB_SRCDIR" $file \
+    || die "failed to symlink $file"
 done
 
-
-# Import from gettext.
-with_gettext=yes
-grep '^[	 ]*AM_GNU_GETTEXT_VERSION(' configure.ac >/dev/null || \
-    with_gettext=no
-
-if test $with_gettext = yes; then
-  echo "$0: (cd $bt2; ${AUTOPOINT-autopoint}) ..."
-  cp configure.ac $bt2 &&
-  (cd $bt2 && ${AUTOPOINT-autopoint} && rm configure.ac) &&
-  slurp $bt2 $bt || exit
-fi
-rm -fr $bt $bt2 || exit
+bootstrap_post_import_hook \
+  || die "bootstrap_post_import_hook failed"
 
 # Remove any dangling symlink matching "*.m4" or "*.[ch]" in some
 # gnulib-populated directories.  Such .m4 files would cause aclocal to fail.
@@ -893,37 +889,31 @@
   -depth \( -name '*.m4' -o -name '*.[ch]' \) \
   -type l -xtype l -delete > /dev/null 2>&1
 
-# Reconfigure, getting other files.
-
-# Skip autoheader if it's not needed.
-grep -E '^[	 ]*AC_CONFIG_HEADERS?\>' configure.ac >/dev/null ||
-  AUTOHEADER=true
+# Some systems (RHEL 5) are using ancient autotools, for which the
+# --no-recursive option had not been invented.  Detect that lack and
+# omit the option when it's not supported.  FIXME in 2017: remove this
+# hack when RHEL 5 autotools are updated, or when they become irrelevant.
+no_recursive=
+case $($AUTORECONF --help) in
+  *--no-recursive*) no_recursive=--no-recursive;;
+esac
 
-for command in \
-  libtool \
-  "${ACLOCAL-aclocal} --force -I '$m4_base' $ACLOCAL_FLAGS" \
-  "${AUTOCONF-autoconf} --force" \
-  "${AUTOHEADER-autoheader} --force" \
-  "${AUTOMAKE-automake} --add-missing --copy --force-missing"
-do
-  if test "$command" = libtool; then
-    test $use_libtool = 0 \
-      && continue
-    command="${LIBTOOLIZE-libtoolize} -c -f"
-  fi
-  echo "$0: $command ..."
-  eval "$command" || exit
-done
-
+# Tell autoreconf not to invoke autopoint or libtoolize; they were run above.
+echo "running: AUTOPOINT=true LIBTOOLIZE=true " \
+    "$AUTORECONF --verbose --install $no_recursive -I $m4_base $ACLOCAL_FLAGS"
+AUTOPOINT=true LIBTOOLIZE=true \
+    $AUTORECONF --verbose --install $no_recursive -I $m4_base $ACLOCAL_FLAGS \
+  || die "autoreconf failed"
 
 # Get some extra files from gnulib, overriding existing files.
 for file in $gnulib_extra_files; do
   case $file in
   */INSTALL) dst=INSTALL;;
-  build-aux/*) dst=$build_aux/`expr "$file" : 'build-aux/\(.*\)'`;;
+  build-aux/*) dst=$build_aux/${file#build-aux/};;
   *) dst=$file;;
   esac
-  symlink_to_dir "$GNULIB_SRCDIR" $file $dst || exit
+  symlink_to_dir "$GNULIB_SRCDIR" $file $dst \
+    || die "failed to symlink $file"
 done
 
 if test $with_gettext = yes; then
@@ -939,7 +929,19 @@
       a\
           '"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+}
     }
-  ' po/Makevars.template >po/Makevars || exit 1
+  ' po/Makevars.template >po/Makevars \
+    || die 'cannot generate po/Makevars'
+
+  # If the 'gettext' module is in use, grab the latest Makefile.in.in.
+  # If only the 'gettext-h' module is in use, assume autopoint already
+  # put the correct version of this file into place.
+  case $gnulib_modules in
+  *gettext-h*) ;;
+  *gettext*)
+    cp $GNULIB_SRCDIR/build-aux/po/Makefile.in.in po/Makefile.in.in \
+      || die "cannot create po/Makefile.in.in"
+    ;;
+  esac
 
   if test -d runtime-po; then
     # Similarly for runtime-po/Makevars, but not quite the same.
@@ -953,7 +955,8 @@
         a\
             '"$XGETTEXT_OPTIONS_RUNTIME"' $${end_of_xgettext_options+}
       }
-    ' po/Makevars.template >runtime-po/Makevars || exit 1
+    ' po/Makevars.template >runtime-po/Makevars \
+    || die 'cannot generate runtime-po/Makevars'
 
     # Copy identical files from po to runtime-po.
     (cd po && cp -p Makefile.in.in *-quot *.header *.sed *.sin ../runtime-po)
--- a/build-aux/bootstrap.conf
+++ b/build-aux/bootstrap.conf
@@ -18,6 +18,7 @@
 
 # gnulib modules used by this package.
 gnulib_modules="
+  base64
   c-strcase
   copysign
   copysignf
@@ -60,7 +61,6 @@
   signal
   sigprocmask
   sleep
-  sleep
   stat
   stdint
   stdio
--- a/build-aux/common.mk
+++ b/build-aux/common.mk
@@ -111,14 +111,16 @@
 UGLY_DEFS = @UGLY_DEFS@
 
 CC = @CC@
+## FIXME: CC_VERSION is deprecated and should be removed in version 3.12
 CC_VERSION = @CC_VERSION@
+GCC_VERSION = @GCC_VERSION@
 CONFIGURE_CFLAGS = @CFLAGS@
 CPICFLAG = @CPICFLAG@
 XTRA_CFLAGS = @XTRA_CFLAGS@
 WARN_CFLAGS = @WARN_CFLAGS@
 AM_CFLAGS = $(CONFIGURE_CFLAGS) \
-  $(INCFLAGS) $(DEFS) $(XTRA_CFLAGS) $(WARN_CFLAGS) $(CFLAGS) $(PTHREAD_CFLAGS)
-BUG_CFLAGS = $(DEFS) $(XTRA_CFLAGS) $(WARN_CFLAGS) $(CFLAGS)
+  $(XTRA_CFLAGS) $(WARN_CFLAGS)
+BUG_CFLAGS = $(XTRA_CFLAGS) $(WARN_CFLAGS) $(CFLAGS)
 
 BUILD_CC = @BUILD_CC@
 BUILD_CFLAGS = @BUILD_CFLAGS@
@@ -133,15 +135,17 @@
 GRAPHICS_CFLAGS = @GRAPHICS_CFLAGS@
 
 CXX = @CXX@
+## FIXME: CXX_VERSION is deprecated and should be removed in version 3.12
 CXX_VERSION = @CXX_VERSION@
+GXX_VERSION = @GXX_VERSION@
 CXXCPP = @CXXCPP@
 CONFIGURE_CXXFLAGS = @CXXFLAGS@
 CXXPICFLAG = @CXXPICFLAG@
 XTRA_CXXFLAGS = @XTRA_CXXFLAGS@
 WARN_CXXFLAGS = @WARN_CXXFLAGS@
 AM_CXXFLAGS = $(CONFIGURE_CXXFLAGS) \
-  $(INCFLAGS) $(DEFS) $(XTRA_CXXFLAGS) $(WARN_CXXFLAGS) $(CXXFLAGS) $(PTHREAD_CFLAGS)
-BUG_CXXFLAGS = $(DEFS) $(XTRA_CXXFLAGS) $(WARN_CXXFLAGS) $(CXXFLAGS)
+  $(XTRA_CXXFLAGS) $(WARN_CXXFLAGS)
+BUG_CXXFLAGS = $(XTRA_CXXFLAGS) $(WARN_CXXFLAGS) $(CXXFLAGS)
 
 BUILD_CXX = @BUILD_CXX@
 BUILD_CXXFLAGS = @BUILD_CXXFLAGS@
@@ -181,6 +185,10 @@
 Z_LDFLAGS = @Z_LDFLAGS@
 Z_LIBS = @Z_LIBS@
 
+LLVM_CPPFLAGS = @LLVM_CPPFLAGS@
+LLVM_LDFLAGS = @LLVM_LDFLAGS@
+LLVM_LIBS = @LLVM_LIBS@
+
 GRAPHICS_LIBS = @GRAPHICS_LIBS@
 
 QHULL_CPPFLAGS = @QHULL_CPPFLAGS@
@@ -252,7 +260,7 @@
 DL_LIBS = @DL_LIBS@
 LIBS = @LIBS@
 
-ALL_CPPFLAGS = $(CPPFLAGS) $(HDF5_CPPFLAGS) $(Z_CPPFLAGS)
+ALL_CPPFLAGS = $(CPPFLAGS) $(HDF5_CPPFLAGS) $(Z_CPPFLAGS) $(LLVM_CPPFLAGS)
 
 SPARSE_XCPPFLAGS = \
   $(CHOLMOD_CPPFLAGS) $(UMFPACK_CPPFLAGS) \
@@ -450,6 +458,7 @@
 define do_subst_config_vals
 echo "making $@ from $<"
 $(SED) < $< \
+  -e "s|%NO_EDIT_WARNING%|DO NOT EDIT!  Generated automatically from $(<F) by Make.|" \
   -e "s|%NO_OCT_FILE_STRIP%|${NO_OCT_FILE_STRIP}|" \
   -e "s|%OCTAVE_BINDIR%|\"${bindir}\"|" \
   -e "s|%OCTAVE_CONF_ALL_CFLAGS%|\"${ALL_CFLAGS}\"|" \
@@ -501,6 +510,8 @@
   -e "s|%OCTAVE_CONF_DL_LD%|\"${DL_LD}\"|" \
   -e "s|%OCTAVE_CONF_DL_LDFLAGS%|\"${DL_LDFLAGS}\"|" \
   -e "s|%OCTAVE_CONF_DL_LIBS%|\"${DL_LIBS}\"|" \
+  -e "s|%OCTAVE_CONF_GCC_VERSION%|\"${GCC_VERSION}\"|" \
+  -e "s|%OCTAVE_CONF_GXX_VERSION%|\"${GXX_VERSION}\"|" \
   -e "s|%OCTAVE_CONF_EXEEXT%|\"${EXEEXT}\"|" \
   -e "s|%OCTAVE_CONF_F77%|\"${F77}\"|" \
   -e "s|%OCTAVE_CONF_F77_FLOAT_STORE_FLAG%|\"${F77_FLOAT_STORE_FLAG}\"|" \
@@ -524,7 +535,6 @@
   -e "s|%OCTAVE_CONF_HDF5_CPPFLAGS%|\"${HDF5_CPPFLAGS}\"|" \
   -e "s|%OCTAVE_CONF_HDF5_LDFLAGS%|\"${HDF5_LDFLAGS}\"|" \
   -e "s|%OCTAVE_CONF_HDF5_LIBS%|\"${HDF5_LIBS}\"|" \
-  -e "s|%OCTAVE_CONF_INCFLAGS%|\"${INCFLAGS}\"|" \
   -e "s|%OCTAVE_CONF_INCLUDEDIR%|\"${includedir}\"|" \
   -e "s|%OCTAVE_CONF_LAPACK_LIBS%|\"${LAPACK_LIBS}\"|" \
   -e "s|%OCTAVE_CONF_LD_CXX%|\"${LD_CXX}\"|" \
@@ -544,6 +554,9 @@
   -e "s|%OCTAVE_CONF_MAGICK_CPPFLAGS%|\"${MAGICK_CPPFLAGS}\"|" \
   -e "s|%OCTAVE_CONF_MAGICK_LDFLAGS%|\"${MAGICK_LDFLAGS}\"|" \
   -e "s|%OCTAVE_CONF_MAGICK_LIBS%|\"${MAGICK_LIBS}\"|" \
+  -e "s|%OCTAVE_CONF_LLVM_CPPFLAGS%|\"${LLVM_CPPFLAGS}\"|" \
+  -e "s|%OCTAVE_CONF_LLVM_LDFLAGS%|\"${LLVM_LDFLAGS}\"|" \
+  -e "s|%OCTAVE_CONF_LLVM_LIBS%|\"${LLVM_LIBS}\"|" \
   -e 's|%OCTAVE_CONF_MKOCTFILE_DL_LDFLAGS%|\"@MKOCTFILE_DL_LDFLAGS@\"|' \
   -e "s|%OCTAVE_CONF_OCTAVE_LINK_DEPS%|\"${OCTAVE_LINK_DEPS}\"|" \
   -e "s|%OCTAVE_CONF_OCTAVE_LINK_OPTS%|\"${OCTAVE_LINK_OPTS}\"|" \
@@ -561,6 +574,8 @@
   -e "s|%OCTAVE_CONF_QRUPDATE_CPPFLAGS%|\"${QRUPDATE_CPPFLAGS}\"|" \
   -e "s|%OCTAVE_CONF_QRUPDATE_LDFLAGS%|\"${QRUPDATE_LDFLAGS}\"|" \
   -e "s|%OCTAVE_CONF_QRUPDATE_LIBS%|\"${QRUPDATE_LIBS}\"|" \
+  -e "s|%OCTAVE_CONF_QT_INCDIR%|\"${QT_INCDIR}\"|" \
+  -e "s|%OCTAVE_CONF_QT_LIBDIR%|\"${QT_LIBDIR}\"|" \
   -e "s|%OCTAVE_CONF_RANLIB%|\"${RANLIB}\"|" \
   -e "s|%OCTAVE_CONF_RDYNAMIC_FLAG%|\"${RDYNAMIC_FLAG}\"|" \
   -e "s|%OCTAVE_CONF_READLINE_LIBS%|\"${READLINE_LIBS}\"|" \
@@ -599,6 +614,7 @@
 define do_subst_default_vals
 echo "making $@ from $<"
 $(SED) < $< > $@-t \
+  -e "s|%NO_EDIT_WARNING%|DO NOT EDIT!  Generated automatically from $(<F) by Make.|" \
   -e "s|%OCTAVE_ARCHLIBDIR%|\"${archlibdir}\"|" \
   -e "s|%OCTAVE_BINDIR%|\"${bindir}\"|" \
   -e "s|%OCTAVE_CANONICAL_HOST_TYPE%|\"${canonical_host_type}\"|" \
--- a/build-aux/mk-opts.pl
+++ b/build-aux/mk-opts.pl
@@ -513,7 +513,7 @@
 
 #include "$header"
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "pr-output.h"
 
 #include "oct-obj.h"
@@ -909,11 +909,11 @@
 sub emit_options_function
 {
   print <<"_END_EMIT_OPTIONS_FUNCTION_HDR_";
-DEFUN_DLD ($OPT_FCN_NAME, args, ,
+DEFUN ($OPT_FCN_NAME, args, ,
   "-*- texinfo -*-\\n\\
-\@deftypefn  {Loadable Function} {} $OPT_FCN_NAME ()\\n\\
-\@deftypefnx {Loadable Function} {val =} $OPT_FCN_NAME (\@var{opt})\\n\\
-\@deftypefnx {Loadable Function} {} $OPT_FCN_NAME (\@var{opt}, \@var{val})\\n\\
+\@deftypefn  {Built-in Function} {} $OPT_FCN_NAME ()\\n\\
+\@deftypefnx {Built-in Function} {val =} $OPT_FCN_NAME (\@var{opt})\\n\\
+\@deftypefnx {Built-in Function} {} $OPT_FCN_NAME (\@var{opt}, \@var{val})\\n\\
 $DOC_STRING\\n\\
 \\n\\
 Options include\\n\\
--- a/configure.ac
+++ b/configure.ac
@@ -1,5 +1,3 @@
-dnl configure.in
-dnl
 dnl Process this file with autoconf to produce a configure script.
 dnl
 dnl Copyright (C) 1993-2012 John W. Eaton
@@ -27,6 +25,7 @@
 EXTERN_CFLAGS="$CFLAGS"
 EXTERN_CXXFLAGS="$CXXFLAGS"
 
+AC_PREREQ([2.62])
 AC_INIT([GNU Octave], [3.7.0+], [http://octave.org/bugs.html], [octave])
 
 dnl PACKAGE_VERSION is set by the AC_INIT VERSION arg
@@ -41,10 +40,11 @@
 AC_SUBST(OCTAVE_RELEASE_DATE)
 AC_SUBST(OCTAVE_COPYRIGHT)
 
-AC_REVISION($Revision: 1.603 $)
-AC_PREREQ([2.62])
+dnl FIXME: We should auto-insert the Mercurial changeset ID into the
+dnl        AC_REVISION field whenever configure.ac is modified.
+dnl AC_REVISION($Revision: 1.603 $)
 AC_CONFIG_SRCDIR([src/octave.cc])
-AC_CONFIG_HEADER([config.h])
+AC_CONFIG_HEADERS([config.h])
 AC_CONFIG_AUX_DIR([build-aux])
 AC_CONFIG_MACRO_DIR([m4])
 
@@ -52,48 +52,16 @@
 
 OCTAVE_HOST_TYPE
 
-AC_DEFINE(OCTAVE_SOURCE, 1, [Define if this is Octave.])
+AC_DEFINE(OCTAVE_SOURCE, 1, [Define to 1 if this is Octave.])
   
-dnl FIXME -- we should probably only generate this file if it is missing.
-### Produce unistd.h for MSVC target, this simplifies changes in
-### Octave source tree and avoid problems with lex-generated code.
-case "$canonical_host_type" in
-  *-*-msdosmsvc)
-    AC_MSG_NOTICE([Generating replacement for <unistd.h> for MSVC])
-    cat << \EOF > unistd.h
-/* File generated by configure script. */
-#include <direct.h>
-#include <io.h>
-#include <process.h>
-EOF
-    CPPFLAGS="-I. $CPPFLAGS"
-    ;;
-esac
-
 AC_USE_SYSTEM_EXTENSIONS
 
-### Check for MSVC
-have_msvc=no
-case "$canonical_host_type" in
-  *-*-msdosmsvc)
-    have_msvc=yes
-  ;;
-  *-*-mingw*)
-    AC_MSG_CHECKING([for MSVC compiler])
-    AC_PREPROC_IFELSE([AC_LANG_SOURCE([
-#ifndef _MSC_VER
-#error "Not MSVC compiler"
-#endif
-])], have_msvc=yes, have_msvc=no)
-    AC_MSG_RESULT([$have_msvc])
-  ;;
-esac
+### Path separator.
 
-### Path separator.
 sepchar=:
 AC_ARG_WITH(sepchar,
   [AS_HELP_STRING([--with-sepchar=<char>],
-     [use <char> as the path separation character])])
+    [use <char> as the path separation character])])
 case $with_sepchar in
   yes | "")
     case "$canonical_host_type" in
@@ -110,10 +78,12 @@
     ;;
 esac
 AC_SUBST(sepchar)
-AC_DEFINE_UNQUOTED(SEPCHAR, ['$sepchar'], [Define this to be the path separator for your system, as a character constant.])
-AC_DEFINE_UNQUOTED(SEPCHAR_STR, ["$sepchar"], [Define this to the path separator, as a string.])
+AC_DEFINE_UNQUOTED(SEPCHAR, ['$sepchar'],
+  [Define this to be the path separator for your system, as a character constant.])
+AC_DEFINE_UNQUOTED(SEPCHAR_STR, ["$sepchar"],
+  [Define this to be the path separator for your system, as a string.])
 
-### some defaults
+### Set default file locations
 
 OCTAVE_SET_DEFAULT(man1dir, '$(mandir)/man1')
 OCTAVE_SET_DEFAULT(man1ext, '.1')
@@ -155,39 +125,49 @@
 config_opts=$ac_configure_args
 AC_SUBST(config_opts)
 
-### Make it possible to have Octave's array and matrix classes do bounds
-### checking on element references.  This slows some operations down a
-### bit, so it is turned off by default.
+### Enable bounds checking on element references within Octave's array and
+### matrix classes.  This slows down some operations a bit, so it is turned off
+### by default.
 
 BOUNDS_CHECKING=false
 AC_ARG_ENABLE(bounds-check,
   [AS_HELP_STRING([--enable-bounds-check],
-     [bounds checking for indexing in internal array classes (default is no)])],
+    [bounds checking for indexing in internal array classes (default is no)])],
   [if test "$enableval" = yes; then BOUNDS_CHECKING=true; fi], [])
 if $BOUNDS_CHECKING; then
-  AC_DEFINE(BOUNDS_CHECKING, 1, [Define to use internal bounds checking.])
+  AC_DEFINE(BOUNDS_CHECKING, 1, [Define to 1 to use internal bounds checking.])
 fi
 
+### Use Octave's built-in memory allocator rather than straightforward malloc.
+### Disabled by default.
+
 USE_OCTAVE_ALLOCATOR=false
 AC_ARG_ENABLE(octave-allocator,
   [AS_HELP_STRING([--enable-octave-allocator],
-     [use the obsolete octave_allocator class for many of Octave's objects (mostly octave_value types).  You probably do NOT want to enable this feature.  (default is no)])],
+    [use the obsolete octave_allocator class for many of Octave's objects (mostly octave_value types).  You probably do NOT want to enable this feature.  (default is no)])],
   [if test "$enableval" = yes; then USE_OCTAVE_ALLOCATOR=true; fi], [])
 if $USE_OCTAVE_ALLOCATOR; then
-  AC_DEFINE(USE_OCTAVE_ALLOCATOR, 1, [Define to use octave_allocator class.])
+  AC_DEFINE(USE_OCTAVE_ALLOCATOR, 1,
+    [Define to 1 to use octave_allocator class.])
 fi
 
+### Use atomic operations for internal reference counting.  This is required
+### for thread-safe behavior but incurs a significant slowdown, and is thus
+### disabled by default.
+
 USE_ATOMIC_REFCOUNT=false
 AC_ARG_ENABLE(atomic-refcount,
   [AS_HELP_STRING([--enable-atomic-refcount],
-     [use atomic operations for internal reference counting. This is required for thread-safe behavior.  (default is no)])],
+    [use atomic operations for internal reference counting.  This is required for thread-safe behavior.  (default is no)])],
   [if test "$enableval" = yes; then USE_ATOMIC_REFCOUNT=true; fi], [])
 if $USE_ATOMIC_REFCOUNT; then
-  AC_DEFINE(USE_ATOMIC_REFCOUNT, 1, [Define to use atomic operations for reference counting.])
+  AC_DEFINE(USE_ATOMIC_REFCOUNT, 1,
+    [Define to 1 to use atomic operations for reference counting.])
 fi
 
-### Make it possible to disable running Make in the doc directory.
-### Useful for building on systems without TeX, for example.
+### Disable running Make in the doc directory.
+### This is useful, for example, when building Octave on systems without TeX.
+
 DOCDIR=doc
 AC_ARG_ENABLE(docs,
   [AS_HELP_STRING([--enable-docs], [build documentation (default is yes)])],
@@ -195,7 +175,8 @@
      DOCDIR=
      warn_docs="building documentation disabled; make dist will fail"
      OCTAVE_CONFIGURE_WARNING([warn_docs])
-   fi], [])
+   fi],
+  [])
 AC_SUBST(DOCDIR)
 
 ### If possible, use a 64-bit integer type for array dimensions and indexing.
@@ -204,7 +185,7 @@
 OCTAVE_IDX_TYPE=int
 AC_ARG_ENABLE(64,
   [AS_HELP_STRING([--enable-64],
-     [(EXPERIMENTAL) use 64-bit integers for array dimensions and indexing])],
+    [(EXPERIMENTAL) use 64-bit integers for array dimensions and indexing])],
   [if test "$enableval" = yes; then USE_64_BIT_IDX_T=true; fi], [])
 if $USE_64_BIT_IDX_T; then
   AC_CHECK_SIZEOF(void *)
@@ -215,23 +196,24 @@
       OCTAVE_IDX_TYPE=int
     elif test $ac_cv_sizeof_long -eq 8; then
       OCTAVE_IDX_TYPE=long
-      AC_DEFINE(IDX_TYPE_LONG, 1, [Define to 1 if octave index type is long])
+      AC_DEFINE(IDX_TYPE_LONG, 1, [Define to 1 if octave index type is long.])
     else
       warn_64_bit="no suitable type found for octave_idx_type so disabling 64-bit features"
       OCTAVE_CONFIGURE_WARNING([warn_64_bit])
       USE_64_BIT_IDX_T=false
     fi
   else
-    warn_64_bit="pointers are not 64-bits wide so disabling 64-bit features"
+    warn_64_bit="pointers are not 64-bits wide; disabling 64-bit features"
     OCTAVE_CONFIGURE_WARNING([warn_64_bit])
     USE_64_BIT_IDX_T=false
   fi
 fi
 AC_SUBST(OCTAVE_IDX_TYPE)
 AC_DEFINE_UNQUOTED(OCTAVE_IDX_TYPE, $OCTAVE_IDX_TYPE,
-  [Define to the type of octave_idx_type (64 or 32 bit signed integer)])
+  [Define to the type of octave_idx_type (64 or 32 bit signed integer).])
 if $USE_64_BIT_IDX_T; then
-  AC_DEFINE(USE_64_BIT_IDX_T, 1, [Define if using 64-bit integers for array dimensions and indexing])
+  AC_DEFINE(USE_64_BIT_IDX_T, 1,
+    [Define to 1 if using 64-bit integers for array dimensions and indexing.])
 fi
 AC_SUBST(USE_64_BIT_IDX_T)
 
@@ -240,66 +222,83 @@
 ### GNU libc, just disable them for all platforms.
 
 AC_MSG_NOTICE([defining __NO_MATH_INLINES avoids buggy GNU libc exp function])
-AC_DEFINE(__NO_MATH_INLINES, 1, [Define if your version of GNU libc has buggy inline assembly code for math functions like exp.])
+AC_DEFINE(__NO_MATH_INLINES, 1,
+  [Define to 1 if your version of GNU libc has buggy inline assembly code for math functions like exp.])
 
-### See which C++ compiler to use (we expect to find g++).
+### Determine which C++ compiler to use (we expect to find g++).
 
 AC_PROG_CXX
 AC_PROG_CXXCPP
 
-### Do special things for g++.
+### Check version number when using g++.
 
-gxx_version=`$CXX -v 2>&1 | grep "^.*g.. version" | \
-  sed -e 's/^.*g.. version *//' -e 's/cygnus-//' -e 's/egcs-//' -e 's/ .*//'`
+GXX_VERSION=
+if test "$GXX" = yes; then
+  gxx_version=`$CXX -v 2>&1 | grep "^.*g.. version" | \
+    sed -e 's/^.*g.. version *//' -e 's/cygnus-//' -e 's/egcs-//' -e 's/ .*//'`
 
-case "$gxx_version" in
-  1.* | 2.[[0123456789]].* | 3.[[01234]].*)
-    AC_MSG_ERROR([g++ version $gxx_version will probably fail to compile Octave]
-)
-  ;;
-esac
+  AX_COMPARE_VERSION([$gxx_version], [lt], [3.5],
+    [AC_MSG_ERROR([g++ version $gxx_version will probably fail to compile Octave])])
 
-CXX_VERSION=
-if test -n "$gxx_version"; then
-  CXX_VERSION="$gxx_version"
+  GXX_VERSION="$gxx_version"
 fi
+AC_SUBST(GXX_VERSION)
+
+## FIXME: CXX_VERSION is deprecated and should be removed in version 3.12
+CXX_VERSION="$gxx_version"
 AC_SUBST(CXX_VERSION)
 
-OCTAVE_CXX_NEW_FRIEND_TEMPLATE_DECL
-OCTAVE_CXX_ISO_COMPLIANT_LIBRARY
-OCTAVE_CXX_BROKEN_REINTERPRET_CAST
-
-### See which C compiler to use (we expect to find gcc).
+### Determine which C compiler to use (we expect to find gcc).
 
 AC_PROG_CC
 AC_PROG_CPP
 AC_PROG_GCC_TRADITIONAL
 
-### gnulib
-
-gl_EARLY
-gl_INIT
-
-### Do special things for gcc.
-
-gcc_version=`$CC -v 2>&1 | grep "^.*gcc version" | \
-  sed -e 's/^.*g.. version *//' -e 's/cygnus-//' -e 's/egcs-//'`
-case "$gcc_version" in
-  [12].*)
-    warn_gcc_version="gcc version $gcc_version is likely to cause problems"
-    OCTAVE_CONFIGURE_WARNING([warn_gcc_version])
+## Check for MSVC
+have_msvc=no
+case "$canonical_host_type" in
+  *-*-msdosmsvc)
+    have_msvc=yes
+  ;;
+  *-*-mingw*)
+    AC_MSG_CHECKING([for MSVC compiler])
+    AC_PREPROC_IFELSE([AC_LANG_SOURCE([[
+        #ifndef _MSC_VER
+        #error "Not MSVC compiler"
+        #endif
+        ]])],
+      have_msvc=yes, have_msvc=no)
+    AC_MSG_RESULT([$have_msvc])
   ;;
 esac
 
-CC_VERSION=
-if test -n "$gcc_version"; then
-  CC_VERSION="$gcc_version"
+### gnulib initialization: part 1
+### Must take place immediately after a compiler is determined
+
+gl_EARLY
+
+### Check version number when using gcc.
+
+GCC_VERSION=
+if test "$GCC" = yes; then
+  gcc_version=`$CC -v 2>&1 | grep "^.*gcc version" | \
+    sed -e 's/^.*g.. version *//' -e 's/cygnus-//' -e 's/egcs-//' -e 's/ .*//'`
+
+  AX_COMPARE_VERSION([$gcc_version], [lt], [3],
+    [warn_gcc_version="gcc version $gcc_version is likely to cause problems"
+     OCTAVE_CONFIGURE_WARNING([warn_gcc_version])])
+
+  GCC_VERSION="$gcc_version"
 fi
 AC_SUBST(CC_VERSION)
 
-### The flag to create dependency varies depending on the compier.
+## FIXME: CC_VERSION is deprecated and should be removed in version 3.12
+CC_VERSION="$gcc_version"
+AC_SUBST(GCC_VERSION)
 
-# Assume GCC.
+### Determine the compiler flag necessary to create dependencies
+
+## Assume GCC.
 INCLUDE_DEPS=true
 DEPEND_FLAGS="-M"
 DEPEND_EXTRA_SED_PATTERN=""
@@ -327,39 +326,14 @@
 AC_SUBST(DEPEND_FLAGS)
 AC_SUBST(DEPEND_EXTRA_SED_PATTERN)
 
+### Check for pthread library
+
 AX_PTHREAD
-### Include pthread libs and flags here in case other tests need them.
-### They seem to be required for the OpenGL tests on Debian systems.
+## Include pthread libs and flags early in case other tests need them.
+## They seem to be required for the OpenGL tests on Debian systems.
 LIBS="$PTHREAD_LIBS $LIBS"
 CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
-
-AC_PATH_X
-if test "$have_x" = "yes"; then
-  AC_DEFINE(HAVE_X_WINDOWS, 1, [Define if you have X11])
-
-  if test "$x_includes" != "NONE"; then
-    X11_INCFLAGS="$x_includes"
-  fi
-  AC_SUBST(X11_INCFLAGS)
-
-  if test -z $x_libraries; then
-    AC_CHECK_LIB(X11, XrmInitialize, [X11_LIBS=-lX11], [X11_LIBS=])
-  elif test $x_libraries != "NONE"; then
-    AC_CHECK_LIB(X11, XrmInitialize, 
-      [X11_LIBS="-L$x_libraries -lX11"], [X11_LIBS=], "-L$x_libraries")
-  fi
-  AC_SUBST(X11_LIBS)
-fi
-
-### On MacOSX system the Carbon framework is used to determine ScreenSize
-OCTAVE_HAVE_FRAMEWORK(Carbon, [#include <Carbon/Carbon.h>], [CGMainDisplayID ()],
-  [have_framework_carbon="yes"], [have_framework_carbon="no"])
-if test $have_framework_carbon = "yes"; then
-  AC_DEFINE(HAVE_FRAMEWORK_CARBON, 1, [Define if framework CARBON is available.])
-  CARBON_LIBS="-Wl,-framework -Wl,Carbon"
-  AC_MSG_NOTICE([adding -Wl,-framework -Wl,Carbon to CARBON_LIBS])
-  AC_SUBST(CARBON_LIBS)
-fi
+CXXFLAGS="$CXXFLAGS $PTHREAD_CFLAGS"
 
 ### When compiling math for x87, problems may arise in some code comparing
 ### floating-point intermediate results.
@@ -370,45 +344,38 @@
 ### doesn't suffer from this problem at all.
 AC_ARG_ENABLE(float-truncate,
   [AS_HELP_STRING([--enable-float-truncate],
-     [enables truncating intermediate FP results.])],
-  [if test "$enableval" = yes; then ac_float_truncate=volatile;
-   else ac_float_truncate=; fi],
-  ac_float_truncate=)
+    [enables truncating intermediate FP results.])],
+  [if test "$enableval" = yes; then
+     ac_float_truncate=volatile;
+   else
+     ac_float_truncate=;
+   fi],
+  [ac_float_truncate=])
 
 AC_DEFINE_UNQUOTED(FLOAT_TRUNCATE, $ac_float_truncate, 
-          [Define to volatile if you need truncating intermediate FP results])
+  [Define to volatile if you need to truncate intermediate FP results.])
+
+### Determine extra CFLAGS that may be necessary for Octave.
 
-### On Intel systems with gcc, we may need to compile with -mieee-fp
-### and -ffloat-store to get full support for IEEE floating point.
-###
-### On Alpha/OSF systems, we need -mieee.
+## On Intel systems with gcc, we may need to compile with -mieee-fp
+## to get full support for IEEE floating point.
+##
+## On Alpha/OSF systems, we need -mieee.
 
 ieee_fp_flag=
 case "$canonical_host_type" in
-  ## Keep this pattern first, so that it is preferred over the
-  ## following pattern for x86.
   i[[3456789]]86-*-*)
     if test "$GCC" = yes; then
       OCTAVE_CC_FLAG(-mieee-fp, [
         ieee_fp_flag=-mieee-fp
         XTRA_CFLAGS="$XTRA_CFLAGS -mieee-fp"
         AC_MSG_NOTICE([adding -mieee-fp to XTRA_CFLAGS])])
-
-###      OCTAVE_CC_FLAG(-ffloat-store, [
-###        float_store_flag=-ffloat-store
-###        XTRA_CFLAGS="$XTRA_CFLAGS -ffloat-store"
-###        AC_MSG_RESULT([adding -ffloat-store to XTRA_CFLAGS])])
     fi
     if test "$GXX" = yes; then
       OCTAVE_CXX_FLAG(-mieee-fp, [
         ieee_fp_flag=-mieee-fp
         XTRA_CXXFLAGS="$XTRA_CXXFLAGS -mieee-fp"
         AC_MSG_NOTICE([adding -mieee-fp to XTRA_CXXFLAGS])])
-
-###      OCTAVE_CXX_FLAG(-ffloat-store, [
-###        float_store_flag=-ffloat-store
-###        XTRA_CXXFLAGS="$XTRA_CXXFLAGS -ffloat-store"
-###        AC_MSG_RESULT([adding -ffloat-store to XTRA_CXXFLAGS])])
     fi
   ;;
   alpha*-*-*)
@@ -444,46 +411,30 @@
   ;;
 esac
 
-## Test whether the compiler supports OpenMP. Experimental so disable by 
-## default. Enable it with the flag --enable-openmp
+AC_SUBST(XTRA_CFLAGS)
+AC_SUBST(XTRA_CXXFLAGS)
+
+### Test whether the compiler supports OpenMP.  This is experimental so disable
+### it by default.  Enable it with the flag --enable-openmp.
+
 USE_OPENMP=false
 AC_ARG_ENABLE(openmp,
   [AS_HELP_STRING([--enable-openmp],
-     [(EXPERIMENTAL) use OpenMP SMP multi-threading])],
+    [(EXPERIMENTAL) use OpenMP SMP multi-threading])],
   [if test "$enableval" = yes; then USE_OPENMP=true; fi], [])
 if $USE_OPENMP; then
   case "$canonical_host_type" in
     *-*-mingw* | *-*-cygwin* | *-*-gnu*)
-    OCTAVE_CHECK_OPENMP(-fopenmp)
+      OCTAVE_CHECK_OPENMP(-fopenmp)
     ;;
     *-*-msdosmsvc)
-    ## FIXME is this the right flag for MSVC?
-    OCTAVE_CHECK_OPENMP(-openmp)
+      ## FIXME: is this the right flag for MSVC?
+      OCTAVE_CHECK_OPENMP(-openmp)
     ;;
     ## Add other compilers supporting OpenMP here
   esac
 fi
 
-AC_SUBST(XTRA_CFLAGS)
-AC_SUBST(XTRA_CXXFLAGS)
-
-## Avoid #define of min/max from windows.h header
-if test "$have_msvc" = "yes"; then
-  AC_DEFINE(NOMINMAX, 1, [Define if you want to avoid min/max macro definition in Windows headers])
-fi
-
-### Use -static if compiling on Alpha OSF/1 1.3 systems.
-
-case "$canonical_host_type" in
-  alpha*-dec-osf1.3)
-    LD_STATIC_FLAG=-static
-  ;;
-esac
-if test -n "$LD_STATIC_FLAG"; then
-  AC_MSG_NOTICE([defining LD_STATIC_FLAG to be $LD_STATIC_FLAG])
-fi
-AC_SUBST(LD_STATIC_FLAG)
-
 ### Defaults for cross compiling.  BUILD_CC and BUILD_CXX are
 ### the compilers that we use for building tools on the build system.
 ### For now, we assume that the only cross compiling we can do is
@@ -502,24 +453,33 @@
   BUILD_CXX='$(CXX)'
   BUILD_CXXFLAGS='$(CXXFLAGS)'
   BUILD_LDFLAGS='$(LDFLAGS)'
-  case "$canonical_host_type" in
-    sparc-sun-solaris2*)
-      if test "$GCC" != yes; then
-        ## The Sun C++ compiler never seems to complete compiling
-        ## gendoc.cc unless we reduce the optimization level...
-        BUILD_CXXFLAGS="-g -O1"
-      fi
-    ;;
-  esac
+  ## 2012/07/31: Commented out special build requirements
+  ## for Sun compiler now that gendoc.cc is no longer part of build.
+  ##################################################################
+  #case "$canonical_host_type" in
+  #  sparc-sun-solaris2*)
+  #    if test "$GCC" != yes; then
+  #      ## The Sun C++ compiler never seems to complete compiling
+  #      ## gendoc.cc unless we reduce the optimization level...
+  #      ## BUILD_CXXFLAGS="-g -O1"
+  #    fi
+  #  ;;
+  #esac
   BUILD_EXEEXT='$(EXEEXT)'
 fi
 
-AC_ARG_VAR(BUILD_CC, [build system C compiler (used if cross compiling)])
-AC_ARG_VAR(BUILD_CFLAGS, [build system C compiler flags (used if cross compiling)])
-AC_ARG_VAR(BUILD_CXX, [build system C++ compiler (used if cross compiling)])
-AC_ARG_VAR(BUILD_CXXFLAGS, [build system C++ compiler flags (used if cross compiling)])
-AC_ARG_VAR(BUILD_LDFLAGS, [build system C++ compiler link flags (used if cross compiling)])
-AC_ARG_VAR(BUILD_EXEEXT, [build system executable extension (used if cross compiling)])
+AC_ARG_VAR(BUILD_CC,
+  [build system C compiler (used if cross compiling)])
+AC_ARG_VAR(BUILD_CFLAGS,
+  [build system C compiler flags (used if cross compiling)])
+AC_ARG_VAR(BUILD_CXX,
+  [build system C++ compiler (used if cross compiling)])
+AC_ARG_VAR(BUILD_CXXFLAGS,
+  [build system C++ compiler flags (used if cross compiling)])
+AC_ARG_VAR(BUILD_LDFLAGS,
+  [build system C++ compiler link flags (used if cross compiling)])
+AC_ARG_VAR(BUILD_EXEEXT,
+  [build system executable extension (used if cross compiling)])
 
 dnl This is bogus.  We shouldn't have to explicitly add libc too!
 dnl Keep this check before the check for the Fortran compiler,
@@ -536,6 +496,8 @@
   ;;
 esac
 
+### Determine the Fortran compiler and how to invoke it
+
 ## Default FFLAGS is -O.
 if test "x$FFLAGS" = x; then
   FFLAGS="-O"
@@ -565,7 +527,6 @@
   i[[3456789]]86-*-*)
     if test "$ac_cv_f77_compiler_gnu" = yes; then
       OCTAVE_F77_FLAG(-mieee-fp)
-###      OCTAVE_F77_FLAG(-ffloat-store)
     fi
   ;;
   alpha*-*-*)
@@ -590,19 +551,19 @@
 AC_SUBST(F77_APPEND_EXTRA_UNDERSCORE)
 
 if test -z "$F77"; then
-  AC_MSG_ERROR([in order to build octave, you must have a compatible Fortran compiler or wrapper script for f2c that functions as a Fortran compiler installed and in your path.  See the file INSTALL for more information.])
+  AC_MSG_ERROR([in order to build Octave, you must have a compatible Fortran compiler or wrapper script for f2c that functions as a Fortran compiler installed and in your path.  See the file INSTALL for more information.])
 fi
 
-OCTAVE_CHECK_FORTRAN_HAVE_ISNAN
+OCTAVE_CHECK_FUNC_FORTRAN_ISNAN
 F77_ISNAN_MACRO=
-if test "x$octave_cv_fortran_have_isnan" = xno; then
-   AC_MSG_NOTICE([substituting ISNAN(X) with X.NE.X in fortran sources])
-   F77_ISNAN_MACRO="s|ISNAN(\(@<:@^)@:>@*\))|(\1.NE.\1)|"
+if test "x$octave_cv_func_fortran_isnan" = xno; then
+  AC_MSG_NOTICE([substituting ISNAN(X) with X.NE.X in Fortran sources])
+  F77_ISNAN_MACRO="s|ISNAN(\(@<:@^)@:>@*\))|(\1.NE.\1)|"
 fi
 AC_SUBST(F77_ISNAN_MACRO)
 
-OCTAVE_CHECK_FORTRAN_INTEGER_SIZE
-if test "x$octave_cv_fortran_integer_size" = xno; then
+OCTAVE_CHECK_SIZEOF_FORTRAN_INTEGER
+if test "x$octave_cv_sizeof_fortran_integer" = xno; then
   if $USE_64_BIT_IDX_T; then
     case "$F77" in
       *gfortran*)
@@ -620,18 +581,18 @@
                 AC_MSG_NOTICE([adding -fdefault-integer-8 to F77_INTEGER_8_FLAG])
                 F77_INTEGER_8_FLAG="-fdefault-integer-8"
                 ## Invalidate the cache and try again.
-                $as_unset octave_cv_fortran_integer_size
+                $as_unset octave_cv_sizeof_fortran_integer
               ;;
             esac
           ;;
         esac
       ;;
     esac
-    if test -z "$octave_cv_fortran_integer_size"; then
-      OCTAVE_CHECK_FORTRAN_INTEGER_SIZE
+    if test -z "$octave_cv_sizeof_fortran_integer"; then
+      OCTAVE_CHECK_SIZEOF_FORTRAN_INTEGER
     fi
-    if test "x$octave_cv_fortran_integer_size" = xno; then
-      AC_MSG_ERROR([in order to build octave with 64-bit indexing support your Fortran compiler must have an option for setting the default integer size to 8 bytes.  See the file INSTALL for more information.])
+    if test "x$octave_cv_sizeof_fortran_integer" = xno; then
+      AC_MSG_ERROR([in order to build Octave with 64-bit indexing support your Fortran compiler must have an option for setting the default integer size to 8 bytes.  See the file INSTALL for more information.])
     fi
   else
     AC_MSG_ERROR([your Fortran compiler must have an option to make integers the same size as octave_idx_type ($OCTAVE_IDX_TYPE).  See the file INSTALL for more information.])
@@ -643,31 +604,25 @@
 AC_SUBST(FC)
 
 OCTAVE_F77_FLAG(-ffloat-store, [
-AC_MSG_RESULT([setting F77_FLOAT_STORE_FLAG to -ffloat-store])
-F77_FLOAT_STORE_FLAG=-ffloat-store
-AC_SUBST(F77_FLOAT_STORE_FLAG)
+  AC_MSG_RESULT([setting F77_FLOAT_STORE_FLAG to -ffloat-store])
+  F77_FLOAT_STORE_FLAG=-ffloat-store
+  AC_SUBST(F77_FLOAT_STORE_FLAG)
 ])
 
-OCTAVE_IEEE754_DATA_FORMAT
-
-OCTAVE_CXX_BITWISE_OP_TEMPLATES
-OCTAVE_CXX_COMPLEX_SETTERS
-OCTAVE_CXX_COMPLEX_REFERENCE_ACCESSORS
-
-OCTAVE_CARBON_CGDISPLAYBITSPERPIXEL
-
-### Check for the QHull library
+### Check for the Qhull library
 
-OCTAVE_CHECK_LIBRARY(qhull, QHull,
+OCTAVE_CHECK_LIB(qhull, QHull,
   [Qhull library not found -- this will result in loss of functionality of some geometry functions.],
-  [libqhull/libqhull.h qhull/libqhull.h libqhull.h qhull/qhull.h qhull.h], [qh_qhull], [], [],
+  [libqhull/libqhull.h qhull/libqhull.h libqhull.h qhull/qhull.h qhull.h],
+  [qh_qhull], [], [],
   [warn_qhull=
-   OCTAVE_CHECK_QHULL_VERSION
-   OCTAVE_CHECK_QHULL_OK([TEXINFO_QHULL="@set HAVE_QHULL"
-     AC_DEFINE(HAVE_QHULL, 1, [Define if QHull is available.])], [
-     warn_qhull="Qhull library found, but seems not to work properly -- this will result in loss of functionality of some geometry functions.  Please try recompiling the library with -fno-strict-aliasing."])])
+  OCTAVE_CHECK_QHULL_VERSION
+  OCTAVE_CHECK_LIB_QHULL_OK(
+    [TEXINFO_QHULL="@set HAVE_QHULL"
+    AC_DEFINE(HAVE_QHULL, 1, [Define to 1 if Qhull is available.])],
+    [warn_qhull="Qhull library found, but does not seem to work properly -- this will result in loss of functionality of some geometry functions.  Please try recompiling the library with -fno-strict-aliasing."])])
 
-### Check for pcre regex library.
+### Check for PCRE regex library.
 
 REGEX_LIBS=
 
@@ -678,17 +633,18 @@
 AC_CACHE_CHECK([whether pcre.h defines the macros we need],
   [ac_cv_pcre_h_macros_present],
   [AC_EGREP_CPP([PCRE_HAS_MACROS_WE_NEED], [
-#if defined (HAVE_PCRE_H)
-#include <pcre.h>
-#elif defined (HAVE_PCRE_PCRE_H)
-#include <pcre.h>
-#error "NO PCRE HEADER"
-#endif
-#if defined (PCRE_INFO_NAMECOUNT) \
-  && defined (PCRE_INFO_NAMEENTRYSIZE) \
-  && defined (PCRE_INFO_NAMETABLE)
-PCRE_HAS_MACROS_WE_NEED
-#endif], ac_cv_pcre_h_macros_present=yes, ac_cv_pcre_h_macros_present=no)])
+    #if defined (HAVE_PCRE_H)
+    # include <pcre.h>
+    #elif defined (HAVE_PCRE_PCRE_H)
+    # include <pcre.h>
+    #error "NO PCRE HEADER"
+    #endif
+    #if defined (PCRE_INFO_NAMECOUNT) \
+      && defined (PCRE_INFO_NAMEENTRYSIZE) \
+      && defined (PCRE_INFO_NAMETABLE)
+      PCRE_HAS_MACROS_WE_NEED
+    #endif],
+    ac_cv_pcre_h_macros_present=yes, ac_cv_pcre_h_macros_present=no)])
 
 if test $ac_cv_pcre_h_macros_present = yes; then
   ## check for pcre-config, and if so, set XTRA_CXXFLAGS appropriately
@@ -711,80 +667,170 @@
 
 ### Check for ZLIB library.
 
-OCTAVE_CHECK_LIBRARY(z, ZLIB,
+OCTAVE_CHECK_LIB(z, ZLIB,
   [ZLIB library not found.  Octave will not be able to save or load compressed data files or HDF5 files.],
   [zlib.h], [gzclearerr])
 
+### Check for the LLVM library
+dnl
+dnl LLVM is odd and has its own pkg-config like script.  We should probably
+dnl check for existence and ???.
+dnl
+save_CPPFLAGS="$CPPFLAGS"
+save_CXXFLAGS="$CXXFLAGS"
+save_LIBS="$LIBS"
+save_LDFLAGS="$LDFLAGS"
+
+warn_llvm="LLVM library fails tests.  JIT compilation will be disabled."
+
+AC_ARG_VAR(LLVM_CONFIG, [path to llvm-config utility])
+
+AC_ARG_ENABLE([jit-debug],
+  AS_HELP_STRING([--enable-jit-debug], [enable debug printing of JIT IRs]))
+
+AS_IF([test "x$enable_jit_debug" = "xyes"], [
+  AC_DEFINE(OCTAVE_JIT_DEBUG, 1, [Define to 1 for JIT debug printing.])
+])
+
+LLVM_CXXFLAGS=
+LLVM_CPPFLAGS=
+LLVM_LDFLAGS=
+LLVM_LIBS=
+
+if test "x$ac_cv_env_LLVM_CONFIG_set" = "xset"; then
+  ## We use -isystem if available because we do not want to see warnings in LLVM
+  LLVM_INCLUDE_FLAG=-I
+  OCTAVE_CC_FLAG(-isystem ., [
+    LLVM_INCLUDE_FLAG=-isystem
+    AC_MSG_NOTICE([using -isystem for llvm headers])])
+
+  LLVM_LDFLAGS="-L`$LLVM_CONFIG --libdir`"
+  LLVM_LIBS=`$LLVM_CONFIG --libs`
+  dnl Use -isystem so we don't get warnings from llvm headers
+  LLVM_CPPFLAGS="$LLVM_INCLUDE_FLAG `$LLVM_CONFIG --includedir`"
+  LLVM_CXXFLAGS=
+
+  dnl
+  dnl We define some extra flags that LLVM requires in order to include headers.
+  dnl Ideally we should get these from llvm-config, but llvm-config isn't very
+  dnl helpful.
+  dnl
+  CPPFLAGS="-D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS $LLVM_CPPFLAGS $CPPFLAGS"
+  CXXFLAGS="$LLVM_CXXFLAGS $CXXFLAGS"
+  LIBS="$LLVM_LIBS $LIBS"
+  LDFLAGS="$LLVM_LDFLAGS $LDFLAGS"
+
+  AC_LANG_PUSH(C++)
+    AC_CHECK_HEADER([llvm/LLVMContext.h], [
+      AC_MSG_CHECKING([for llvm::getGlobalContext in llvm/LLVMContext.h])
+        AC_COMPILE_IFELSE(
+          [AC_LANG_PROGRAM([[
+            #include <llvm/LLVMContext.h>
+            ]], [[
+            llvm::LLVMContext& ctx = llvm::getGlobalContext ();
+            ]])],
+          [AC_MSG_RESULT([yes])
+           warn_llvm=
+           XTRA_CXXFLAGS="$XTRA_CXXFLAGS $LLVM_CXXFLAGS $LLVM_CPPFLAGS"],
+          [AC_MSG_RESULT([no])
+      ])
+    ])
+  AC_LANG_POP(C++)
+  
+else
+  warn_llvm="LLVM_CONFIG not set.  JIT compilation will be disabled."
+fi
+
+if test -z "$warn_llvm"; then
+  AC_DEFINE(HAVE_LLVM, 1, [Define to 1 if LLVM is available.])
+else
+  LLVM_CXXFLAGS=
+  LLVM_CPPFLAGS=
+  LLVM_LDFLAGS=
+  LLVM_LIBS=
+  OCTAVE_CONFIGURE_WARNING([warn_llvm])
+fi
+
+AC_SUBST(LLVM_CXXFLAGS)
+AC_SUBST(LLVM_CPPFLAGS)
+AC_SUBST(LLVM_LDFLAGS)
+AC_SUBST(LLVM_LIBS)
+
+CPPFLAGS="$save_CPPFLAGS"
+CXXFLAGS="$save_CXXFLAGS"
+LIBS="$save_LIBS"
+LDFLAGS="$save_LDFLAGS"
+
 ### Check for HDF5 library.
 
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="$Z_CPPFLAGS $CPPFLAGS"
 save_LIBS="$LIBS"
 LIBS="$Z_LDFLAGS $Z_LIBS $LIBS"
-OCTAVE_CHECK_LIBRARY(hdf5, HDF5,
+OCTAVE_CHECK_LIB(hdf5, HDF5,
   [HDF5 library not found.  Octave will not be able to save or load HDF5 data files.],
   [hdf5.h], [H5Gget_num_objs], [], [],
   [warn_hdf5=
-   OCTAVE_HDF5_HAS_ENFORCED_16_API
+   OCTAVE_CHECK_HDF5_HAS_VER_16_API
    TEXINFO_HDF5="@set HAVE_HDF5"
-   AC_DEFINE(HAVE_HDF5, 1, [Define if HDF5 is available and newer than version 1.6.])
+   AC_DEFINE(HAVE_HDF5, 1,
+     [Define to 1 if HDF5 is available and newer than version 1.6.])
    if test "$have_msvc" = "yes"; then
-     OCTAVE_HDF5_DLL
+     OCTAVE_CHECK_LIB_HDF5_DLL
    fi
-   ])
+  ])
 CPPFLAGS="$save_CPPFLAGS"
 LIBS="$save_LIBS"
 
-
-# Subdirectory of libcruft to build if fftw is not found:
+### Check for FFTW library.  Default to Fortran FFTPACK if it is not available.
 
-FFT_DIR="fftpack"
-AC_SUBST(FFT_DIR)
-
-# Checks for FFTW header and library.
-
-OCTAVE_CHECK_LIBRARY(fftw3, FFTW3,
+## Check for FFTW header and library.
+OCTAVE_CHECK_LIB(fftw3, FFTW3,
   [FFTW3 library not found.  The slower FFTPACK library will be used instead.],
   [fftw3.h], [fftw_plan_dft_1d])
 
-OCTAVE_CHECK_LIBRARY(fftw3f, FFTW3F,
+OCTAVE_CHECK_LIB(fftw3f, FFTW3F,
   [FFTW3F library not found.  The slower FFTPACK library will be used instead.],
   [fftw3.h], [fftwf_plan_dft_1d])
 
 AM_CONDITIONAL([AMCOND_HAVE_FFTW],
   [test -n "$FFTW3_LIBS" && test -n "$FFTW3F_LIBS"])
 
-# Checks for GLPK header and library.
+## Subdirectory of libcruft to build if FFTW is not found.
+FFT_DIR="fftpack"
+AC_SUBST(FFT_DIR)
+
+### Check for GLPK library and header.
 
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="$Z_CPPFLAGS $CPPFLAGS"
 save_LIBS="$LIBS"
 LIBS="$Z_LDFLAGS $Z_LIBS $LIBS"
-OCTAVE_CHECK_LIBRARY(glpk, GLPK,
+OCTAVE_CHECK_LIB(glpk, GLPK,
   [GLPK library not found.  The glpk function for solving linear programs will be disabled.],
   [glpk/glpk.h glpk.h], [_glp_lpx_simplex])
 LIBS="$save_LIBS"
 CPPFLAGS="$save_CPPFLAGS"
 
-# Checks for CURL header and library.
+### Checks for cURL header and library.
 
 save_CPPFLAGS="$CPPFLAGS"
 CPPFLAGS="$Z_CPPFLAGS $CPPFLAGS"
 save_LIBS="$LIBS"
 LIBS="$Z_LDFLAGS $Z_LIBS $LIBS"
-OCTAVE_CHECK_LIBRARY(curl, cURL,
+OCTAVE_CHECK_LIB(curl, cURL,
   [cURL library not found.  The ftp objects, urlread and urlwrite functions will be disabled.],
   [curl/curl.h], [curl_easy_escape])
 LIBS="$save_LIBS"
 CPPFLAGS="$save_CPPFLAGS"
 
-### Graphics/ImageMagick++
+### Check for either of Graphics/ImageMagick++ libraries
 
 AC_ARG_WITH([magick],
   [AS_HELP_STRING([--with-magick=LIB],
-    [select library to use for image I/O (options: GraphicsMagick(default) or ImageMagick)])], [
-  magick="$withval"], [
-  magick="GraphicsMagick"])
+    [select library to use for image I/O (options: GraphicsMagick(default) or ImageMagick)])],
+  [magick="$withval"],
+  [magick="GraphicsMagick"])
 
 warn_magick="$magick++ library not found.  The imread function for reading image files will not be fully functional."
 
@@ -793,8 +839,8 @@
 MAGICK_LIBS=
 
 PKG_CHECK_EXISTS([$magick++], [
-  ## Make sure we only get -I, -L and -l flags.  Some Graphics/ImageMagick++
-  ## packages adds extra flags that are useful when building
+  ## Make sure we only get -I, -L, and -l flags.  Some Graphics/ImageMagick++
+  ## packages add extra flags that are useful when building
   ## Graphics/ImageMagick++ extentions.  These extra flags break the
   ## Octave build. 
   MAGICK_LDFLAGS=`$PKG_CONFIG --libs-only-L $magick++`
@@ -810,12 +856,16 @@
   AC_LANG_PUSH(C++)
     AC_CHECK_HEADER([Magick++.h], [
       AC_MSG_CHECKING([for Magick::ColorRGB in Magick++.h])
-      AC_TRY_LINK([#include <Magick++.h>], [Magick::ColorRGB c;], [
-        AC_MSG_RESULT(yes)
-        warn_magick=
-      ], [
-        AC_MSG_RESULT(no)
-      ])
+      AC_PREPROC_IFELSE(
+        [AC_LANG_SOURCE([[
+          #include <Magick++.h>
+          ]], [[
+          Magick::ColorRGB c;
+          ]])],
+        [AC_MSG_RESULT(yes)
+         warn_magick=],
+        [AC_MSG_RESULT(no)]
+      )
     ])
   AC_LANG_POP(C++)
   CPPFLAGS="$save_CPPFLAGS"
@@ -823,7 +873,8 @@
 ])
 
 if test -z "$warn_magick"; then
-  AC_DEFINE(HAVE_MAGICK, 1, [Define if Graphics/ImageMagick++ is available.])
+  AC_DEFINE(HAVE_MAGICK, 1,
+    [Define to 1 if Graphics/ImageMagick++ is available.])
 else
   MAGICK_CPPFLAGS=
   MAGICK_LDFLAGS=
@@ -833,16 +884,47 @@
 AC_SUBST(MAGICK_LDFLAGS)
 AC_SUBST(MAGICK_LIBS)
 
-# ---------------------------------------------------------------------
+### Check for X11 libraries
+
+AC_PATH_X
+if test "$have_x" = "yes"; then
+  AC_DEFINE(HAVE_X_WINDOWS, 1, [Define to 1 if you have X11.])
+
+  if test "$x_includes" != "NONE"; then
+    X11_INCFLAGS="$x_includes"
+  fi
+  AC_SUBST(X11_INCFLAGS)
 
-## libraries needed for native graphics renderer
+  if test -z $x_libraries; then
+    AC_CHECK_LIB(X11, XrmInitialize, [X11_LIBS=-lX11], [X11_LIBS=])
+  elif test $x_libraries != "NONE"; then
+    AC_CHECK_LIB(X11, XrmInitialize, 
+      [X11_LIBS="-L$x_libraries -lX11"], [X11_LIBS=], "-L$x_libraries")
+  fi
+  AC_SUBST(X11_LIBS)
+fi
+
+### Check for the Carbon framework on MacOSX systems
+OCTAVE_HAVE_FRAMEWORK(Carbon,
+  [[#include <Carbon/Carbon.h>]], [[CGMainDisplayID ()]],
+  [have_framework_carbon="yes"], [have_framework_carbon="no"])
+if test $have_framework_carbon = "yes"; then
+  AC_DEFINE(HAVE_FRAMEWORK_CARBON, 1,
+    [Define to 1 if framework CARBON is available.])
+  CARBON_LIBS="-Wl,-framework -Wl,Carbon"
+  AC_MSG_NOTICE([adding -Wl,-framework -Wl,Carbon to CARBON_LIBS])
+  AC_SUBST(CARBON_LIBS)
+fi
+
+### Check for list of libraries needed for native graphics renderer.
 
 warn_freetype=""
 native_graphics=true
 
 check_opengl=false
 AC_ARG_WITH([opengl],
-  [AS_HELP_STRING([--without-opengl], [don't use OpenGL libraries, disable native graphics])],
+  [AS_HELP_STRING([--without-opengl],
+    [don't use OpenGL libraries, disable native graphics])],
   [if test "x$withval" = xno; then
      warn_opengl="--without-opengl specified.  Native graphics will be disabled."
      OCTAVE_CONFIGURE_WARNING([warn_opengl])
@@ -852,8 +934,9 @@
    fi],
   [check_opengl=true])
 
+## Check for OpenGL library
 if $check_opengl; then
-  OCTAVE_OPENGL
+  OCTAVE_CHECK_LIB_OPENGL
 fi
 
 GRAPHICS_LIBS=
@@ -861,19 +944,20 @@
 
 if test -z "$OPENGL_LIBS"; then
   if $check_opengl; then
-    warn_fltk_opengl="OpenGL libs (GL and GLU) not found. Native graphics will be disabled."
+    warn_fltk_opengl="OpenGL libs (GL and GLU) not found.  Native graphics will be disabled."
     OCTAVE_CONFIGURE_WARNING([warn_fltk_opengl])
     native_graphics=false
   fi
 fi
 
 if test -n "$OPENGL_LIBS"; then
-  AC_DEFINE(HAVE_OPENGL, 1, [Define if OpenGL is available])
+  AC_DEFINE(HAVE_OPENGL, 1, [Define to 1 if OpenGL is available.])
+
+  ## Check for FreeType 2 library
 
-  ## freetype 2
-
-  AC_CHECK_FT2([9.0.3], [AC_DEFINE(HAVE_FREETYPE, 1, [Define to 1 if you have Freetype library.])
-    XTRA_CXXFLAGS="$XTRA_CXXFLAGS $FT2_CFLAGS"],
+  AC_CHECK_FT2([9.0.3],
+    [AC_DEFINE(HAVE_FREETYPE, 1, [Define to 1 if you have FreeType library.])
+     XTRA_CXXFLAGS="$XTRA_CXXFLAGS $FT2_CFLAGS"],
     [warn_freetype="FreeType library not found.  Native graphics will be disabled."])
 
   if test -n "$warn_freetype"; then
@@ -881,17 +965,17 @@
     native_graphics=false
   fi
 
-  ## fontconfig library
+  ## Check for fontconfig library
 
   warn_fontconfig=""
   if test -z "$warn_freetype"; then
-    PKG_CHECK_MODULES(FONTCONFIG, [fontconfig], [
-      have_fontconfig=yes
-      OPENGL_LIBS="$FONTCONFIG_LIBS $OPENGL_LIBS"
-      XTRA_CXXFLAGS="$XTRA_CXXFLAGS $FONTCONFIG_CFLAGS"
-      AC_DEFINE(HAVE_FONTCONFIG, 1, [Define to 1 if fontconfig is present])], [
-      have_fontconfig=no
-      warn_fontconfig="Fontconfig library not found.  Native graphics will be disabled."])
+    PKG_CHECK_MODULES(FONTCONFIG, [fontconfig],
+      [have_fontconfig=yes
+       OPENGL_LIBS="$FONTCONFIG_LIBS $OPENGL_LIBS"
+       XTRA_CXXFLAGS="$XTRA_CXXFLAGS $FONTCONFIG_CFLAGS"
+       AC_DEFINE(HAVE_FONTCONFIG, 1, [Define to 1 if fontconfig is present.])],
+      [have_fontconfig=no
+       warn_fontconfig="Fontconfig library not found.  Native graphics will be disabled."])
   fi
 
   if test -n "$warn_fontconfig"; then
@@ -899,19 +983,19 @@
     native_graphics=false
   fi
 
-  ## fltk (www.fltk.org)
+  ## Check for FLTK (www.fltk.org) library
 
   AC_ARG_WITH([fltk-prefix], [
     AS_HELP_STRING([--with-fltk-prefix=PFX],
-      [Prefix where FLTK is installed (optional)])], [
-    fltk_prefix="$withval"], [
-    fltk_prefix=""])
+      [prefix where FLTK is installed (optional)])],
+    [fltk_prefix="$withval"],
+    [fltk_prefix=""])
 
   AC_ARG_WITH([fltk-exec-prefix], [
     AS_HELP_STRING([--with-fltk-exec-prefix=PFX],
-      [Exec prefix where FLTK is installed (optional)])], [
-    fltk_exec_prefix="$withval"], [
-    fltk_exec_prefix=""])
+      [exec prefix where FLTK is installed (optional)])],
+    [fltk_exec_prefix="$withval"],
+    [fltk_exec_prefix=""])
 
   if test -n "$fltk_exec_prefix"; then
     fltk_args="$fltk_args --exec-prefix=$fltk_exec_prefix"
@@ -951,13 +1035,10 @@
     CFLAGS="$CFLAGS $FLTK_CFLAGS"
     AC_COMPILE_IFELSE(
       [AC_LANG_PROGRAM([[#include <FL/gl.h>]], [[int nothing = 0;]])],
-        [
-         AC_MSG_RESULT([no])
-         warn_fltk_opengl="FLTK does not have OpenGL support.  Native graphics will be disabled."
-        ],[
-         AC_DEFINE(HAVE_FLTK, 1, [Define if FLTK is available])
-         AC_MSG_RESULT([yes])
-        ])
+      [AC_MSG_RESULT([no])
+       warn_fltk_opengl="FLTK does not have OpenGL support.  Native graphics will be disabled."],
+      [AC_MSG_RESULT([yes])
+       AC_DEFINE(HAVE_FLTK, 1, [Define to 1 if FLTK is available.])])
          
     if test -z "$warn_fltk_opengl"; then
       GRAPHICS_CFLAGS="$FLTK_CFLAGS"
@@ -973,7 +1054,18 @@
 AC_SUBST(GRAPHICS_CFLAGS)
 AC_SUBST(GRAPHICS_LIBS)
 
-# ----------------------------------------------------------------------
+### Start determination of shared vs. static libraries
+
+## Use -static if compiling on Alpha OSF/1 1.3 systems.
+case "$canonical_host_type" in
+  alpha*-dec-osf1.3)
+    LD_STATIC_FLAG=-static
+  ;;
+esac
+if test -n "$LD_STATIC_FLAG"; then
+  AC_MSG_NOTICE([defining LD_STATIC_FLAG to be $LD_STATIC_FLAG])
+fi
+AC_SUBST(LD_STATIC_FLAG)
 
 OCTAVE_PROG_AR
 
@@ -1004,7 +1096,7 @@
 fi
 AC_SUBST(XTRA_CRUFT_SH_LDFLAGS)
 
-### Checks for BLAS and LAPACK libraries:
+### Check for BLAS and LAPACK libraries:
 
 ## Need to adjust FFLAGS to include correct integer size.
 save_FFLAGS="$FFLAGS"
@@ -1041,25 +1133,25 @@
       octave_blaswrap_save_CFLAGS="$CFLAGS"
       CFLAGS="$CFLAGS -DUSE_BLASWRAP"
       AC_LANG_PUSH(C)
-      AC_COMPILE_IFELSE([AC_LANG_SOURCE([
-#include "libcruft/misc/blaswrap.c"
-])],
-       [mv conftest.$ac_objext blaswrap.$ac_objext
-        octave_blaswrap_save_BLAS_LIBS="$BLAS_LIBS"
-        BLAS_LIBS="blaswrap.$ac_objext -framework vecLib"
+      AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
+          #include "libcruft/misc/blaswrap.c"
+        ]])],
+        [mv conftest.$ac_objext blaswrap.$ac_objext
+         octave_blaswrap_save_BLAS_LIBS="$BLAS_LIBS"
+         BLAS_LIBS="blaswrap.$ac_objext -framework vecLib"
 
-        save_FFLAGS="$FFLAGS"
-        FFLAGS="$FFLAGS $F77_INTEGER_8_FLAG"
+         save_FFLAGS="$FFLAGS"
+         FFLAGS="$FFLAGS $F77_INTEGER_8_FLAG"
 
-        AX_BLAS_WITH_F77_FUNC([:], [:])
-        AX_LAPACK([:], [:])
+         AX_BLAS_WITH_F77_FUNC([:], [:])
+         AX_LAPACK([:], [:])
 
-        ## Restore FFLAGS.
-        FFLAGS="$save_FFLAGS"
+         ## Restore FFLAGS.
+         FFLAGS="$save_FFLAGS"
 
-        ## remove temp file
-        rm -f blaswrap.$ac_objext],
-       [AC_MSG_FAILURE([cannot compile libcruft/misc/blaswrap.c])])
+         ## remove temp file
+         rm -f blaswrap.$ac_objext],
+        [AC_MSG_FAILURE([cannot compile libcruft/misc/blaswrap.c])])
       AC_LANG_POP(C)
       CFLAGS="$octave_blaswrap_save_CFLAGS"
 
@@ -1068,7 +1160,8 @@
       else
         ## wrapper in libcruft, remove from BLAS_LIBS
         BLAS_LIBS="`echo $BLAS_LIBS | sed -e 's/blaswrap.[[^ ]]* //g'`"
-        AC_DEFINE(USE_BLASWRAP, [1], [Define this if BLAS functions need to be wrapped (potentially needed for 64-bit OSX only).])
+        AC_DEFINE(USE_BLASWRAP, 1,
+          [Define to 1 if BLAS functions need to be wrapped (potentially needed for 64-bit OSX only).])
       fi
     ;;
   esac
@@ -1077,23 +1170,23 @@
 if test "x$ax_blas_f77_func_ok" = "xno"; then
   if $USE_64_BIT_IDX_T && test "$ax_blas_integer_size_ok" = "no" ; then
     ## Attempt to be more informative.
-    AC_MSG_ERROR([BLAS doesn't seem to support 64-bit integers. This is incompatible with --enable-64.])
+    AC_MSG_ERROR([BLAS doesn't seem to support 64-bit integers.  This is incompatible with --enable-64.])
   else
     AC_MSG_ERROR([A BLAS library was detected but found incompatible with your Fortran 77 compiler settings.])
   fi
 fi
 
 if test x$ax_blas_ok = xno || test x$ax_lapack_ok = xno; then
-  AC_MSG_ERROR([You are required to have BLAS and LAPACK libraries])
+  AC_MSG_ERROR([BLAS and LAPACK libraries are required])
 fi
 
 ### Check for the qrupdate library
+
 ## No need to adjust FFLAGS because only link is attempted. 
 ## Must supply proper LIBS, however.
-
 save_LIBS="$LIBS"
 LIBS="$LAPACK_LIBS $BLAS_LIBS $FLIBS $LIBS"
-OCTAVE_CHECK_LIBRARY(qrupdate, qrupdate,
+OCTAVE_CHECK_LIB(qrupdate, qrupdate,
   [qrupdate not found.  The QR & Cholesky updating functions will be slow.],
   [],
   [sqr1up],
@@ -1104,75 +1197,74 @@
   AC_LANG_PUSH([Fortran 77])
   AC_MSG_CHECKING([for slup1up in $QRUPDATE_LIBS])
   octave_qrupdate_luu=no
-  AC_LINK_IFELSE([AC_LANG_CALL([], [slup1up])],
-  [octave_qrupdate_luu=yes])
+  AC_LINK_IFELSE([AC_LANG_CALL([], [slup1up])], [octave_qrupdate_luu=yes])
   AC_MSG_RESULT([$octave_qrupdate_luu])
   if test "$octave_qrupdate_luu" = yes; then
-    AC_DEFINE(HAVE_QRUPDATE_LUU, [1], [Define if qrupdate supports LU updates])
+    AC_DEFINE(HAVE_QRUPDATE_LUU, 1, [Define to 1 if qrupdate supports LU updates.])
   fi
   AC_LANG_POP([Fortran 77])
 fi
 LIBS="$save_LIBS"
 
-# Check for AMD library
+### Check for AMD library
 
-OCTAVE_CHECK_LIBRARY(amd, AMD,
+OCTAVE_CHECK_LIB(amd, AMD,
   [AMD library not found.  This will result in some lack of functionality for sparse matrices.],
   [suitesparse/amd.h ufsparse/amd.h amd/amd.h amd.h],
   [amd_postorder],
   [], [don't use AMD library, disable some sparse matrix functionality])
 
-# Check for CAMD library
+### Check for CAMD library
 
-OCTAVE_CHECK_LIBRARY(camd, CAMD,
+OCTAVE_CHECK_LIB(camd, CAMD,
   [CAMD library not found.  This will result in some lack of functionality for sparse matrices.],
   [suitesparse/camd.h ufsparse/camd.h amd/camd.h camd.h],
   [camd_postorder],
   [], [don't use CAMD library, disable some sparse matrix functionality])
 
-# Check for COLAMD library
+### Check for COLAMD library
 
-OCTAVE_CHECK_LIBRARY(colamd, COLAMD,
+OCTAVE_CHECK_LIB(colamd, COLAMD,
   [COLAMD library not found.  This will result in some lack of functionality for sparse matrices.],
   [suitesparse/colamd.h ufsparse/colamd.h amd/colamd.h colamd.h],
   [colamd],
   [], [don't use COLAMD library, disable some sparse matrix functionality])
 
-# Check for CCOLAMD library
+### Check for CCOLAMD library
 
-OCTAVE_CHECK_LIBRARY(ccolamd, CCOLAMD,
+OCTAVE_CHECK_LIB(ccolamd, CCOLAMD,
   [CCOLAMD library not found.  This will result in some lack of functionality for sparse matrices.],
   [suitesparse/ccolamd.h ufsparse/ccolamd.h amd/ccolamd.h ccolamd.h],
   [ccolamd],
   [], [don't use CCOLAMD library, disable some sparse matrix functionality])
 
-# Check for CHOLMOD library.  If your cholmod library requires cblas,
-# then you will need to configure with --with-cholmod="-lcholmod -lcblas".
+### Check for CHOLMOD library.  If your cholmod library requires cblas,
+### then you will need to configure with --with-cholmod="-lcholmod -lcblas".
 
 save_LIBS="$LIBS"
 LIBS="$COLAMD_LDFLAGS $COLAMD_LIBS $AMD_LDFLAGS $AMD_LIBS $LAPACK_LIBS $BLAS_LIBS $FLIBS $LIBS"
-OCTAVE_CHECK_LIBRARY(cholmod, CHOLMOD,
+OCTAVE_CHECK_LIB(cholmod, CHOLMOD,
   [CHOLMOD library not found.  This will result in some lack of functionality for sparse matrices.],
   [suitesparse/cholmod.h ufsparse/cholmod.h cholmod/cholmod.h cholmod.h],
   [cholmod_start],
   [], [don't use CHOLMOD library, disable some sparse matrix functionality])
 LIBS="$save_LIBS"
 
-# Check for CXSparse library
+### Check for CXSparse library
 
-OCTAVE_CHECK_LIBRARY(cxsparse, CXSparse,
+OCTAVE_CHECK_LIB(cxsparse, CXSparse,
   [CXSparse library not found.  This will result in some lack of functionality for sparse matrices.],
   [suitesparse/cs.h ufsparse/cs.h amd/cs.h cs.h],
   [cs_di_sqr],
   [C++], [don't use CXSparse library, disable some sparse matrix functionality])
 
-# Check for UMFPACK library.
+### Check for UMFPACK library.
 
 save_LIBS="$LIBS"
 save_CPPFLAGS="$CPPFLAGS"
 LIBS="$AMD_LDFLAGS $AMD_LIBS $BLAS_LIBS $FLIBS $LIBS"
 CPPFLAGS="$AMD_CPPFLAGS $CPPFLAGS"
-OCTAVE_CHECK_LIBRARY(umfpack, UMFPACK,
+OCTAVE_CHECK_LIB(umfpack, UMFPACK,
   [UMFPACK not found.  This will result in some lack of functionality for sparse matrices.],
   [suitesparse/umfpack.h ufsparse/umfpack.h umfpack/umfpack.h umfpack.h],
   [umfpack_zi_get_determinant],
@@ -1185,7 +1277,7 @@
   $as_unset ac_cv_lib_umfpack_umfpack_zi_get_determinant
   save_LIBS="$LIBS"
   LIBS="-lcblas $AMD_LDFLAGS $AMD_LIBS $BLAS_LIBS $FLIBS $LIBS"
-  OCTAVE_CHECK_LIBRARY(umfpack, UMFPACK,
+  OCTAVE_CHECK_LIB(umfpack, UMFPACK,
     [UMFPACK not found.  This will result in some lack of functionality for sparse matrices.],
     [suitesparse/umfpack.h ufsparse/umfpack.h umfpack/umfpack.h umfpack.h],
     [umfpack_zi_get_determinant],
@@ -1199,23 +1291,29 @@
 if test -n "$UMFPACK_LIBS"; then
   save_LIBS="$LIBS";
   LIBS="$UMFPACK_LIBS $AMD_LIBS $BLAS_LIBS $FLIBS $LIBS"
-  OCTAVE_UMFPACK_SEPERATE_SPLIT
+  OCTAVE_UMFPACK_SEPARATE_SPLIT
   LIBS="$save_LIBS"
 fi
 
+### Check for ARPACK library.
+
 save_LIBS="$LIBS"
 LIBS="$LAPACK_LIBS $BLAS_LIBS $FLIBS $LIBS"
-OCTAVE_CHECK_LIBRARY(arpack, ARPACK,
+OCTAVE_CHECK_LIB(arpack, ARPACK,
   [ARPACK not found.  The eigs function will be disabled.],
   [],
   [dseupd],
   [Fortran 77], [don't use the ARPACK library, disable eigs function],
   [warn_arpack=
-   OCTAVE_CHECK_ARPACK_OK([
-     AC_DEFINE(HAVE_ARPACK, 1, [Define if ARPACK is available.])], [
-     warn_arpack="ARPACK library found, but seems not to work properly -- disabling eigs function"])])
+   OCTAVE_CHECK_LIB_ARPACK_OK(
+     [AC_DEFINE(HAVE_ARPACK, 1, [Define to 1 if ARPACK is available.])],
+     [warn_arpack="ARPACK library found, but does not seem to work properly -- disabling eigs function"])])
 LIBS="$save_LIBS"
 
+### Check for readline library.
+
+OCTAVE_ENABLE_READLINE
+
 ### Enable dynamic linking.  --enable-shared implies this, so
 ### --enable-dl is only need if you are only building static libraries
 ### and want to try dynamic linking too (works on some systems, for
@@ -1223,12 +1321,13 @@
 
 AC_ARG_ENABLE([dl],
   [AS_HELP_STRING([--enable-dl],
-    [allow loading of dynamically linked modules (not all systems)])], [
-  case "${enableval}" in
-    yes) ENABLE_DYNAMIC_LINKING=true ;;
-    no) ENABLE_DYNAMIC_LINKING=false ;;
-    *) AC_MSG_ERROR([bad value ${enableval} for --enable-dl]) ;;
-  esac], [ENABLE_DYNAMIC_LINKING=true])
+    [allow loading of dynamically linked modules (not all systems)])],
+  [case "${enableval}" in
+     yes) ENABLE_DYNAMIC_LINKING=true ;;
+     no) ENABLE_DYNAMIC_LINKING=false ;;
+     *) AC_MSG_ERROR([bad value ${enableval} for --enable-dl]) ;;
+   esac],
+  [ENABLE_DYNAMIC_LINKING=true])
 
 if $STATIC_LIBS || $SHARED_LIBS; then
   true
@@ -1520,10 +1619,112 @@
 AC_SUBST(library_path_var)
 AC_SUBST(ldpreloadsep)
 
-### special checks for odd OS specific things.
+### More configure argument checking related to linking
+
+AC_ARG_ENABLE([no-undefined],
+  [AS_HELP_STRING([--enable-no-undefined],
+    [pass -no-undefined to libtool when linking Octave and its shared libraries (on by default)])],
+  [case "${enableval}" in
+     yes) NO_UNDEFINED_LDFLAG="-no-undefined" ;;
+     no)  NO_UNDEFINED_LDFLAG="" ;;
+     *) AC_MSG_ERROR([bad value ${enableval} for --enable-link-all-depenencies]) ;;
+   esac],
+  [NO_UNDEFINED_LDFLAG="-no-undefined"])
+AC_SUBST(NO_UNDEFINED_LDFLAG)
+
+AC_ARG_ENABLE([link-all-dependencies],
+  [AS_HELP_STRING([--enable-link-all-dependencies],
+    [link Octave and its shared libraries with all dependencies, not just those immediately referenced (should not be needed on most systems)])],
+  [case "${enableval}" in
+     yes) link_all_deps=true ;;
+     no)  link_all_deps=false ;;
+     *) AC_MSG_ERROR([bad value ${enableval} for --enable-link-all-depenencies]) ;;
+   esac],
+  [link_all_deps=false])
+AM_CONDITIONAL([AMCOND_LINK_ALL_DEPS], [test x$link_all_deps = xtrue])
+
+## Dynamic linking is now enabled only if we are building shared
+## libs and some API for dynamic linking has been detected.
+
+## FIXME: A lot of the following duplicates the functionality of
+## code generated by the dlopen option for LT_INIT.
+
+LD_CXX='$(CXX)'
+RDYNAMIC_FLAG=
+DL_API_MSG=""
+dlopen_api=false
+shl_load_api=false
+loadlibrary_api=false
+dyld_api=false
+
+if $SHARED_LIBS || $ENABLE_DYNAMIC_LINKING; then
 
-AC_CHECK_FUNCS(getpwnam, [], [AC_CHECK_LIB(sun, getpwnam)])
+  case "$lt_cv_dlopen" in
+    dlopen)
+      dlopen_api=true
+      DL_API_MSG="(dlopen)"
+      AC_DEFINE(HAVE_DLOPEN_API, 1,
+        [Define to 1 if your system has dlopen, dlsym, dlerror, and dlclose for dynamic linking.])
+      OCTAVE_CXX_FLAG(-rdynamic, [RDYNAMIC_FLAG=-rdynamic])
+    ;;
+    shl_load)
+      shl_load_api=true
+      DL_API_MSG="(shl_load)"
+      AC_DEFINE(HAVE_SHL_LOAD_API, 1,
+        [Define to 1 if your system has shl_load and shl_findsym for dynamic linking.])
+    ;;
+    LoadLibrary)
+      loadlibrary_api=true
+      DL_API_MSG="(LoadLibrary)"
+      AC_DEFINE(HAVE_LOADLIBRARY_API, 1,
+        [Define to 1 if your system has LoadLibrary for dynamic linking.])
+    ;;
+    dyld)
+      dyld_api=true
+      DL_API_MSG="(dyld)"
+      AC_DEFINE(HAVE_DYLD_API, 1,
+        [Define to 1 if your system has dyld for dynamic linking.])
+    ;;
+  esac
+
+  DL_LIBS="$lt_cv_dlopen_libs"
+  AC_SUBST(DL_LIBS)
 
+  ## Disable dynamic linking if capability is not present.
+  if $dlopen_api || $shl_load_api || $loadlibrary_api || $dyld_api; then
+    true
+  else
+    ENABLE_DYNAMIC_LINKING=false
+  fi
+fi
+
+if $ENABLE_DYNAMIC_LINKING; then
+  AC_DEFINE(ENABLE_DYNAMIC_LINKING, 1, [Define to 1 if using dynamic linking.])
+fi
+
+AM_CONDITIONAL([AMCOND_ENABLE_DYNAMIC_LINKING],
+  [test x$ENABLE_DYNAMIC_LINKING = xtrue])
+
+if $SHARED_LIBS; then
+  LIBOCTINTERP=-loctinterp$SHLLINKEXT
+  LIBOCTAVE=-loctave$SHLLINKEXT
+  LIBCRUFT=-lcruft$SHLLINKEXT
+else
+  LIBOCTINTERP='$(top_builddir)/src/liboctinterp.$(LIBEXT)'
+  LIBOCTAVE='$(top_builddir)/liboctave/liboctave.$(LIBEXT)'
+  LIBCRUFT='$(top_builddir)/libcruft/libcruft.$(LIBEXT)'
+fi
+
+AC_SUBST(LD_CXX)
+AC_SUBST(RDYNAMIC_FLAG)
+AC_SUBST(ENABLE_DYNAMIC_LINKING)
+AC_SUBST(LIBOCTINTERP)
+AC_SUBST(LIBOCTAVE)
+AC_SUBST(LIBCRUFT)
+
+### Check for existence of various libraries
+
+## OS-specific test for dirent, opendir.
 case "$canonical_host_type" in
   *-*-mingw*)
     if test "$have_msvc" = "yes"; then
@@ -1540,102 +1741,61 @@
   ;;
 esac
 
-AC_ARG_ENABLE([no-undefined],
-  [AS_HELP_STRING([--enable-no-undefined],
-    [pass -no-undefined to libtool when linking Octave and its shared libraries (on by default)])],
-  [case "${enableval}" in
-    yes) NO_UNDEFINED_LDFLAG="-no-undefined" ;;
-    no)  NO_UNDEFINED_LDFLAG="" ;;
-    *) AC_MSG_ERROR([bad value ${enableval} for --enable-link-all-depenencies]) ;;
-   esac], [NO_UNDEFINED_LDFLAG="-no-undefined"])
-AC_SUBST(NO_UNDEFINED_LDFLAG)
-
-AC_ARG_ENABLE([link-all-dependencies],
-  [AS_HELP_STRING([--enable-link-all-dependencies],
-    [link Octave and its shared libraries with all dependencies, not just those immediately referenced (should not be needed on most systems)])],
-  [case "${enableval}" in
-    yes) link_all_deps=true ;;
-    no)  link_all_deps=false ;;
-    *) AC_MSG_ERROR([bad value ${enableval} for --enable-link-all-depenencies]) ;;
-   esac], [link_all_deps=false])
-AM_CONDITIONAL([AMCOND_LINK_ALL_DEPS], [test x$link_all_deps = xtrue])
-
-### Type stuff.
+## Find a termlib to use.
+octave_found_termlib=no
+for termlib in ncurses curses termcap terminfo termlib; do
+  AC_CHECK_LIB(${termlib}, tputs, [
+    TERM_LIBS="-l${termlib}"
+    octave_found_termlib=yes
+    break])
+done
 
-AC_TYPE_MODE_T
-AC_TYPE_OFF_T
-AC_TYPE_PID_T
-AC_TYPE_SIZE_T
-AC_TYPE_UID_T
-AC_CHECK_TYPES([dev_t, ino_t])
-AC_CHECK_TYPES([long long int, unsigned long long int])
-
-### How big are ints and how are they oriented?  These could probably
-### be eliminated in favor of run-time checks.
-
-AC_CHECK_SIZEOF(short)
-AC_CHECK_SIZEOF(int)
-AC_CHECK_SIZEOF(long)
-AC_CHECK_SIZEOF(long long)
-
-### Does the C compiler handle alloca() and const correctly?
-
-AC_FUNC_ALLOCA
-
-### See if we should use placement delete.
-
-OCTAVE_PLACEMENT_DELETE
-
-### See if we can auto allocate variable sized arrays.
-
-OCTAVE_DYNAMIC_AUTO_ARRAYS
-
-### See if we can use fast integer arithmetics
-
-OCTAVE_FAST_INT_OPS
-
-### Check for long double type (for 64-bit integers)
-
-AC_CHECK_SIZEOF(long double)
+if test "$octave_found_termlib" = no; then
+  warn_termlibs="I couldn't find -ltermcap, -lterminfo, -lncurses, -lcurses, o\
+r -ltermlib!"
+  AC_MSG_WARN([$warn_termlibs])
+fi
+AC_SUBST(TERM_LIBS)
 
 ### Checks for header files.
 
 AC_HEADER_DIRENT
 AC_HEADER_SYS_WAIT
 
-### C headers
+dnl FIXME: We should probably only generate this file if it is missing.
+### Produce unistd.h for MSVC target, this simplifies changes in
+### Octave source tree and avoid problems with lex-generated code.
+case "$canonical_host_type" in
+  *-*-msdosmsvc)
+    AC_MSG_NOTICE([Generating replacement for <unistd.h> for MSVC])
+    cat << \EOF > unistd.h
+/* File generated by configure script. */
+#include <direct.h>
+#include <io.h>
+#include <process.h>
+EOF
+    CPPFLAGS="-I. $CPPFLAGS"
+    ;;
+esac
+
+## C headers
 
 AC_CHECK_HEADERS(curses.h direct.h dlfcn.h floatingpoint.h grp.h \
   ieeefp.h inttypes.h locale.h memory.h ncurses.h poll.h pthread.h \
   pwd.h sunmath.h sys/ioctl.h sys/param.h sys/poll.h sys/resource.h \
   sys/select.h sys/utsname.h termcap.h)
 
-### C++ headers
+## C++ headers
 
 AC_LANG_PUSH(C++)
+
 AC_CHECK_HEADERS(sstream)
-AC_CHECK_HEADERS([unordered_map], [], [
-  AC_CHECK_HEADERS([tr1/unordered_map])])
-AC_MSG_CHECKING([whether unordered_map requires tr1 namespace])
-unordered_map_requires_tr1_namespace=no
-if test "$ac_cv_header_unordered_map" = "yes"; then
-  ### Have <unordered_map>, but still have to check whether
-  ### tr1 namespace is required (like MSVC, for instance).
-  AC_COMPILE_IFELSE([
-    AC_LANG_PROGRAM([
-      #include <unordered_map>
-    ], [
-      std::unordered_map<int,int> m;
-    ])], [], [unordered_map_requires_tr1_namespace=yes])
-elif test "$ac_cv_header_tr1_unordered_map" = "yes"; then
-  unordered_map_requires_tr1_namespace=yes
-fi
-if test "$unordered_map_requires_tr1_namespace" = "yes"; then
-  AC_DEFINE(USE_UNORDERED_MAP_WITH_TR1, 1, [Defines whether unordered_map requires the use of tr1 namespace.])
-fi
-AC_MSG_RESULT([$unordered_map_requires_tr1_namespace])
+OCTAVE_UNORDERED_MAP_HEADERS
+
 AC_LANG_POP(C++)
 
+## Find a termio header to include.
+
 have_termios_h=no
 AC_CHECK_HEADERS(termios.h, have_termios_h=yes)
 AC_CHECK_HEADERS(termio.h, have_termio_h=yes, have_termio_h=no)
@@ -1651,6 +1811,86 @@
   AC_MSG_WARN([I couldn't find termios.h, termio.h, or sgtty.h!])
 fi
 
+## For MSVC compilers, avoid #define of min/max from windows.h header
+if test "$have_msvc" = "yes"; then
+  AC_DEFINE(NOMINMAX, 1, [Define to 1 if you want to avoid min/max macro definition in Windows headers.])
+fi
+
+### Determine types and size of types.
+
+AC_TYPE_INT64_T
+AC_TYPE_MODE_T
+AC_TYPE_OFF_T
+AC_TYPE_PID_T
+AC_TYPE_SIZE_T
+AC_TYPE_SSIZE_T
+AC_TYPE_UID_T
+AC_TYPE_UINT64_T
+AC_CHECK_TYPES([dev_t, ino_t])
+AC_CHECK_TYPES([long long int, unsigned long long int])
+AC_CHECK_TYPES([ptrdiff_t])
+
+## How big are ints and how are they oriented?
+## These could probably be eliminated in favor of run-time checks.
+
+AC_CHECK_SIZEOF(short)
+AC_CHECK_SIZEOF(int)
+AC_CHECK_SIZEOF(long)
+AC_CHECK_SIZEOF(long long)
+## Check for long double type (for 64-bit integers)
+AC_CHECK_SIZEOF(long double)
+
+### Check structures and existence of necessary members
+
+AC_CHECK_MEMBERS([struct stat.st_blksize, struct stat.st_blocks, struct stat.st_rdev])
+AC_CHECK_MEMBERS([struct group.gr_passwd])
+
+AC_STRUCT_TIMEZONE
+
+### Check compiler characteristics.
+
+## Does compiler have support for new friend template declarations?
+OCTAVE_CXX_NEW_FRIEND_TEMPLATE_DECL
+
+## Does reinterpret_cast fail for function pointers?
+OCTAVE_CXX_BROKEN_REINTERPRET_CAST
+
+## Check if C++ compiler allows placement delete.
+OCTAVE_CXX_PLACEMENT_DELETE
+
+## Check if C++ compiler can auto allocate variable sized arrays.
+OCTAVE_CXX_DYNAMIC_AUTO_ARRAYS
+
+## Check that C compiler and libraries support IEEE754 data format.
+OCTAVE_IEEE754_DATA_FORMAT
+
+## Is C++ runtime library ISO compliant?
+OCTAVE_CXX_ISO_COMPLIANT_LIBRARY
+
+## Are bit_and, bit_or, and bit_xor defined as templated operators?
+OCTAVE_CXX_BITWISE_OP_TEMPLATES
+
+## Can complex class set components independently?
+OCTAVE_CXX_COMPLEX_SETTERS
+
+## Are there functions to access real/imag parts of numbers via references?
+OCTAVE_CXX_COMPLEX_REFERENCE_ACCESSORS
+
+## Check if fast integer arithmetics based on bit tricks is available.
+OCTAVE_FAST_INT_OPS
+
+## Does the C compiler handle alloca() and const correctly?
+AC_FUNC_ALLOCA
+
+## Does the C compiler support Automake subdir-objects option?
+AM_PROG_CC_C_O 
+
+### gnulib initialization: part 2
+### After all include and path modifications have taken place
+### and at the same priority level as function checks.
+
+gl_INIT
+
 ### Checks for functions and variables.
 
 AC_CHECK_FUNCS(basename canonicalize_file_name \
@@ -1665,6 +1905,7 @@
   uname utime waitpid \
   _chmod x_utime _utime32)
 
+## exp2, round, tgamma function checks
 AC_LANG_PUSH(C++)
 AC_CHECK_DECLS([exp2, round, tgamma], [], [], [[#include <cmath>]])
 AC_CHECK_FUNCS([exp2 round tgamma])
@@ -1673,7 +1914,7 @@
 extern "C" {
 #endif
 #if HAVE_EXP2 && ! HAVE_DECL_EXP2
-double exp2 (double );
+double exp2 (double);
 #endif
 #if HAVE_ROUND && ! HAVE_DECL_ROUND
 double round (double);
@@ -1687,130 +1928,11 @@
 ])
 AC_LANG_POP(C++)
 
-case "$canonical_host_type" in
-  *-*-mingw*)
-    ## MinGW does not provide a mkstemp function.  However, it provides
-    ## the mkstemps function in libiberty.
-    AC_MSG_CHECKING([for mkstemps in libiberty])
-    save_LIBS="$LIBS"
-    LIBS="-liberty $LIBS"
-    AC_LINK_IFELSE([
-      AC_LANG_PROGRAM([[int mkstemps (char *pattern, int suffix_len);]], 
-       [[mkstemps ("XXXXXX", 0);]]
-    )],
-    [AC_MSG_RESULT(yes)
-     HAVE_MKSTEMPS=yes
-     AC_DEFINE(HAVE_MKSTEMPS, 1, [Define if mkstemps is available in libiberty.])
-    ],
-    [AC_MSG_RESULT(no)
-     HAVE_MKSTEMPS=no
-     LIBS="$save_LIBS"
-    ])
-   ;;
-esac
-
-OCTAVE_SMART_PUTENV
-
-case "$canonical_host_type" in
-  *-*-msdosmsvc | *-*-mingw*)
-    AC_MSG_CHECKING([for required _WIN32_WINNT])
-    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
-#include <windows.h>
-#if _WIN32_WINNT < 0x0403
-#error "Wrong version"
-#endif]], [])],
-      AC_MSG_RESULT([none]), [
-        AC_DEFINE(_WIN32_WINNT, 0x0403, [Define to 0x0403 to access InitializeCriticalSectionAndSpinCount])
-        AC_MSG_RESULT([0x0403])])
-    AC_MSG_CHECKING([whether _USE_MATH_DEFINES needs to be defined])
-    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <math.h>]],
-[[int x = M_LN2;]])],
-      AC_MSG_RESULT([no]), [
-        AC_DEFINE(_USE_MATH_DEFINES, 1, [Define if your system needs it to define math constants like M_LN2])
-        AC_MSG_RESULT([yes])])
-  ;;
-esac
-
-### Dynamic linking is now enabled only if we are building shared
-### libs and some API for dynamic linking is detected.
-
-## FIXME -- a lot of the following duplicates the functionality of
-## code generated by the dlopen option for LT_INIT.
-
-LD_CXX='$(CXX)'
-RDYNAMIC_FLAG=
-DL_API_MSG=""
-dlopen_api=false
-shl_load_api=false
-loadlibrary_api=false
-dyld_api=false
-
-if $SHARED_LIBS || $ENABLE_DYNAMIC_LINKING; then
+## Look in <cmath> for the IEEE functions isnan, isinf, isfinite that we need.
 
-  case "$lt_cv_dlopen" in
-    dlopen)
-      dlopen_api=true
-      DL_API_MSG="(dlopen)"
-      AC_DEFINE(HAVE_DLOPEN_API, 1, [Define if your system has dlopen, dlsym, dlerror, and dlclose for dynamic linking])
-      OCTAVE_CXX_FLAG(-rdynamic, [RDYNAMIC_FLAG=-rdynamic])
-    ;;
-    shl_load)
-      shl_load_api=true
-      DL_API_MSG="(shl_load)"
-      AC_DEFINE(HAVE_SHL_LOAD_API, 1, [Define if your system has shl_load and shl_findsym for dynamic linking])
-    ;;
-    LoadLibrary)
-      loadlibrary_api=true
-      DL_API_MSG="(LoadLibrary)"
-      AC_DEFINE(HAVE_LOADLIBRARY_API, 1, [Define if your system has LoadLibrary for dynamic linking])
-    ;;
-    dyld)
-      dyld_api=true
-      DL_API_MSG="(dyld)"
-      AC_DEFINE(HAVE_DYLD_API, 1, [Define if your system has dyld for dynamic linking])
-    ;;
-  esac
-
-  DL_LIBS="$lt_cv_dlopen_libs"
-  AC_SUBST(DL_LIBS)
-
-  ## Disable dynamic linking if capability is not present.
-  if $dlopen_api || $shl_load_api || $loadlibrary_api || $dyld_api; then
-    true
-  else
-    ENABLE_DYNAMIC_LINKING=false
-  fi
-fi
-
-if $ENABLE_DYNAMIC_LINKING; then
-  AC_DEFINE(ENABLE_DYNAMIC_LINKING, 1, [Define if using dynamic linking])
-fi
-
-AM_CONDITIONAL([AMCOND_ENABLE_DYNAMIC_LINKING],
-  [test x$ENABLE_DYNAMIC_LINKING = xtrue])
-
-if $SHARED_LIBS; then
-   LIBOCTINTERP=-loctinterp$SHLLINKEXT
-   LIBOCTAVE=-loctave$SHLLINKEXT
-   LIBCRUFT=-lcruft$SHLLINKEXT
-else
-  LIBOCTINTERP='$(top_builddir)/src/liboctinterp.$(LIBEXT)'
-  LIBOCTAVE='$(top_builddir)/liboctave/liboctave.$(LIBEXT)'
-  LIBCRUFT='$(top_builddir)/libcruft/libcruft.$(LIBEXT)'
-fi
-
-AC_SUBST(LD_CXX)
-AC_SUBST(RDYNAMIC_FLAG)
-AC_SUBST(ENABLE_DYNAMIC_LINKING)
-AC_SUBST(LIBOCTINTERP)
-AC_SUBST(LIBOCTAVE)
-AC_SUBST(LIBCRUFT)
-
-dnl Maybe <cmath> defines the IEEE functions we need.
-
-OCTAVE_CMATH_FUNC(isnan)
-OCTAVE_CMATH_FUNC(isinf)
-OCTAVE_CMATH_FUNC(isfinite)
+OCTAVE_CHECK_FUNC_CMATH(isnan)
+OCTAVE_CHECK_FUNC_CMATH(isinf)
+OCTAVE_CHECK_FUNC_CMATH(isfinite)
 
 dnl Would like to get rid of this cruft, and just have
 dnl
@@ -1835,66 +1957,112 @@
   ;;
 esac
 
-### Check for nonstandard but common math functions that we need.
+## Check for nonstandard, but common math functions, that we need.
+
+AC_CHECK_FUNCS(acosh acoshf asinh asinhf atanh atanhf cbrt cbrtf erf erff \
+  erfc erfcf exp2f hypotf _hypotf log2 log2f)
 
-AC_CHECK_FUNCS(acosh acoshf asinh asinhf atanh atanhf erf erff erfc erfcf exp2f log2 log2f)
-AC_CHECK_FUNCS(hypotf _hypotf cbrt cbrtf)
+## MinGW exception for mkstemp
+case "$canonical_host_type" in
+  *-*-mingw*)
+    ## MinGW does not provide a mkstemp function.  However, it provides
+    ## the mkstemps function in libiberty.
+    AC_MSG_CHECKING([for mkstemps in libiberty])
+    save_LIBS="$LIBS"
+    LIBS="-liberty $LIBS"
+    AC_LINK_IFELSE([
+      AC_LANG_PROGRAM([[
+        int mkstemps (char *pattern, int suffix_len);
+        ]], [[
+        mkstemps ("XXXXXX", 0);
+        ]]
+      )],
+    [AC_MSG_RESULT(yes)
+     HAVE_MKSTEMPS=yes
+     AC_DEFINE(HAVE_MKSTEMPS, 1,
+       [Define to 1 if mkstemps is available in libiberty.])
+    ],
+    [AC_MSG_RESULT(no)
+     HAVE_MKSTEMPS=no
+     LIBS="$save_LIBS"
+    ])
+   ;;
+esac
 
-### Checks for OS specific cruft.
+## Windows-specific tests for extra #defines
+case "$canonical_host_type" in
+  *-*-msdosmsvc | *-*-mingw*)
+    AC_MSG_CHECKING([for required _WIN32_WINNT])
+    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+        #include <windows.h>
+        #if _WIN32_WINNT < 0x0403
+        #error "Wrong version"
+        #endif
+        ]], [])],
+      [AC_MSG_RESULT([none])],
+      [AC_DEFINE(_WIN32_WINNT, 0x0403,
+        [Define to 0x0403 to access InitializeCriticalSectionAndSpinCount.])
+       AC_MSG_RESULT([0x0403])])
+    AC_MSG_CHECKING([whether _USE_MATH_DEFINES needs to be defined])
+    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+        #include <math.h>
+        ]], [[
+        int x = M_LN2;]])],
+      [AC_MSG_RESULT([no])],
+      [AC_DEFINE(_USE_MATH_DEFINES, 1,
+        [Define to 1 if your system needs to define math constants like M_LN2.])
+        AC_MSG_RESULT([yes])])
+  ;;
+esac
 
-AC_CHECK_MEMBERS([struct stat.st_blksize, struct stat.st_blocks, struct stat.st_rdev])
+## Cygwin kluge for getrusage.
+AC_CHECK_FUNCS(getrusage)
+case "$canonical_host_type" in
+  *-*-cygwin*)
+    AC_DEFINE(RUSAGE_TIMES_ONLY, 1,
+      [Define to 1 if your struct rusage only has time information.])
+  ;;
+esac
 
-AC_STRUCT_TIMEZONE
+## Check for CGDisplayBitsPerPixel function on Mac OSX systems with Carbon
+if test $have_framework_carbon = "yes"; then
+  OCTAVE_CARBON_CGDISPLAYBITSPERPIXEL
+fi
+
+AC_CHECK_FUNCS(getpwnam, [], [AC_CHECK_LIB(sun, getpwnam)])
+
 AC_FUNC_CLOSEDIR_VOID
 
-AC_CHECK_MEMBERS(struct group.gr_passwd)
-
-octave_found_termlib=no
-for termlib in ncurses curses termcap terminfo termlib; do
-  AC_CHECK_LIB(${termlib}, tputs, [
-    TERM_LIBS="-l${termlib}"
-    octave_found_termlib=yes
-    break])
-done
-
-if test "$octave_found_termlib" = no; then
-  warn_termlibs="I couldn't find -ltermcap, -lterminfo, -lncurses, -lcurses, o\
-r -ltermlib!"
-  AC_MSG_WARN([$warn_termlibs])
+## Check return type of matherr() 
+AC_CACHE_CHECK([for struct exception in math.h],
+  [octave_cv_func_matherr_type],
+  [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+      #include <math.h>
+      ]], [[
+      struct exception *x;
+      x->type;
+      x->name;
+      ]])],
+    octave_cv_func_matherr_type=yes,
+    octave_cv_func_matherr_type=no)
+  ])
+if test $octave_cv_func_matherr_type = "yes"; then
+  AC_DEFINE(EXCEPTION_IN_MATH, 1,
+    [Define to 1 if math.h declares struct exception for matherr().])
 fi
-AC_SUBST(TERM_LIBS)
-
-OCTAVE_ENABLE_READLINE
-
-AC_MSG_CHECKING([for struct exception in math.h])
-AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <math.h>]],
-  [[struct exception *x; x->type; x->name;]])],
-  [AC_MSG_RESULT(yes)
-   AC_DEFINE(EXCEPTION_IN_MATH, 1,
-     [Define if your math.h declares struct exception for matherr().])],
-  [AC_MSG_RESULT(no)])
-
-### Signal stuff.
+ 
+## Signal stuff.
 
 AC_CHECK_DECLS([sys_siglist], [], [],
-[#include <signal.h>
+[[#include <signal.h>
 /* NetBSD declares sys_siglist in unistd.h.  */
 #if HAVE_UNISTD_H
 # include <unistd.h>
 #endif
-])
-
-### A system dependent kluge or two.
+]])
 
-AC_CHECK_FUNCS(getrusage)
-case "$canonical_host_type" in
-  *-*-cygwin*)
-    AC_DEFINE(RUSAGE_TIMES_ONLY, 1, [Define if your struct rusage only has time information.])
-  ;;
-esac
-
-### Checks for other programs used for building, testing, installing,
-### and running Octave.
+### Checks for other programs used in building, testing, installing, and
+### running Octave.
 
 AC_PROG_AWK
 OCTAVE_PROG_FIND
@@ -1920,6 +2088,7 @@
 OCTAVE_PROG_GPERF
 
 OCTAVE_PROG_GHOSTSCRIPT
+OCTAVE_PROG_MAKEINFO
 OCTAVE_PROG_TEXI2DVI
 OCTAVE_PROG_TEXI2PDF
 
@@ -1958,10 +2127,11 @@
 
 AC_ARG_ENABLE(extra-warning-flags,
   [AS_HELP_STRING([--enable-extra-warning-flags],
-     [add -Wall, -W, -Wshadow, and -Wold-style-cast options to CFLAGS and CXXFLAGS  (on by default, but only if the compiler appears to accept them)])],
+    [add -Wall, -W, -Wshadow, and -Wold-style-cast options to CFLAGS and CXXFLAGS  (on by default, but only if the compiler appears to accept them)])],
   [if test "$enableval" = no; then
      try_extra_warning_flags=false
-   fi], [])
+   fi],
+  [])
 
 if $try_extra_warning_flags; then
   for flag in $GCC_EXTRA_FLAGS; do
@@ -1984,10 +2154,11 @@
 
 AC_ARG_ENABLE(strict-warning-flags,
   [AS_HELP_STRING([--enable-strict-warning-flags],
-     [add extra strict warning options to CFLAGS and CXXFLAGS (off by default)])],
+    [add extra strict warning options to CFLAGS and CXXFLAGS (off by default)])],
   [if test "$enableval" = yes; then
      try_strict_warning_flags=true
-   fi], [])
+   fi],
+  [])
 
 if $try_strict_warning_flags; then
   for flag in $GCC_STRICT_FLAGS; do
@@ -2005,6 +2176,46 @@
 AC_SUBST(WARN_CFLAGS)
 AC_SUBST(WARN_CXXFLAGS)
 
+### GUI/Qt related tests.
+
+HAVE_QT=false
+QT_INCDIR=
+QT_LIBDIR=
+build_gui=yes
+win32_terminal=no
+AC_ARG_ENABLE(gui,
+  [AS_HELP_STRING([--disable-gui], [build GUI (default is yes)])],
+  [if test "$enableval" = no; then build_gui=no; fi], [build_gui=yes])
+
+if test $build_gui = yes; then
+  AC_CHECK_PROGS(QMAKE, [qmake qmake-qt4 qmake-qt5])
+  if test -n "$QMAKE"; then
+    QT_INCDIR=`$QMAKE -query | sed -n -e 's/^QT_INSTALL_HEADERS://p'`
+    QT_LIBDIR=`$QMAKE -query | sed -n -e 's/^QT_INSTALL_LIBS://p'`
+    AC_CHECK_PROGS(MOC, [moc moc-qt4 moc-qt5])
+    AC_CHECK_PROGS(UIC, [uic uic-qt4 uic-qt5])
+    AC_CHECK_PROGS(RCC, [rcc])
+    if test -n "$MOC" && test -n "$UIC" && test -n "$RCC"; then
+      HAVE_QT=true
+      AC_DEFINE(HAVE_QT, 1, 
+        [Define to 1 if Qt is available (must have moc, uic, and rcc programs and developer header files and libraries installed).])
+    fi
+  fi
+
+  case "$canonical_host_type" in
+    *-*-mingw* | *-*-msdosmsvc*) win32_terminal=yes ;;
+    *)
+      AC_CHECK_HEADERS([pty.h libutil.h util.h])
+      AC_SEARCH_LIBS([openpty], [util],
+        [AC_DEFINE(HAVE_OPENPTY, [], [Define whether openpty exists])])
+      ;;
+  esac
+fi
+AM_CONDITIONAL([AMCOND_BUILD_GUI], [test $build_gui = yes])
+AM_CONDITIONAL([WIN32_TERMINAL], [test $win32_terminal = yes])
+AC_SUBST(QT_INCDIR)
+AC_SUBST(QT_LIBDIR)
+
 ### Run configure in subdirectories.
 
 export CC
@@ -2013,6 +2224,8 @@
 
 ### Some things to add to the bottom of config.h.
 
+dnl ------------------------------------------------------------
+
 AH_BOTTOM([
 #if !defined (GNULIB_NAMESPACE)
 #define GNULIB_NAMESPACE gnulib
@@ -2020,8 +2233,13 @@
 
 #if defined (__GNUC__)
 #define GCC_ATTR_DEPRECATED __attribute__ ((__deprecated__))
+#define HAVE_ATTR_DEPRECATED
+
 #define GCC_ATTR_NORETURN __attribute__ ((__noreturn__))
+#define HAVE_ATTR_NORETURN
+
 #define GCC_ATTR_UNUSED __attribute__ ((__unused__))
+#define HAVE_ATTR_UNUSED
 #else
 #define GCC_ATTR_DEPRECATED
 #define GCC_ATTR_NORETURN
@@ -2064,7 +2282,7 @@
 #define OCTAVE_HAVE_POSIX_FILESYSTEM 1
 #endif
 
-/* Define if we expect to have <windows.h>, Sleep, etc. */
+/* Define to 1 if we expect to have <windows.h>, Sleep, etc. */
 #if defined (__WIN32__) && ! defined (__CYGWIN__)
 #define OCTAVE_USE_WINDOWS_API 1
 #endif
@@ -2094,7 +2312,7 @@
 
 /* To be able to use long doubles for 64-bit mixed arithmetics, we need
    them at least 80 bits wide and we need roundl declared in math.h.
-   FIXME -- maybe substitute this by a more precise check in the future.  */
+   FIXME: Maybe substitute this by a more precise check in the future?  */
 #if (SIZEOF_LONG_DOUBLE >= 10) && defined (HAVE_ROUNDL)
 #define OCTAVE_INT_USE_LONG_DOUBLE
 #endif
@@ -2102,7 +2320,7 @@
 #define OCTAVE_EMPTY_CPP_ARG
 
 /* Octave is currently unable to use FFTW unless both float
-   and double versions are both available.  */
+   and double versions are available.  */
 #if defined (HAVE_FFTW3) && defined (HAVE_FFTW3F)
 #define HAVE_FFTW
 #endif
@@ -2157,10 +2375,13 @@
 
 #include <stdint.h>
 
-/* Tag indicating octave config.h has been included */
+/* Tag indicating Octave config.h has been included */
 #define OCTAVE_CONFIG_INCLUDED 1
 ])
 
+dnl end of AH_BOTTOM
+dnl ------------------------------------------------------------
+
 ### Do the substitutions in all the Makefiles.
 
 AC_SUBST(ac_config_files)
@@ -2175,6 +2396,8 @@
   doc/liboctave/Makefile
   doc/refcard/Makefile
   examples/Makefile
+  gui/Makefile
+  gui/src/Makefile
   libcruft/Makefile
   libcruft/mkf77def
   libgnu/Makefile
@@ -2234,21 +2457,24 @@
   FFTW3F LDFLAGS:              $FFTW3F_LDFLAGS
   FFTW3F libraries:            $FFTW3F_LIBS
   fontconfig CFLAGS:           $FONTCONFIG_CFLAGS
-  fontconfig LIBS:             $FONTCONFIG_LIBS
-  FT2_CFLAGS:                  $FT2_CFLAGS
-  FT2_LIBS:                    $FT2_LIBS
+  fontconfig libraries:        $FONTCONFIG_LIBS
+  FreeType2 CFLAGS:            $FT2_CFLAGS
+  FreeType2 libraries:         $FT2_LIBS
   GLPK CPPFLAGS:               $GLPK_CPPFLAGS
   GLPK LDFLAGS:                $GLPK_LDFLAGS
   GLPK libraries:              $GLPK_LIBS
   graphics CFLAGS:             $GRAPHICS_CFLAGS
-  graphics LIBS:               $GRAPHICS_LIBS
-  Magick++ CPPFLAGS:           $MAGICK_CPPFLAGS
-  Magick++ LDFLAGS:            $MAGICK_LDFLAGS
-  Magick++ libraries:          $MAGICK_LIBS
+  graphics libraries:          $GRAPHICS_LIBS
   HDF5 CPPFLAGS:               $HDF5_CPPFLAGS
   HDF5 LDFLAGS:                $HDF5_LDFLAGS
   HDF5 libraries:              $HDF5_LIBS
   LAPACK libraries:            $LAPACK_LIBS
+  LLVM CPPFLAGS:               $LLVM_CPPFLAGS
+  LLVM LDFLAGS:                $LLVM_LDFLAGS
+  LLVM libraries:              $LLVM_LIBS
+  Magick++ CPPFLAGS:           $MAGICK_CPPFLAGS
+  Magick++ LDFLAGS:            $MAGICK_LDFLAGS
+  Magick++ libraries:          $MAGICK_LIBS
   OPENGL libraries:            $OPENGL_LIBS
   PTHREAD flags:               $PTHREAD_CFLAGS
   PTHREAD libraries:           $PTHREAD_LIBS
@@ -2256,6 +2482,8 @@
   QHULL LDFLAGS:               $QHULL_LDFLAGS
   QHULL libraries:             $QHULL_LIBS
   QRUPDATE libraries:          $QRUPDATE_LIBS
+  Qt headers:                  $QT_INCDIR
+  Qt libraries:                $QT_LIBDIR
   READLINE libraries:          $READLINE_LIBS
   REGEX libraries:             $REGEX_LIBS
   TERM libraries:              $TERM_LIBS
@@ -2315,7 +2543,7 @@
   AC_MSG_WARN([Are you sure that is what you want to do?])
   AC_MSG_WARN([])
   AC_MSG_WARN([This option enables experimental SMP multithreding])
-  AC_MSG_WARN([code that has had very little testing. There is no])
+  AC_MSG_WARN([code that has had very little testing.  There is no])
   AC_MSG_WARN([certainity that the results returned by Octave with])
   AC_MSG_WARN([this option enabled will be correct.])
   AC_MSG_WARN([])
@@ -2362,9 +2590,9 @@
 if $USE_ATOMIC_REFCOUNT; then
   AC_MSG_WARN([])
   AC_MSG_WARN([Using atomic reference counting.])
-  AC_MSG_WARN([This feature allows to access octave data safely from])
-  AC_MSG_WARN([another thread, for instance from a GUI. However this])
-  AC_MSG_WARN([results in a small performance penalty in the octave])
+  AC_MSG_WARN([This feature allows access to Octave data safely from])
+  AC_MSG_WARN([another thread, for instance from a GUI.  However this])
+  AC_MSG_WARN([results in a small performance penalty in the Octave])
   AC_MSG_WARN([interpreter.])
   AC_MSG_WARN([])
   if $USE_OCTAVE_ALLOCATOR; then
--- a/doc/icons/octave.desktop.in
+++ b/doc/icons/octave.desktop.in
@@ -6,5 +6,5 @@
 Icon=%OCTAVE_IMAGEDIR%/octave-logo.svg
 Terminal=true
 Type=Application
-Categories=Development;Math;Science;
+Categories=Education;Science;Math;
 StartupNotify=false
--- a/doc/interpreter/contrib.txi
+++ b/doc/interpreter/contrib.txi
@@ -135,7 +135,11 @@
 @section Basics of Generating a Changeset
 
 The preferable form of contribution is creating a Mercurial changeset
-and sending it via e-mail to the octave-maintainers mailing list.
+and submit it to the @uref{http://savannah.gnu.org/bugs/?group=octave, bug} or
+@uref{http://savannah.gnu.org/patch/?func=additem&group=octave, patch}
+trackers@footnote{Please use the patch tracker only for patches which add new
+features.  If you have a patch to submit that fixes a bug, you should use the
+bug tracker instead.}.
 Mercurial is the source code management system currently used to develop
 Octave.  Other forms of contributions (e.g., simple diff patches) are
 also acceptable, but they slow down the review process.  If you want to
@@ -159,15 +163,14 @@
 hg export -o ../cool.diff tip
                              # export the changeset to a diff
                              # file
-# send ../cool.diff via email
+# attach ../cool.diff to your bug report
 @end group
 @end example
 
 You may want to get familiar with Mercurial queues to manage your
 changesets.  Here is a slightly more complex example using Mercurial
 queues, where work on two unrelated changesets is done in parallel and
-one of the changesets is updated after discussion on the maintainers
-mailing list:
+one of the changesets is updated after discussion on the bug tracker:
 
 @example
 hg qnew nasty_bug            # create a new patch
@@ -178,7 +181,7 @@
                              # save again with commit message
 hg export -o ../nasty.diff tip
                              # export the patch
-# send ../nasty.diff via email
+# attach ../nasty.diff to your bug report
 hg qpop                      # undo the application of the patch
                              # and remove the changes from the
                              # source tree
@@ -188,14 +191,14 @@
                              # save the changes into the patch
 hg export -o ../doc.diff tip
                              # export the second patch
-# send ../doc.diff tip via email
+# attach ../doc.diff to your bug report
 hg qpop
-# discussion in the maintainers mailing list @dots{}
+# discussion in the bug tracker @dots{}
 hg qpush nasty_bug           # apply the patch again
 # change sources yet again @dots{}
 hg qref
 hg export -o ../nasty2.diff tip
-# send ../nasty2.diff via email
+# attach ../nasty2.diff to your bug report
 @end example
 
 @node General Guidelines
--- a/doc/interpreter/contributors.in
+++ b/doc/interpreter/contributors.in
@@ -294,3 +294,6 @@
 Michael Zeising
 Federico Zenith
 Alex Zvoleff
+Valentin Ortega-Clavero
+Jacob Dawid
+Júlio Hoffimann
--- a/doc/interpreter/doccheck/aspell-octave.en.pws
+++ b/doc/interpreter/doccheck/aspell-octave.en.pws
@@ -450,6 +450,7 @@
 isreal
 issparse
 isvector
+iter
 ith
 iy
 Jacobian
@@ -611,6 +612,7 @@
 nd
 ndgrid
 ne
+Nelder
 neq
 Neudecker
 Neumann
--- a/doc/interpreter/image.txi
+++ b/doc/interpreter/image.txi
@@ -60,7 +60,7 @@
 @group
 I = imread ("my_input_image.img");
 J = process_my_image (I);
-imwrite ("my_output_image.img", J);
+imwrite (J, "my_output_image.img");
 @end group
 @end example
 
@@ -93,15 +93,15 @@
 @node Representing Images
 @section Representing Images
 
-In general Octave supports four different kinds of images, gray-scale
-images, RGB images, binary images, and indexed images.  A gray-scale
+In general Octave supports four different kinds of images, grayscale
+images, RGB images, binary images, and indexed images.  A grayscale
 image is represented with an M-by-N matrix in which each
 element corresponds to the intensity of a pixel.  An RGB image is
 represented with an M-by-N-by-3 array where each
 3-vector corresponds to the red, green, and blue intensities of each
 pixel.
 
-The actual meaning of the value of a pixel in a gray-scale or RGB
+The actual meaning of the value of a pixel in a grayscale or RGB
 image depends on the class of the matrix.  If the matrix is of class
 @code{double} pixel intensities are between 0 and 1, if it is of class
 @code{uint8} intensities are between 0 and 255, and if it is of class
@@ -187,6 +187,12 @@
 
 @DOCSTRING(whitebg)
 
+The following functions can be used to manipulate colormaps.
+
+@DOCSTRING(cmunique)
+
+@DOCSTRING(cmpermute)
+
 @node Plotting on top of Images
 @section Plotting on top of Images
 
--- a/doc/interpreter/install.txi
+++ b/doc/interpreter/install.txi
@@ -250,6 +250,11 @@
 (@url{http://www.hdfgroup.org/HDF5}).  HDF5 is required for Octave's
 @code{load} and @code{save} commands to read and write HDF data files.
 
+@item LLVM
+Compiler framework, (@url{http://www.llvm.org}). LLVM is required for
+Octave's experimental just-in-time (JIT) compilation for speeding up the
+interpreter.
+
 @item OpenGL
 API for portable 2-D and 3-D graphics (@url{http://www.opengl.org}).  An
 OpenGL implementation is required to provide Octave's OpenGL-based
@@ -270,6 +275,17 @@
 provide improved performance for the functions @code{qrdelete},
 @code{qrinsert}, @code{qrshift}, and @code{qrupdate}.
 
+@item QScintilla
+Source code highlighter and manipulator; a Qt  port of Scintilla
+(@url{http://www.riverbankcomputing.co.uk/software/qscintilla}).
+QScintilla is used for syntax highlighting and code completion in the
+GUI.
+
+@item Qt
+GUI and utility libraries (@url{}). Qt is required for building the GUI.
+It is a large framework, but the only components required are the GUI,
+core, Webkit, and network modules.
+
 @item SuiteSparse
 Sparse matrix factorization library
 (@url{http://www.cise.ufl.edu/research/sparse/SuiteSparse}).
--- a/doc/interpreter/io.txi
+++ b/doc/interpreter/io.txi
@@ -239,7 +239,7 @@
 
 If Octave for some reason exits unexpectedly it will by default save the
 variables available in the workspace to a file in the current directory.
-By default this file is named @samp{octave-core} and can be loaded
+By default this file is named @samp{octave-workspace} and can be loaded
 into memory with the @code{load} command.  While the default behavior
 most often is reasonable it can be changed through the following
 functions.
--- a/doc/interpreter/macros.texi
+++ b/doc/interpreter/macros.texi
@@ -27,15 +27,17 @@
 @c want lots of `See also: foo, bar, and baz' strings cluttering the
 @c printed manual (that information should be in the supporting text for
 @c each group of functions and variables).
+@c
+@c Implementation Note:
+@c For TeX, @vskip produces a nice separation.
+@c For Texinfo '@sp 1' should work, but in practice produces ugly results
+@c for HTML.  We use a simple blank line to produce the correct behavior. 
 
 @macro seealso {args}
 @iftex
 @vskip 2pt
 @end iftex
 @ifnottex
-@c Texinfo @sp should work but in practice produces ugly results for HTML.
-@c A simple blank line produces the correct behavior. 
-@c @sp 1
 
 @end ifnottex
 @noindent
--- a/doc/interpreter/nonlin.txi
+++ b/doc/interpreter/nonlin.txi
@@ -172,7 +172,11 @@
 the zeroes where it crosses the x-axis.  @code{fminbnd} is designed for the
 simpler, but very common, case of a univariate function where the interval
 to search is bounded.  For unbounded minimization of a function with
-potentially many variables use @code{fminunc}.  @xref{Optimization}, for
+potentially many variables use @code{fminunc} or @code{fminsearch}.  The two
+functions use different internal algorithms and some knowledge of the objective
+function is required.  For functions which can be differentiated, @code{fminunc}
+is appropriate.  For functions with discontinuities, or for which a gradient
+search would fail, use @code{fminsearch}.  @xref{Optimization}, for
 minimization with the presence of constraint functions.  Note that searches
 can be made for maxima by simply inverting the objective function
 @tex
@@ -186,3 +190,5 @@
 
 @DOCSTRING(fminunc)
 
+@DOCSTRING(fminsearch)
+
new file mode 100644
--- /dev/null
+++ b/gui/Makefile.am
@@ -0,0 +1,3 @@
+SUBDIRS = src
+
+octetc_DATA = default-qt-settings
new file mode 100644
--- /dev/null
+++ b/gui/default-qt-settings
@@ -0,0 +1,37 @@
+[General]
+connectOnStartup=true
+showMessageOfTheDay=true
+showTopic=true
+autoIdentification=false
+nickServPassword=
+useCustomFileEditor=false
+customFileEditor=emacs
+showFilenames=true
+showFileSize=false
+showFileType=false
+showLastModified=false
+showHiddenFiles=false
+useAlternatingRowColors=true
+useProxyServer=false
+proxyType=
+proxyHostName=none
+proxyPort=8080
+proxyUserName=
+proxyPassword=
+
+[editor]
+showLineNumbers=true
+highlightCurrentLine=true
+codeCompletion=true
+fontName=Ubuntu Mono
+fontSize=12
+shortWindowTitle=true
+longWindowTitle=true
+
+[terminal]
+fontSize=10
+fontName=Andale Mono
+
+[MainWindow]
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x1\0\0\0\0\0\x31\0\0\0\x18\0\0\x4\xff\0\0\x3\xff\0\0\0\0\0\0\0\0\xff\xff\xff\xfe\xff\xff\xff\xfe\0\0\0\0\x2\0)
+windowState=@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\x1\0\0\0\x1\0\0\x4\xcf\0\0\x3\x91\xfc\x2\0\0\0\x1\xfc\0\0\0\x41\0\0\x3\x91\0\0\x1\xc7\0\xff\xff\xff\xfc\x1\0\0\0\x3\xfc\0\0\0\0\0\0\x1.\0\0\0R\0\xff\xff\xff\xfc\x2\0\0\0\x2\xfb\0\0\0\x1a\0W\0o\0r\0k\0s\0p\0\x61\0\x63\0\x65\0V\0i\0\x65\0w\x1\0\0\0\x41\0\0\x1\xe8\0\0\0k\0\xff\xff\xff\xfb\0\0\0\"\0H\0i\0s\0t\0o\0r\0y\0\x44\0o\0\x63\0k\0W\0i\0\x64\0g\0\x65\0t\x1\0\0\x2/\0\0\x1\xa3\0\0\0\x8c\0\xff\xff\xff\xfc\0\0\x1\x34\0\0\x2\x81\0\0\x2\x81\0\0\x2\x81\xfa\0\0\0\0\x2\0\0\0\x2\xfb\0\0\0$\0T\0\x65\0r\0m\0i\0n\0\x61\0l\0\x44\0o\0\x63\0k\0W\0i\0\x64\0g\0\x65\0t\x1\0\0\0\0\xff\xff\xff\xff\0\0\x1\xa9\0\xff\xff\xff\xfb\0\0\0\x14\0\x46\0i\0l\0\x65\0\x45\0\x64\0i\0t\0o\0r\x1\0\0\x1\xf0\0\0\x1\xe2\0\0\0j\0\xff\xff\xff\xfb\0\0\0\x1e\0\x46\0i\0l\0\x65\0s\0\x44\0o\0\x63\0k\0W\0i\0\x64\0g\0\x65\0t\x1\0\0\x3\xbb\0\0\x1\x14\0\0\0P\0\xff\xff\xff\0\0\0\0\0\0\x3\x91\0\0\0\x4\0\0\0\x4\0\0\0\b\0\0\0\b\xfc\0\0\0\x1\0\0\0\x2\0\0\0\x1\xff\xff\xff\xff\x1\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0)
new file mode 100644
--- /dev/null
+++ b/gui/gui.pro
@@ -0,0 +1,2 @@
+TEMPLATE = subdirs
+SUBDIRS = qterminal src
new file mode 100644
--- /dev/null
+++ b/gui/kb-layouts/default.keytab
@@ -0,0 +1,133 @@
+# [README.default.Keytab] Buildin Keyboard Table
+#
+# To customize your keyboard, copy this file to something
+# ending with .keytab and change it to meet you needs.
+# Please read the README.KeyTab and the README.keyboard
+# in this case.
+#
+# --------------------------------------------------------------
+
+keyboard "Default (XFree 4)"
+
+# --------------------------------------------------------------
+#
+# Note that this particular table is a "risc" version made to
+# ease customization without bothering with obsolete details.
+# See VT100.keytab for the more hairy stuff.
+#
+# --------------------------------------------------------------
+
+# common keys
+
+key Escape             : "\E"
+
+key Tab   -Shift       : "\t"
+key Tab   +Shift+Ansi  : "\E[Z"
+key Tab   +Shift-Ansi  : "\t"
+key Backtab     +Ansi  : "\E[Z"
+key Backtab     -Ansi  : "\t"
+
+key Return-Shift-NewLine : "\r"
+key Return-Shift+NewLine : "\r\n"
+
+key Return+Shift         : "\EOM"
+
+# Backspace and Delete codes are preserving CTRL-H.
+
+key Backspace      : "\x7f"
+
+# Arrow keys in VT52 mode
+# shift up/down are reserved for scrolling.
+# shift left/right are reserved for switching between tabs (this is hardcoded).
+
+key Up   -Shift-Ansi : "\EA"
+key Down -Shift-Ansi : "\EB"
+key Right-Shift-Ansi : "\EC"
+key Left -Shift-Ansi : "\ED"
+
+# Arrow keys in ANSI mode with Application - and Normal Cursor Mode)
+
+key Up    -Shift-AnyMod+Ansi+AppCuKeys           : "\EOA"
+key Down  -Shift-AnyMod+Ansi+AppCuKeys           : "\EOB"
+key Right -Shift-AnyMod+Ansi+AppCuKeys           : "\EOC"
+key Left  -Shift-AnyMod+Ansi+AppCuKeys           : "\EOD"
+
+key Up    -Shift-AnyMod+Ansi-AppCuKeys           : "\E[A"
+key Down  -Shift-AnyMod+Ansi-AppCuKeys           : "\E[B"
+key Right -Shift-AnyMod+Ansi-AppCuKeys           : "\E[C"
+key Left  -Shift-AnyMod+Ansi-AppCuKeys           : "\E[D"
+
+key Up    -Shift+AnyMod+Ansi                     : "\E[1;*A"
+key Down  -Shift+AnyMod+Ansi                     : "\E[1;*B"
+key Right -Shift+AnyMod+Ansi                     : "\E[1;*C"
+key Left  -Shift+AnyMod+Ansi                     : "\E[1;*D"
+
+# other grey PC keys
+
+key Enter+NewLine : "\r\n"
+key Enter-NewLine : "\r"
+
+key Home        -AnyMod     -AppCuKeys           : "\E[H"  
+key End         -AnyMod     -AppCuKeys           : "\E[F"  
+key Home        -AnyMod     +AppCuKeys           : "\EOH"  
+key End         -AnyMod     +AppCuKeys           : "\EOF"  
+key Home        +AnyMod                          : "\E[1;*H"
+key End         +AnyMod                          : "\E[1;*F"
+
+key Insert      -AnyMod                          : "\E[2~"
+key Delete      -AnyMod                          : "\E[3~"
+key Insert      +AnyMod                          : "\E[2;*~"
+key Delete      +AnyMod                          : "\E[3;*~"
+
+key Prior -Shift-AnyMod                          : "\E[5~"
+key Next  -Shift-AnyMod                          : "\E[6~"
+key Prior -Shift+AnyMod                          : "\E[5;*~"
+key Next  -Shift+AnyMod                          : "\E[6;*~"
+
+# Function keys
+key F1          -AnyMod                          : "\EOP"
+key F2          -AnyMod                          : "\EOQ"
+key F3          -AnyMod                          : "\EOR"
+key F4          -AnyMod                          : "\EOS"
+key F5          -AnyMod                          : "\E[15~"
+key F6          -AnyMod                          : "\E[17~"
+key F7          -AnyMod                          : "\E[18~"
+key F8          -AnyMod                          : "\E[19~"
+key F9          -AnyMod                          : "\E[20~"
+key F10         -AnyMod                          : "\E[21~"
+key F11         -AnyMod                          : "\E[23~"
+key F12         -AnyMod                          : "\E[24~"
+
+key F1          +AnyMod                          : "\EO*P"
+key F2          +AnyMod                          : "\EO*Q"
+key F3          +AnyMod                          : "\EO*R"
+key F4          +AnyMod                          : "\EO*S"
+key F5          +AnyMod                          : "\E[15;*~"
+key F6          +AnyMod                          : "\E[17;*~"
+key F7          +AnyMod                          : "\E[18;*~"
+key F8          +AnyMod                          : "\E[19;*~"
+key F9          +AnyMod                          : "\E[20;*~"
+key F10         +AnyMod                          : "\E[21;*~"
+key F11         +AnyMod                          : "\E[23;*~"
+key F12         +AnyMod                          : "\E[24;*~"
+
+# Work around dead keys
+
+key Space +Control : "\x00"
+
+# Some keys are used by konsole to cause operations.
+# The scroll* operations refer to the history buffer.
+
+key Up    +Shift-AppScreen  : scrollLineUp
+key Prior +Shift-AppScreen  : scrollPageUp
+key Down  +Shift-AppScreen  : scrollLineDown
+key Next  +Shift-AppScreen  : scrollPageDown
+
+#key Up    +Shift  : scrollLineUp
+#key Prior +Shift  : scrollPageUp
+#key Down  +Shift  : scrollLineDown
+#key Next  +Shift  : scrollPageDown
+
+key ScrollLock     : scrollLock
+
+# keypad characters are not offered differently by Qt.
new file mode 100644
--- /dev/null
+++ b/gui/kb-layouts/linux.keytab
@@ -0,0 +1,133 @@
+# [linux.keytab] Konsole Keyboard Table (Linux console keys)
+#
+# --------------------------------------------------------------
+
+# NOT TESTED, MAY NEED SOME CLEANUPS
+keyboard "Linux console"
+
+# --------------------------------------------------------------
+#
+# This configuration table allows to customize the
+# meaning of the keys.
+#
+# The syntax is that each entry has the form : 
+#
+#   "key" Keyname { ("+"|"-") Modename } ":" (String|Operation)
+#
+# Keynames are those defined in <qnamespace.h> with the
+# "Qt::Key_" removed. (We'd better insert the list here)
+#
+# Mode names are : 
+#
+# - Shift
+# - Alt
+# - Control
+#
+#   The VT100 emulation has two modes that can affect the
+#   sequences emitted by certain keys. These modes are
+#   under control of the client program.
+#   
+# - Newline     : effects Return and Enter key.
+# - Application : effects Up and Down key.
+#
+# - Ansi        : effects Up and Down key (This is for VT52, really).
+#
+# Operations are
+#
+# - scrollUpLine
+# - scrollUpPage
+# - scrollDownLine
+# - scrollDownPage
+#
+# - emitSelection
+#
+# If the key is not found here, the text of the
+# key event as provided by QT is emitted, possibly
+# preceeded by ESC if the Alt key is pressed.
+#
+# --------------------------------------------------------------
+
+key Escape : "\E"
+key Tab    : "\t"
+
+# VT100 can add an extra \n after return.
+# The NewLine mode is set by an escape sequence.
+
+key Return-NewLine : "\r"  
+key Return+NewLine : "\r\n"
+
+# Some desperately try to save the ^H.
+
+key Backspace : "\x7f"
+key Delete    : "\E[3~"
+
+# These codes are for the VT52 mode of VT100
+# The Ansi mode (i.e. VT100 mode) is set by
+# an escape sequence
+
+key Up   -Shift-Ansi : "\EA"
+key Down -Shift-Ansi : "\EB"
+key Right-Shift-Ansi : "\EC"
+key Left -Shift-Ansi : "\ED"
+
+# VT100 emits a mode bit together
+# with the arrow keys.The AppCuKeys
+# mode is set by an escape sequence.
+
+key Up   -Shift+Ansi+AppCuKeys : "\EOA"
+key Down -Shift+Ansi+AppCuKeys : "\EOB"
+key Right-Shift+Ansi+AppCuKeys : "\EOC"
+key Left -Shift+Ansi+AppCuKeys : "\EOD"
+
+key Up   -Shift+Ansi-AppCuKeys : "\E[A"
+key Down -Shift+Ansi-AppCuKeys : "\E[B"
+key Right-Shift+Ansi-AppCuKeys : "\E[C"
+key Left -Shift+Ansi-AppCuKeys : "\E[D"
+
+# linux functions keys F1-F5 differ from xterm
+
+key F1 : "\E[[A" 
+key F2 : "\E[[B" 
+key F3 : "\E[[C" 
+key F4 : "\E[[D" 
+key F5 : "\E[[E" 
+
+key F6     : "\E[17~" 
+key F7     : "\E[18~" 
+key F8     : "\E[19~" 
+key F9     : "\E[20~" 
+key F10    : "\E[21~" 
+key F11    : "\E[23~" 
+key F12    : "\E[24~" 
+
+key Home   : "\E[1~"  
+key End    : "\E[4~"  
+
+key Prior -Shift : "\E[5~"  
+key Next  -Shift : "\E[6~"  
+key Insert-Shift : "\E[2~"  
+
+# Keypad-Enter. See comment on Return above.
+
+key Enter+NewLine : "\r\n"
+key Enter-NewLine : "\r"  
+
+key Space +Control : "\x00"
+
+# some of keys are used by konsole.
+
+key Up    +Shift   : scrollLineUp
+key Prior +Shift   : scrollPageUp
+key Down  +Shift   : scrollLineDown
+key Next  +Shift   : scrollPageDown
+
+key ScrollLock     : scrollLock
+
+#----------------------------------------------------------
+
+# keypad characters as offered by Qt
+# cannot be recognized as such.
+
+#----------------------------------------------------------
+
+# Following other strings as emitted by konsole.
new file mode 100644
--- /dev/null
+++ b/gui/kb-layouts/vt420pc.keytab
@@ -0,0 +1,163 @@
+# [vt420pc.keytab] Konsole Keyboard Table (VT420pc keys)
+# adapted by ferdinand gassauer f.gassauer@aon.at
+# Nov 2000
+#
+################################################################
+#
+# The escape sequences emmited by the 
+# keys Shift+F1 to Shift+F12 might not fit your needs
+#
+################# IMPORTANT NOTICE #############################
+# the key bindings (Kcontrol -> look and feel -> keybindgs) 
+# overrule the settings in this file. The key bindings might be 
+# changed by the user WITHOUT notification of the maintainer of
+# the keytab file. Konsole will not work as expected by 
+# the maintainer of the keytab file.
+################################################################
+#
+# --------------------------------------------------------------
+
+keyboard "DEC VT420 Terminal"
+
+# --------------------------------------------------------------
+#
+# This configuration table allows to customize the
+# meaning of the keys.
+#
+# The syntax is that each entry has the form : 
+#
+#   "key" Keyname { ("+"|"-") Modename } ":" (String|Operation)
+#
+# Keynames are those defined in <qnamespace.h> with the
+# "Qt::Key_" removed. (We'd better insert the list here)
+#
+# Mode names are : 
+#
+# - Shift
+# - Alt
+# - Control
+#
+#   The VT100 emulation has two modes that can affect the
+#   sequences emitted by certain keys. These modes are
+#   under control of the client program.
+#   
+# - Newline     : effects Return and Enter key.
+# - Application : effects Up and Down key.
+#
+# - Ansi        : effects Up and Down key (This is for VT52, really).
+#
+# Operations are
+#
+# - scrollUpLine
+# - scrollUpPage
+# - scrollDownLine
+# - scrollDownPage
+#
+# - emitSelection
+#
+# If the key is not found here, the text of the
+# key event as provided by QT is emitted, possibly
+# preceeded by ESC if the Alt key is pressed.
+#
+# --------------------------------------------------------------
+
+key Escape : "\E"
+key Tab    : "\t"
+key Backtab: "\E[Z"
+
+# VT100 can add an extra \n after return.
+# The NewLine mode is set by an escape sequence.
+
+key Return-NewLine : "\r"  
+key Return+NewLine : "\r\n"
+
+# Some desperately try to save the ^H.
+# may be not everyone wants this
+
+key Backspace : "\x08"  # Control H
+key Delete    : "\x7f"
+
+# These codes are for the VT420pc
+# The Ansi mode (i.e. VT100 mode) is set by
+# an escape sequence
+
+key Up   -Shift-Ansi : "\EA"
+key Down -Shift-Ansi : "\EB"
+key Right-Shift-Ansi : "\EC"
+key Left -Shift-Ansi : "\ED"
+
+# VT100 emits a mode bit together
+# with the arrow keys.The AppCuKeys
+# mode is set by an escape sequence.
+
+key Up   -Shift+Ansi+AppCuKeys : "\EOA"
+key Down -Shift+Ansi+AppCuKeys : "\EOB"
+key Right-Shift+Ansi+AppCuKeys : "\EOC"
+key Left -Shift+Ansi+AppCuKeys : "\EOD"
+
+key Up   -Shift+Ansi-AppCuKeys : "\E[A"
+key Down -Shift+Ansi-AppCuKeys : "\E[B"
+key Right-Shift+Ansi-AppCuKeys : "\E[C"
+key Left -Shift+Ansi-AppCuKeys : "\E[D"
+
+# function keys 
+
+key F1 -Shift    : "\E[11~"  
+key F2 -Shift    : "\E[12~"
+key F3 -Shift    : "\E[13~"
+key F4 -Shift    : "\E[14~"
+key F5 -Shift    : "\E[15~"
+key F6 -Shift    : "\E[17~"
+key F7 -Shift    : "\E[18~"
+key F8 -Shift    : "\E[19~"
+key F9 -Shift    : "\E[20~"
+key F10-Shift    : "\E[21~"
+key F11-Shift    : "\E[23~"
+key F12-Shift    : "\E[24~"  
+#
+# Shift F1-F12
+#
+key F1 +Shift    : "\E[11;2~"
+key F2 +Shift    : "\E[12;2~"
+key F3 +Shift    : "\E[13;2~"
+key F4 +Shift    : "\E[14;2~"
+key F5 +Shift    : "\E[15;2~"
+key F6 +Shift    : "\E[17;2~" 
+key F7 +Shift    : "\E[18;2~" 
+key F8 +Shift    : "\E[19;2~" 
+key F9 +Shift    : "\E[20;2~" 
+key F10+Shift    : "\E[21;2~" 
+key F11+Shift    : "\E[23;2~" 
+key F12+Shift    : "\E[24;2~" 
+
+key Home   : "\E[H"  
+key End    : "\E[F"  
+
+key Prior -Shift : "\E[5~"  
+key Next  -Shift : "\E[6~"  
+key Insert-Shift : "\E[2~"  
+
+# Keypad-Enter. See comment on Return above.
+
+key Enter+NewLine : "\r\n"
+key Enter-NewLine : "\r"  
+
+key Space +Control : "\x00"
+
+# some of keys are used by konsole.
+
+key Up    +Shift   : scrollLineUp
+key Prior +Shift   : scrollPageUp
+key Down  +Shift   : scrollLineDown
+key Next  +Shift   : scrollPageDown
+
+key ScrollLock     : scrollLock
+
+#----------------------------------------------------------
+
+# keypad characters as offered by Qt
+# cannot be recognized as such.
+
+#----------------------------------------------------------
+
+# Following other strings as emitted by konsole.
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..a701c3df75595c1b14d890e84c3577aa8d342474
GIT binary patch
literal 10151
zc$}?S3veA}6+TJt&ExhaY0{FW0n(+93~g<Yj8)9kLi1`1ZCaX=05YX}?{4nh$==<|
zK9VLf3@9@yFsK6#j3T2JDZ&iQ2r@wBA(o+v0t$oj5@(c-hzv8Jh=S<(&;Re;|K9B8
zrs!mH_dfPN=R1%8JLmkn`2nrt7jNJ4&0n2%%A*Iq_wcLz0E;@H_Q6L0YHxzXtycrI
z_V8=x=OA(Td4R+*NIa7OX!|K7H+cZdZiD3ZO#rKVA$ju?0PWX6@-ZDhKLG1*p8<d|
zSbqfXhnr#jvupAC3T(Lc9+bZuHXOz4A{VwDzY3uF9XNNx7g66uFnZDD0INQLOTP4D
zl=BxbKXV8_?}qQZKLU{20Dr!B3*y)e?-o`7biG`&`sfdE{pB^!9!Gpl=heKm1@*Td
zsa^iqNdPB}*M9$l9)OO<+I#jt1yGZzz5g1#zcyWa^p{-#E&opJ?0gaRUYoeR7v<GI
zlsK|DgZBP4@yyhX04JZ8_~V5P&sB-H??k_>I+A$5u??UunM}~{hm-4it_N81v*g8h
zp#3LxCoehcam4Yp<XxL;@tR6LH@zSI)tY>B>|NBS)ZOsJlZbCy-LbE;-yf@cKK~Jb
zGF<o4BlvsQW%Xaa4sq3;Uw_yBrHE%y{U5%4DL}HdA@$sy04pDFxcz}!0U8f9y!emb
z12n8?cmq)X(wWBfpZz=9`8L0<S=qS1FogbwMpOM8`sd-sEB|=|uK#@FeKo%YNPo5Q
zwS9*X@3&Gd$Bv?(omA)XyAfY8rJaTGTKsBC+q?|#TbjCi%fHah<Efuqhw)DDP93`m
z?Oc{$-22djDE)Wo#OoNR+LzLGv#77;(ezpWK{?Ai(^J#v=S8d1vrQIWA533)=mmfk
zcc!mC{3hCUY5K;RSMa{yq;Gs3<5km<zT>h3=yx-Hq{hYXzrnAk+}70f2FCH!C!1EL
ze7qK$F23t&{QixmiKj7N+TP*UlMgiA*NgeFcvaJzmp_NUuW5Q~{k`bV&gM(DFucER
zcJ4(#H9XV&g^$pV<PVz<HDDZ?K4?Dl^DN@p)clT#acX_41%8Bh+ZVN@?#H}Xx~XNX
z^<|95Z3a5kT7(W&pc@831rKyE@RJK!$b*URb$AW`tp?`yI{aVUJz(0dt_&NdUXP#K
z*_$EF@N8$7W{mooal_K==^7@r4W*t3HWW#YQzj?bJzy7Ss!3Re5{5v-^<Jb5wyc_r
zv}~KSb|DtD<Ju8i=i|Q;A*Hc<M4w)eFV>KxKapQulH#Joe)NtFlTbj(4osHhHly5w
zp3-mIlLgh8tR}nzg}(q3_-DlcO?B@s>ehmzHiX``P~3-*EAx0=_a4>ts)}HE#wlPL
z1uc(8niZkjt84Z`!oL-r?-G=JMfelldwuJF6Vb>-EXXUTpqx=OiN%lSVYHh^)v1MT
z4whPb5mFYzpToqk@YR5v<e>|!>K;0WHkgHfUO6OuzZTBKS4)8Q@V!ZChYo-~Na63j
z&{NXaF`!zO?J16~YRUv^RMwu^ms;D~Qw_rQ6N12*#i8FbF;G?rDASJN=_iDxvlMNv
z$09vidD;y4-Bn3r5O%?P0yG1uQ1F>~nz+t2)0NVLtvI`+a^0Y<%-Fs%ty-Sq*^0}O
z#LMeS)^{8ozhgG0)}E=HU7bee>djG9L)~6UZ__aM9VyhRXJjZ_7o=;06H-4(<BO|r
z7a1o*XyRuIgcRsBNi=O$)3vIxU4^k7V}RH;sluOadmO!c%CLQR!5q3KetT1SRM7%A
z^lWLLE8Sb&YO>k-3aFGXI?A6dOU@<x>|BlsT`27JnD3J)#wQn>!Y^ZF#4Lg5`@oRE
zw+@K38#Ej}i&Ci$w=ga4pq-r@H?*AYk$4Y=L)w&ffldX2e>X@azDNKjscFcPeJX9l
zPvAQrtq#|edv+FoRdBBb)l1Hgu0h++n0nSUvXhF+nE<zs%}SZ!^~9py3)@gqW**FY
zP#eof1+nuQC8M(NT|wN*KZlr39<n^$q1{_ly}V*Ogv(M3dOV;lqN2t`2EWgv3-SWU
zG+ue1z+5UTZ{KBO+WAGrwsb`cq8G2X3)4<VQ+4X*TzoaC`{27sFUf5gunPs%(v<Cn
z8{|W)cwZs%mj7c$XySeuq#_)p;oZzJ`^YH;5f!tPF&|QVk?rtb<!y@Os7>XWlNIJ+
z@_3GFxf2*cgQ%Fr5#w1fEY<9p$80k)r5Lz_RM)uqvT6K|dHr89W&%H%lzdK^8S6x{
zv1Sm#Vxk4P7g&_%Xy=2TmO+$6*Nc#|h0QzlgSxXj>mjLa^9|7kva((f`@mzYRlXJp
zByQ~zbP!u%Q4}4}!j*&igzB5IE6;_COIw5Kog|LrjYW_bVQvMrc{_f`R!j=SY#*y7
zoy&MGY`o03JzY~=&oQiA9DrryEO~$GlHsWx8k%iP7`hWDpc8H9!_$Y<hA^Dd6!5Sv
z*Po})OxsSZ?;FqyYFV`EM*Ko1Ug;9pO)hcBbh&6ZVBhbkqGEqMkLzL>P)qkz_4p`y
zc%dF|hgZZ_R?vzpCC-$@P3f%}+xHZ{hzUvUQVmNgfz6VD^Cd4g@P+4lQHxSoH**x0
z5O#8F&UVzOyVoG;F~eQ4M*}KzN}a7-#GAI7M$S_BdN)emcBDujS96y4CC65_ne+2U
z$Q0fE4(ies#tE*jI@x?IO;m!pV!>df@CcTlB)SV2f(_|*84YeHVw;etj?aT?Y4=KG
zCrn_td9)SH&iagKRL`(2Wddt$UN?)8R`gZ1Vuz?&N?D&PBWM!{uvh0*-HlY$00U%#
zC(RUjH8RbbVJ8-LH$W4n+JK2cidxY@g{B~O9bc)U2Sa6zjD3B}@MfaccgDvhOwd8u
zuTfI8$Z{8YP)<vkn|aMH&y%?oyt1d-$jcnLU1Y4Q7?vo{A{WZ4^jtqPL^@TRvSDxN
zpb;6E4k-yT2+u~6cFVY)4<|e$A|tiX=Bi$5sw!oC7rn!&WNy9&GacW5%<q%bY7}TP
zQ$&5$OPyG`*Zb*PUrZQ$BCYJdPGom}a);%5IKP@RN*0q{nKoGSi}7)S0Qu-Acm7Sf
z3_)_Lo<J4+G%R#f;|`Vv6KXb+=2N(p)XMPg#Mv?G=F>|zD@gPXDP>-B$?_cKw$IL7
z!Xq~(N*TAENw*k-ARSqs>f$R?M@3AADK~O*aTC59ww+w0h)<QyAKAtl3deE^n_Q8k
z5h|P)=+uv$QS$Lo)TC&vktc{!1~f5YSjdSPBg5NCWs-A(Lz&9DpYo8U_Uc93@sxf)
z7rl|?F<grDXpE10aY0e)V4M?)IZg5N#=I|5eBd67wvt7IWaXK;G{&MD<~L3CR9>L-
zzUR?5_Oun_$sxi29`M1Qke7L~VN@q6ksZd8O4<#V?Gr>Awd@u&SC6g#W7N$X_?qG8
zxn+ZoHix%@st~kHlT?YO#L9VNguiEqU5$X#C5LVpGccuDZJ1IWL&fHvl?(bp&3XpL
zbUKJ>q<6a(m>-Svrp9KJ5)N&p#}k5ehRIh!1)ZW_rz0v<`&Ks7St{iN78@*prtMHn
zn}Yxk8mejMNa+ZjZ+g^r^TO^5XLEBDyn~P1qoi_*!k~#(z#xatMm$Sdwbl3R0;0&O
zCQ`h?=bRY@+pZCup+|LRDh^W64moq%p{U!>q0(ef0peq#Q&!ei(`XTrCU;#XOoWn}
zQwMCz(z7%gueLdnB3>+0j^`KS^rvMO4Ou)q*Nj@!j*AW=5zrhL;l8?|gN)VUmVb<H
zBO1jHbkjU2b`<7A(FS{{L34wF6#Bwc-=n%Nn@RiPR`0AF>Ps!^9EzedEcx*ddkycC
zA-C?;U7aGR@sokr%s*jDj1n>|0ui1+F=k?rSf3P7`q5Hn6>t$Vn;#04E9@H0<CaBY
z$IP2hOx5+2f~^@7xQ&9=ItqsTv^9rn-lK{Uucn#Q(D|op%<6GsS4m<$n88e0kVtQ)
z7%Q?n=2*14Sau>B8;4JegHRsKELDcNlUcl)R#KBUG~_8hsl`WpM4ViN!#a;VKV4Ky
z4-+bM;WwwlF6`j;A*yvH&C5wMn&zrG3OcJgnmQAwzYo{54Z!F+)GG!^v|ANZQ3Qgp
zXCj@RT{N<BYR;Y0@N1>=$%!IJZn=kyC`=M3EWf~IkEn2XDey$mi6i3}qUJ&vCuXq3
zw&^Py87sMmbA&^^lP{hgGDKIv8PHQ!12&>8pK6<YAf?k5E{HBT7@znPkPPAA_VT8i
zSIdZpWvGh}LIDCMAxMCr0g|6!a*HbM(WnLDew0`C3l`)DYnF6y9X3pI$D0?MSD^&S
zR5U)<kE;%A!TXep*sNR>oQ=bnX(|~c2Mmv{v0mtkGkSPM%=rfUocD36-pC&AvUZ70
zX;|!gltEizPg?bG{w~QhCipW;+i_+Tm5$O}J?lG$hwXvu`r>dTDj8EE-?P#~r=(s`
zv$4B04cpN1HU&;P_1tFK8Q!Qa9Sb_Wiqq}3xl9tS-%bQE?|L>?+O!Wty~&++wu;*M
z&xsQwNPbn;?-8&K0o{^-r}p3|ZMdE|V~>?mhvb4ZAL`vFs62K>1MboChs4P-)%53I
R^zr)TNO51mA8KoA{tHnat`-0Q
new file mode 100644
--- /dev/null
+++ b/gui/languages/de-de.ts
@@ -0,0 +1,642 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="de_DE">
+<context>
+    <name>FileEditorMdiSubWindow</name>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="114"/>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="207"/>
+        <source>File Editor</source>
+        <translation>Dateieditor</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="115"/>
+        <source>Cannot read file %1:
+%2.</source>
+        <translation>Konnte Datei %1 nicht lesen:
+%2.</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="127"/>
+        <source>File loaded.</source>
+        <translation>Datei geladen.</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="153"/>
+        <source>Do you want to save the current file
+%1 ?</source>
+        <translation>Möchten Sie die Datei %1 sichern ?</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="208"/>
+        <source>Cannot write file %1:
+%2.</source>
+        <translation>Konnte Datei %1 nicht schreiben:
+%2.</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="220"/>
+        <source>File %1 saved</source>
+        <translation>Datei %1 gesichert</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="383"/>
+        <source>&amp;Close File</source>
+        <translation>&amp;Datei schließen</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="386"/>
+        <source>&amp;New File</source>
+        <translation>&amp;Neue Datei</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="389"/>
+        <source>&amp;Open File</source>
+        <translation>&amp;Öffne Datei</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="392"/>
+        <source>&amp;Save File</source>
+        <translation>&amp;Sichere Datei</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="395"/>
+        <source>Save File &amp;As</source>
+        <translation>Sichere Datei &amp;als</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="398"/>
+        <source>&amp;Undo</source>
+        <translation>&amp;Rückgängig</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="401"/>
+        <source>&amp;Redo</source>
+        <translation>&amp;Wiederholen</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="402"/>
+        <source>&amp;Copy</source>
+        <translation>&amp;Kopieren</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="403"/>
+        <source>Cu&amp;t</source>
+        <translation>&amp;Ausschneiden</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="404"/>
+        <source>&amp;Paste</source>
+        <translation>&amp;Einfügen</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="405"/>
+        <source>&amp;Next Bookmark</source>
+        <translation>&amp;Nächstes Bookmark</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="406"/>
+        <source>Pre&amp;vious Bookmark</source>
+        <translation>&amp;Voriges Bookmark</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="407"/>
+        <source>Toggle &amp;Bookmark</source>
+        <translation>&amp;Bookmark setzen</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="410"/>
+        <source>&amp;Run File</source>
+        <translation>&amp;Ausführen</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="449"/>
+        <source>&amp;File</source>
+        <translation>&amp;Datei</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="457"/>
+        <source>&amp;Edit</source>
+        <translation>&amp;Editieren</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="469"/>
+        <source>&amp;Run</source>
+        <translation>&amp;Ausführen</translation>
+    </message>
+</context>
+<context>
+    <name>FilesDockWidget</name>
+    <message>
+        <source>Current Folder</source>
+        <translation type="obsolete">Aktuelles Verzeichnis</translation>
+    </message>
+    <message>
+        <location filename="../src/FilesDockWidget.cpp" line="32"/>
+        <source>Current Directory</source>
+        <translation>Aktuelles Verzeichnis</translation>
+    </message>
+    <message>
+        <location filename="../src/FilesDockWidget.cpp" line="46"/>
+        <source>Move up one directory.</source>
+        <translation>Ein Verzeichnis höher wechseln.</translation>
+    </message>
+    <message>
+        <location filename="../src/FilesDockWidget.cpp" line="49"/>
+        <source>Enter the path or filename.</source>
+        <translation>Geben Sie einen Pfad oder Dateinamen ein.</translation>
+    </message>
+    <message>
+        <location filename="../src/FilesDockWidget.cpp" line="78"/>
+        <source>Doubleclick a file to open it.</source>
+        <translation>Führen Sie einen Doppelklick aus, um eine Datei zu öffnen.</translation>
+    </message>
+</context>
+<context>
+    <name>HistoryDockWidget</name>
+    <message>
+        <location filename="../src/HistoryDockWidget.cpp" line="36"/>
+        <source>Doubleclick a command to transfer it to the terminal.</source>
+        <translation>Führen Sie einen Doppelklick aus, um den Befehl in das Terminal zu übertragen.</translation>
+    </message>
+    <message>
+        <location filename="../src/HistoryDockWidget.cpp" line="38"/>
+        <source>Enter text to filter the command history.</source>
+        <translation>Geben Sie Text ein, um die Befehlshistorie zu filtern.</translation>
+    </message>
+    <message>
+        <location filename="../src/HistoryDockWidget.cpp" line="41"/>
+        <source>Command History</source>
+        <translation>Befehlshistorie</translation>
+    </message>
+    <message>
+        <source>History updated.</source>
+        <translation type="obsolete">Befehlshistorie aktualisiert.</translation>
+    </message>
+</context>
+<context>
+    <name>LexerOctaveGui</name>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="111"/>
+        <source>Default</source>
+        <translation>Standard</translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="113"/>
+        <source>Comment</source>
+        <translation>Kommentar</translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="115"/>
+        <source>Command</source>
+        <translation>Befehl</translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="117"/>
+        <source>Number</source>
+        <translation>Zahl</translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="119"/>
+        <source>Keyword</source>
+        <translation>Schlüsselwort</translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="121"/>
+        <source>Single-quoted string</source>
+        <translation>Zeichenkette in einfachen Hochkommata</translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="123"/>
+        <source>Operator</source>
+        <translation>Operator</translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="125"/>
+        <source>Identifier</source>
+        <translation>Bezeichner</translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="127"/>
+        <source>Double-quoted string</source>
+        <translation>Zeichenkette in doppelten Hochkommata</translation>
+    </message>
+</context>
+<context>
+    <name>MainWindow</name>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="47"/>
+        <source>Opening file.</source>
+        <translation>Öffne Datei.</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="124"/>
+        <source>Save Workspace</source>
+        <translation>Speichere Arbeitsumgebung</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="134"/>
+        <source>Load Workspace</source>
+        <translation>Lade Arbeitsumgebung</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="226"/>
+        <location filename="../src/MainWindow.cpp" line="362"/>
+        <source>About Octave</source>
+        <translation>Ãœber Octave</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="238"/>
+        <source>Saving data and shutting down.</source>
+        <translation>Speichere Daten und schließe.</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="276"/>
+        <source>View the variables in the active workspace.</source>
+        <translation>Sehen Sie die Variablen ein, die sich in der aktiven Arbeitsumgebung befinden.</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="278"/>
+        <source>Browse and search the command history.</source>
+        <translation>Durchsuchen Sie die Befehlshistorie.</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="280"/>
+        <source>Browse your files.</source>
+        <translation>Durchsuchen Sie Ihre Dateien.</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="294"/>
+        <source>Terminal</source>
+        <translation>Terminal</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="298"/>
+        <source>Enter your commands into the Octave terminal.</source>
+        <translation>Geben Sie Ihre Befehle in das Octave Terminal ein.</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="311"/>
+        <source>Browse the Octave documentation for help.</source>
+        <translation>Durchsuchen Sie die Octave Dokumentation, um Hilfe zu erhalten.</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="320"/>
+        <source>Chat</source>
+        <translation>Chat</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="323"/>
+        <source>Instantly chat with other Octave users for help.</source>
+        <translation>Tauschen Sie sich direkt mit anderen Octave Benutzern aus, um Hilfe zu erhalten.</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="330"/>
+        <source>Octave</source>
+        <translation>Octave</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="331"/>
+        <source>Settings</source>
+        <translation>Einstellungen</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="333"/>
+        <source>Exit</source>
+        <translation>Beenden</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="335"/>
+        <source>Interface</source>
+        <translation>Oberfläche</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="337"/>
+        <source>Align Windows</source>
+        <translation>Fenster ausrichten</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="339"/>
+        <location filename="../src/MainWindow.cpp" line="351"/>
+        <source>Workspace</source>
+        <translation>Arbeitsumgebung</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="342"/>
+        <source>History</source>
+        <translation>Befehlshistorie</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="345"/>
+        <source>File Browser</source>
+        <translation>Dateibrowser</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="349"/>
+        <source>Open New Editor Window</source>
+        <translation>Neues Editorfenster öffnen</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="352"/>
+        <source>Load</source>
+        <translation>Laden</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="353"/>
+        <source>Save</source>
+        <translation>Sichern</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="355"/>
+        <source>Clear</source>
+        <translation>Löschen</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="357"/>
+        <source>Community</source>
+        <translation>Gemeinschaft</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="358"/>
+        <source>Report Bug</source>
+        <translation>Fehler melden</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="359"/>
+        <source>Agora</source>
+        <translation>Agora</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="360"/>
+        <source>Octave Forge</source>
+        <translation>Octave Forge</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="363"/>
+        <source>About Qt</source>
+        <translation>Ãœber Qt</translation>
+    </message>
+    <message>
+        <source>Octave Toolbar</source>
+        <translation type="obsolete">Octave Werkzeugleiste</translation>
+    </message>
+    <message>
+        <source>Command Window</source>
+        <translation type="obsolete">Konsolenfenster</translation>
+    </message>
+    <message>
+        <source>File Editor</source>
+        <translation type="obsolete">Dateieditor</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="307"/>
+        <source>Documentation</source>
+        <translation>Dokumentation</translation>
+    </message>
+    <message>
+        <source>Service</source>
+        <translation type="obsolete">Service</translation>
+    </message>
+    <message>
+        <source>Established link to Octave.</source>
+        <translation type="obsolete">Verbindung zu Octave hergestellt.</translation>
+    </message>
+</context>
+<context>
+    <name>NumberBar</name>
+    <message>
+        <source>Stop Here</source>
+        <translation type="obsolete">Stoppe hier</translation>
+    </message>
+    <message>
+        <source>Current Line</source>
+        <translation type="obsolete">Aktuelle Zeile</translation>
+    </message>
+    <message>
+        <source>Error Line</source>
+        <translation type="obsolete">Fehlerzeile</translation>
+    </message>
+</context>
+<context>
+    <name>NumberedCodeEdit</name>
+    <message>
+        <source>This file name is not valid.</source>
+        <translation type="obsolete">Dieser Dateiname ist nicht gültig.</translation>
+    </message>
+    <message>
+        <source>Octave doesn&apos;t understand this file name:
+</source>
+        <translation type="obsolete">Octave versteht diesen Dateityp nicht:</translation>
+    </message>
+    <message>
+        <source>
+Please, change it.
+ Do you want to save your changes?</source>
+        <translation type="obsolete">Bitte ändern Sie dies. Möchten Sie Ihre Änderungen sichern?</translation>
+    </message>
+</context>
+<context>
+    <name>SettingsDialog</name>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="29"/>
+        <source>Settings</source>
+        <translation>Einstellungen</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="39"/>
+        <source>Chat</source>
+        <translation>Char</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="47"/>
+        <source>Connect to #octave on startup</source>
+        <translation>Beim Start mit #octave verbinden</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="57"/>
+        <source>Show message of the day</source>
+        <translation>Nachricht des Tages anzeigen (MOTD)</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="64"/>
+        <source>Show topic</source>
+        <translation>Thema des Chatkanals anzeigen</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="71"/>
+        <source>Automatically identify on NickServ</source>
+        <translation>Automatisch bei NickServ identifizieren</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="78"/>
+        <source>Warning: Your password will be stored in ~/.octavegui in human-readable format. Do not enter your password if you worry about security issues.</source>
+        <translation>Warnung: Ihre Passwort wird unter ~/.octave-gui in einem menschenlesbaren Format gesichert. Hinterlegen Sie nicht Ihr Password, wenn Sie Bedenken über die Sicherheit haben.</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="103"/>
+        <location filename="../src/SettingsDialog.ui" line="311"/>
+        <source>Password:</source>
+        <translation>Passwort:</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="125"/>
+        <source>Editor</source>
+        <translation>Editor</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="133"/>
+        <source>Use custom file editor:</source>
+        <translation>Benutzerdefinierten Editor verwenden:</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="143"/>
+        <source>emacs</source>
+        <translation>emacs</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="166"/>
+        <source>File Browser</source>
+        <translation>Dateibrowser</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="172"/>
+        <source>Show filenames</source>
+        <translation>Dateinamen anzeigen</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="179"/>
+        <source>Show file size</source>
+        <translation>Dateigröße anzeigen</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="186"/>
+        <source>Show file type</source>
+        <translation>Dateityp anzeigen</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="193"/>
+        <source>Show date of last modification</source>
+        <translation>Datum der letzten Änderung anzeigen</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="200"/>
+        <source>Show hidden files</source>
+        <translation>Versteckte Dateien anzeigen</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="207"/>
+        <source>Alternating row colors</source>
+        <translation>Alternierende Farben verwenden</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="215"/>
+        <source>Network</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="221"/>
+        <source>Use proxy server</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="233"/>
+        <source>Proxy Type:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="244"/>
+        <source>HttpProxy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="249"/>
+        <source>Socks5Proxy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="260"/>
+        <source>Hostname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="277"/>
+        <source>Port:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="294"/>
+        <source>Username:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="339"/>
+        <source>Reset to defaults</source>
+        <translation>Standardeinstellungen wiederherstellen</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="362"/>
+        <source>Export</source>
+        <translation>Exportieren</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="372"/>
+        <source>Import</source>
+        <translation>Importieren</translation>
+    </message>
+</context>
+<context>
+    <name>VariablesDockWidget</name>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="40"/>
+        <source>Name</source>
+        <translation>Bezeichner</translation>
+    </message>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="40"/>
+        <source>Type</source>
+        <translation>Typ</translation>
+    </message>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="40"/>
+        <source>Value</source>
+        <translation>Wert</translation>
+    </message>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="36"/>
+        <source>Workspace</source>
+        <translation>Arbeitsumgebung</translation>
+    </message>
+    <message>
+        <source>Save</source>
+        <translation type="obsolete">Sichern</translation>
+    </message>
+    <message>
+        <source>Load</source>
+        <translation type="obsolete">Laden</translation>
+    </message>
+    <message>
+        <source>Clear</source>
+        <translation type="obsolete">Löschen</translation>
+    </message>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="52"/>
+        <source>Local</source>
+        <translation>Lokal</translation>
+    </message>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="56"/>
+        <source>Global</source>
+        <translation>Global</translation>
+    </message>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="60"/>
+        <source>Persistent</source>
+        <translation>Persistent</translation>
+    </message>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="64"/>
+        <source>Hidden</source>
+        <translation>Versteckt</translation>
+    </message>
+</context>
+</TS>
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..7fbf74ee61166c382a369dbfe80f7d2796451295
GIT binary patch
literal 9411
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
XrcTSc+nDUbOn;$FZ^RpIvDp6ra)cJ@
new file mode 100644
--- /dev/null
+++ b/gui/languages/es-es.ts
@@ -0,0 +1,576 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="es_MX">
+<context>
+    <name>FileEditorMdiSubWindow</name>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="114"/>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="207"/>
+        <source>File Editor</source>
+        <translation>Editor de archivos</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="115"/>
+        <source>Cannot read file %1:
+%2.</source>
+        <translation>No se puede leer archivo %1:
+%2.</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="127"/>
+        <source>File loaded.</source>
+        <translation>Archivo cargado.</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="153"/>
+        <source>Do you want to save the current file
+%1 ?</source>
+        <translation>¿Desea guardar archivo actual
+%1 ?</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="208"/>
+        <source>Cannot write file %1:
+%2.</source>
+        <translation>No se puede escribir archivo %1:
+%2.</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="220"/>
+        <source>File %1 saved</source>
+        <translation>Archivo %1 guardado</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="383"/>
+        <source>&amp;Close File</source>
+        <translation>&amp;Cerrar archivo</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="386"/>
+        <source>&amp;New File</source>
+        <translation>Archivo &amp;nuevo</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="389"/>
+        <source>&amp;Open File</source>
+        <translation>&amp;Abrir archivo</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="392"/>
+        <source>&amp;Save File</source>
+        <translation>&amp;Guardar archivo</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="395"/>
+        <source>Save File &amp;As</source>
+        <translatorcomment>Search for proper shortcut for this command</translatorcomment>
+        <translation>Guardar archivo &amp;como</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="398"/>
+        <source>&amp;Undo</source>
+        <translation>&amp;Deshacer</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="401"/>
+        <source>&amp;Redo</source>
+        <translation>&amp;Rehacer</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="402"/>
+        <source>&amp;Copy</source>
+        <translation>&amp;Copiar</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="403"/>
+        <source>Cu&amp;t</source>
+        <translation>Cor&amp;tar</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="404"/>
+        <source>&amp;Paste</source>
+        <translation>&amp;Pegar</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="405"/>
+        <source>&amp;Next Bookmark</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="406"/>
+        <source>Pre&amp;vious Bookmark</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="407"/>
+        <source>Toggle &amp;Bookmark</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="410"/>
+        <source>&amp;Run File</source>
+        <translation>&amp;Ejecutar archivo</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="449"/>
+        <source>&amp;File</source>
+        <translation>&amp;Archivo</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="457"/>
+        <source>&amp;Edit</source>
+        <translation>&amp;Editar</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="469"/>
+        <source>&amp;Run</source>
+        <translation>&amp;Ejecutar</translation>
+    </message>
+</context>
+<context>
+    <name>FilesDockWidget</name>
+    <message>
+        <source>Current Folder</source>
+        <translation type="obsolete">Carpeta actual</translation>
+    </message>
+    <message>
+        <location filename="../src/FilesDockWidget.cpp" line="32"/>
+        <source>Current Directory</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/FilesDockWidget.cpp" line="46"/>
+        <source>Move up one directory.</source>
+        <translation>Subir un directorio.</translation>
+    </message>
+    <message>
+        <location filename="../src/FilesDockWidget.cpp" line="49"/>
+        <source>Enter the path or filename.</source>
+        <translation>Introduzca dirección o nombre de archivo.</translation>
+    </message>
+    <message>
+        <location filename="../src/FilesDockWidget.cpp" line="78"/>
+        <source>Doubleclick a file to open it.</source>
+        <translation>Haga doble clic para abir archivo.</translation>
+    </message>
+</context>
+<context>
+    <name>HistoryDockWidget</name>
+    <message>
+        <location filename="../src/HistoryDockWidget.cpp" line="36"/>
+        <source>Doubleclick a command to transfer it to the terminal.</source>
+        <translation>Haga doble clic para transferir el comando a la terminal.</translation>
+    </message>
+    <message>
+        <location filename="../src/HistoryDockWidget.cpp" line="38"/>
+        <source>Enter text to filter the command history.</source>
+        <translation>Introduzca texto para filtrar el historial de comandos.</translation>
+    </message>
+    <message>
+        <location filename="../src/HistoryDockWidget.cpp" line="41"/>
+        <source>Command History</source>
+        <translation>Historial de comandos</translation>
+    </message>
+</context>
+<context>
+    <name>LexerOctaveGui</name>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="111"/>
+        <source>Default</source>
+        <translation>Valores predeterminados</translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="113"/>
+        <source>Comment</source>
+        <translation>Comentario</translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="115"/>
+        <source>Command</source>
+        <translation>Comando</translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="117"/>
+        <source>Number</source>
+        <translation>Número</translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="119"/>
+        <source>Keyword</source>
+        <translation>Contraseña</translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="121"/>
+        <source>Single-quoted string</source>
+        <translation>Cadena entre comillas simples</translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="123"/>
+        <source>Operator</source>
+        <translation>Operador</translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="125"/>
+        <source>Identifier</source>
+        <translation>Identificador</translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="127"/>
+        <source>Double-quoted string</source>
+        <translation>Cadena entre comillas dobles</translation>
+    </message>
+</context>
+<context>
+    <name>MainWindow</name>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="47"/>
+        <source>Opening file.</source>
+        <translation>Abriendo archivo.</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="124"/>
+        <source>Save Workspace</source>
+        <translation>Guardar espacio de trabajo</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="134"/>
+        <source>Load Workspace</source>
+        <translation>Cargar espacio de trabajo</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="226"/>
+        <location filename="../src/MainWindow.cpp" line="362"/>
+        <source>About Octave</source>
+        <translation>Acerca de Octave</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="238"/>
+        <source>Saving data and shutting down.</source>
+        <translation>Guardando datos y cerrando el sistema.</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="276"/>
+        <source>View the variables in the active workspace.</source>
+        <translation>Ver variables en el espacio de trabajo activo.</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="278"/>
+        <source>Browse and search the command history.</source>
+        <translation>Navegar y buscar en el historial de comandos.</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="280"/>
+        <source>Browse your files.</source>
+        <translation>Explorar sus archivos.</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="294"/>
+        <source>Terminal</source>
+        <translation>Terminal</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="298"/>
+        <source>Enter your commands into the Octave terminal.</source>
+        <translation>Introducir su comando a la terminal de Octave.</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="307"/>
+        <source>Documentation</source>
+        <translation>Documentación</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="311"/>
+        <source>Browse the Octave documentation for help.</source>
+        <translation>Consultar la documentación de Octave para obtener ayuda.</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="320"/>
+        <source>Chat</source>
+        <translation>Chat/conversación instantanea</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="323"/>
+        <source>Instantly chat with other Octave users for help.</source>
+        <translation>Coversación instantanea con otros usuarios de octave para obtener ayuda.</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="330"/>
+        <source>Octave</source>
+        <translation>Octave</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="331"/>
+        <source>Settings</source>
+        <translation>Configuración</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="333"/>
+        <source>Exit</source>
+        <translation>Salir</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="335"/>
+        <source>Interface</source>
+        <translation>Interfase</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="337"/>
+        <source>Align Windows</source>
+        <translation>Alinear ventanas</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="339"/>
+        <location filename="../src/MainWindow.cpp" line="351"/>
+        <source>Workspace</source>
+        <translation>Espacio de trabajo</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="342"/>
+        <source>History</source>
+        <translation>Historial</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="345"/>
+        <source>File Browser</source>
+        <translation>Explorador de archivos</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="349"/>
+        <source>Open New Editor Window</source>
+        <translation>Abrir nueva ventana de editor</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="352"/>
+        <source>Load</source>
+        <translation>Cargar</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="353"/>
+        <source>Save</source>
+        <translation>Guardar</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="355"/>
+        <source>Clear</source>
+        <translation>Limpiar</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="357"/>
+        <source>Community</source>
+        <translation>Comunidad</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="358"/>
+        <source>Report Bug</source>
+        <translation>Reportar error de software/Bug</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="359"/>
+        <source>Agora</source>
+        <translation>Ãgora</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="360"/>
+        <source>Octave Forge</source>
+        <translation>Octave Forge</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="363"/>
+        <source>About Qt</source>
+        <translation>Acerca de Qt</translation>
+    </message>
+</context>
+<context>
+    <name>SettingsDialog</name>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="29"/>
+        <source>Settings</source>
+        <translation>Configuración</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="39"/>
+        <source>Chat</source>
+        <translation>Chat/conversación instantanea</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="47"/>
+        <source>Connect to #octave on startup</source>
+        <translation>Conectar a #octave en el arranque</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="57"/>
+        <source>Show message of the day</source>
+        <translation>Mostrar mensaje del día</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="64"/>
+        <source>Show topic</source>
+        <translation>Mostrar tema</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="71"/>
+        <source>Automatically identify on NickServ</source>
+        <translation>Identificar automáticamente el NickServ</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="78"/>
+        <source>Warning: Your password will be stored in ~/.octavegui in human-readable format. Do not enter your password if you worry about security issues.</source>
+        <translatorcomment>Advertencia: La contraseña se guarda en ~ / octavegui en formato legible. No introduzca su contraseña en caso de que le preocupen los aspectos de seguridad.</translatorcomment>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="103"/>
+        <location filename="../src/SettingsDialog.ui" line="311"/>
+        <source>Password:</source>
+        <translation>Contraseña:</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="125"/>
+        <source>Editor</source>
+        <translation>Editor</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="133"/>
+        <source>Use custom file editor:</source>
+        <translation>Usar editor de archivos personalizados:</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="143"/>
+        <source>emacs</source>
+        <translation>emacs</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="166"/>
+        <source>File Browser</source>
+        <translation>Explorador de archivos</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="172"/>
+        <source>Show filenames</source>
+        <translation>Mostrar nombres de archivos</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="179"/>
+        <source>Show file size</source>
+        <translation>Mostrar tamaño de archivo</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="186"/>
+        <source>Show file type</source>
+        <translation>Mostrar tipo de archivo</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="193"/>
+        <source>Show date of last modification</source>
+        <translation>Mostrar fecha de la última modificación</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="200"/>
+        <source>Show hidden files</source>
+        <translation>Mostrar archivos ocultos</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="207"/>
+        <source>Alternating row colors</source>
+        <translation>Colores alternos de filas</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="215"/>
+        <source>Network</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="221"/>
+        <source>Use proxy server</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="233"/>
+        <source>Proxy Type:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="244"/>
+        <source>HttpProxy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="249"/>
+        <source>Socks5Proxy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="260"/>
+        <source>Hostname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="277"/>
+        <source>Port:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="294"/>
+        <source>Username:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="339"/>
+        <source>Reset to defaults</source>
+        <translation>Restaurar los valores predeterminados</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="362"/>
+        <source>Export</source>
+        <translation>Exportar</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="372"/>
+        <source>Import</source>
+        <translation>Importar</translation>
+    </message>
+</context>
+<context>
+    <name>VariablesDockWidget</name>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="36"/>
+        <source>Workspace</source>
+        <translation>Espacio de trabajo</translation>
+    </message>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="40"/>
+        <source>Name</source>
+        <translation>Nombre</translation>
+    </message>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="40"/>
+        <source>Type</source>
+        <translation>Tipo</translation>
+    </message>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="40"/>
+        <source>Value</source>
+        <translation>Valor</translation>
+    </message>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="52"/>
+        <source>Local</source>
+        <translation>Local</translation>
+    </message>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="56"/>
+        <source>Global</source>
+        <translation>Global</translation>
+    </message>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="60"/>
+        <source>Persistent</source>
+        <translation>Persistente</translation>
+    </message>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="64"/>
+        <source>Hidden</source>
+        <translation>Oculto</translation>
+    </message>
+</context>
+</TS>
new file mode 100644
--- /dev/null
+++ b/gui/languages/generic.qm
@@ -0,0 +1,1 @@
+<¸dÊÍ!¿`¡½Ý
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/gui/languages/generic.ts
@@ -0,0 +1,567 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+    <name>FileEditorMdiSubWindow</name>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="114"/>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="207"/>
+        <source>File Editor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="115"/>
+        <source>Cannot read file %1:
+%2.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="127"/>
+        <source>File loaded.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="153"/>
+        <source>Do you want to save the current file
+%1 ?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="208"/>
+        <source>Cannot write file %1:
+%2.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="220"/>
+        <source>File %1 saved</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="383"/>
+        <source>&amp;Close File</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="386"/>
+        <source>&amp;New File</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="389"/>
+        <source>&amp;Open File</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="392"/>
+        <source>&amp;Save File</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="395"/>
+        <source>Save File &amp;As</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="398"/>
+        <source>&amp;Undo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="401"/>
+        <source>&amp;Redo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="402"/>
+        <source>&amp;Copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="403"/>
+        <source>Cu&amp;t</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="404"/>
+        <source>&amp;Paste</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="405"/>
+        <source>&amp;Next Bookmark</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="406"/>
+        <source>Pre&amp;vious Bookmark</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="407"/>
+        <source>Toggle &amp;Bookmark</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="410"/>
+        <source>&amp;Run File</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="449"/>
+        <source>&amp;File</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="457"/>
+        <source>&amp;Edit</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="469"/>
+        <source>&amp;Run</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>FilesDockWidget</name>
+    <message>
+        <location filename="../src/FilesDockWidget.cpp" line="32"/>
+        <source>Current Directory</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/FilesDockWidget.cpp" line="46"/>
+        <source>Move up one directory.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/FilesDockWidget.cpp" line="49"/>
+        <source>Enter the path or filename.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/FilesDockWidget.cpp" line="78"/>
+        <source>Doubleclick a file to open it.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>HistoryDockWidget</name>
+    <message>
+        <location filename="../src/HistoryDockWidget.cpp" line="36"/>
+        <source>Doubleclick a command to transfer it to the terminal.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/HistoryDockWidget.cpp" line="38"/>
+        <source>Enter text to filter the command history.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/HistoryDockWidget.cpp" line="41"/>
+        <source>Command History</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>LexerOctaveGui</name>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="111"/>
+        <source>Default</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="113"/>
+        <source>Comment</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="115"/>
+        <source>Command</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="117"/>
+        <source>Number</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="119"/>
+        <source>Keyword</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="121"/>
+        <source>Single-quoted string</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="123"/>
+        <source>Operator</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="125"/>
+        <source>Identifier</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="127"/>
+        <source>Double-quoted string</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>MainWindow</name>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="47"/>
+        <source>Opening file.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="124"/>
+        <source>Save Workspace</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="134"/>
+        <source>Load Workspace</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="226"/>
+        <location filename="../src/MainWindow.cpp" line="362"/>
+        <source>About Octave</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="238"/>
+        <source>Saving data and shutting down.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="276"/>
+        <source>View the variables in the active workspace.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="278"/>
+        <source>Browse and search the command history.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="280"/>
+        <source>Browse your files.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="294"/>
+        <source>Terminal</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="298"/>
+        <source>Enter your commands into the Octave terminal.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="307"/>
+        <source>Documentation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="311"/>
+        <source>Browse the Octave documentation for help.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="320"/>
+        <source>Chat</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="323"/>
+        <source>Instantly chat with other Octave users for help.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="330"/>
+        <source>Octave</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="331"/>
+        <source>Settings</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="333"/>
+        <source>Exit</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="335"/>
+        <source>Interface</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="337"/>
+        <source>Align Windows</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="339"/>
+        <location filename="../src/MainWindow.cpp" line="351"/>
+        <source>Workspace</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="342"/>
+        <source>History</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="345"/>
+        <source>File Browser</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="349"/>
+        <source>Open New Editor Window</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="352"/>
+        <source>Load</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="353"/>
+        <source>Save</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="355"/>
+        <source>Clear</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="357"/>
+        <source>Community</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="358"/>
+        <source>Report Bug</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="359"/>
+        <source>Agora</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="360"/>
+        <source>Octave Forge</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="363"/>
+        <source>About Qt</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>SettingsDialog</name>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="29"/>
+        <source>Settings</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="39"/>
+        <source>Chat</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="47"/>
+        <source>Connect to #octave on startup</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="57"/>
+        <source>Show message of the day</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="64"/>
+        <source>Show topic</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="71"/>
+        <source>Automatically identify on NickServ</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="78"/>
+        <source>Warning: Your password will be stored in ~/.octavegui in human-readable format. Do not enter your password if you worry about security issues.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="103"/>
+        <location filename="../src/SettingsDialog.ui" line="311"/>
+        <source>Password:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="125"/>
+        <source>Editor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="133"/>
+        <source>Use custom file editor:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="143"/>
+        <source>emacs</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="166"/>
+        <source>File Browser</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="172"/>
+        <source>Show filenames</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="179"/>
+        <source>Show file size</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="186"/>
+        <source>Show file type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="193"/>
+        <source>Show date of last modification</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="200"/>
+        <source>Show hidden files</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="207"/>
+        <source>Alternating row colors</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="215"/>
+        <source>Network</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="221"/>
+        <source>Use proxy server</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="233"/>
+        <source>Proxy Type:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="244"/>
+        <source>HttpProxy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="249"/>
+        <source>Socks5Proxy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="260"/>
+        <source>Hostname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="277"/>
+        <source>Port:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="294"/>
+        <source>Username:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="339"/>
+        <source>Reset to defaults</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="362"/>
+        <source>Export</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="372"/>
+        <source>Import</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>VariablesDockWidget</name>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="36"/>
+        <source>Workspace</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="40"/>
+        <source>Name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="40"/>
+        <source>Type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="40"/>
+        <source>Value</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="52"/>
+        <source>Local</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="56"/>
+        <source>Global</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="60"/>
+        <source>Persistent</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="64"/>
+        <source>Hidden</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+</TS>
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..83d512baa96d8ad07afa2ef66532922ed0ddcb01
GIT binary patch
literal 8860
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
new file mode 100644
--- /dev/null
+++ b/gui/languages/pt-br.ts
@@ -0,0 +1,571 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="pt_BR" sourcelanguage="en">
+<context>
+    <name>FileEditorMdiSubWindow</name>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="114"/>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="207"/>
+        <source>File Editor</source>
+        <translation>Editor de Arquivos</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="115"/>
+        <source>Cannot read file %1:
+%2.</source>
+        <translation>Não foi possível ler o arquivo %1: %2.</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="127"/>
+        <source>File loaded.</source>
+        <translation>Arquivo carregado.</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="153"/>
+        <source>Do you want to save the current file
+%1 ?</source>
+        <translation>Você deseja salvar o arquivo atual %1 ?</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="208"/>
+        <source>Cannot write file %1:
+%2.</source>
+        <translation>Não foi possível escrever no arquivo %1: %2.</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="220"/>
+        <source>File %1 saved</source>
+        <translation>Arquivo %1 salvo</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="383"/>
+        <source>&amp;Close File</source>
+        <translation>&amp;Fechar Arquivo</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="386"/>
+        <source>&amp;New File</source>
+        <translation>&amp;Novo Arquivo</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="389"/>
+        <source>&amp;Open File</source>
+        <translation>&amp;Abrir Arquivo</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="392"/>
+        <source>&amp;Save File</source>
+        <translation>&amp;Salvar Arquivo</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="395"/>
+        <source>Save File &amp;As</source>
+        <translation>Salvar Arquivo &amp;Como</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="398"/>
+        <source>&amp;Undo</source>
+        <translation>&amp;Desfazer</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="401"/>
+        <source>&amp;Redo</source>
+        <translation>&amp;Refazer</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="402"/>
+        <source>&amp;Copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="403"/>
+        <source>Cu&amp;t</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="404"/>
+        <source>&amp;Paste</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="405"/>
+        <source>&amp;Next Bookmark</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="406"/>
+        <source>Pre&amp;vious Bookmark</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="407"/>
+        <source>Toggle &amp;Bookmark</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="410"/>
+        <source>&amp;Run File</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="449"/>
+        <source>&amp;File</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="457"/>
+        <source>&amp;Edit</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="469"/>
+        <source>&amp;Run</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>FilesDockWidget</name>
+    <message>
+        <source>Current Folder</source>
+        <translation type="obsolete">Diretório Atual</translation>
+    </message>
+    <message>
+        <location filename="../src/FilesDockWidget.cpp" line="32"/>
+        <source>Current Directory</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/FilesDockWidget.cpp" line="46"/>
+        <source>Move up one directory.</source>
+        <translation>Subir um diretório.</translation>
+    </message>
+    <message>
+        <location filename="../src/FilesDockWidget.cpp" line="49"/>
+        <source>Enter the path or filename.</source>
+        <translation>Digite o caminho ou o nome do arquivo.</translation>
+    </message>
+    <message>
+        <location filename="../src/FilesDockWidget.cpp" line="78"/>
+        <source>Doubleclick a file to open it.</source>
+        <translation>Clique duas vezes num arquivo para abrí-lo.</translation>
+    </message>
+</context>
+<context>
+    <name>HistoryDockWidget</name>
+    <message>
+        <location filename="../src/HistoryDockWidget.cpp" line="36"/>
+        <source>Doubleclick a command to transfer it to the terminal.</source>
+        <translation>Clique duas vezes num comando para transferí-lo ao terminal.</translation>
+    </message>
+    <message>
+        <location filename="../src/HistoryDockWidget.cpp" line="38"/>
+        <source>Enter text to filter the command history.</source>
+        <translation>Digite um texto para filtrar o hitórico de comandos.</translation>
+    </message>
+    <message>
+        <location filename="../src/HistoryDockWidget.cpp" line="41"/>
+        <source>Command History</source>
+        <translation>Histórico de Comandos</translation>
+    </message>
+</context>
+<context>
+    <name>LexerOctaveGui</name>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="111"/>
+        <source>Default</source>
+        <translation>Padrão</translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="113"/>
+        <source>Comment</source>
+        <translation>Comentário</translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="115"/>
+        <source>Command</source>
+        <translation>Comando</translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="117"/>
+        <source>Number</source>
+        <translation>Número</translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="119"/>
+        <source>Keyword</source>
+        <translation>Palavra-Chave</translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="121"/>
+        <source>Single-quoted string</source>
+        <translation>String com aspas simples</translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="123"/>
+        <source>Operator</source>
+        <translation>Operador</translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="125"/>
+        <source>Identifier</source>
+        <translation>Identificador</translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="127"/>
+        <source>Double-quoted string</source>
+        <translation>String com aspas duplas</translation>
+    </message>
+</context>
+<context>
+    <name>MainWindow</name>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="47"/>
+        <source>Opening file.</source>
+        <translation>Abrindo arquivo.</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="124"/>
+        <source>Save Workspace</source>
+        <translation>Salvar ambiente de trabalho</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="134"/>
+        <source>Load Workspace</source>
+        <translation>Carregar ambiente de trabalho</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="226"/>
+        <location filename="../src/MainWindow.cpp" line="362"/>
+        <source>About Octave</source>
+        <translation>Sobre o Octave</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="238"/>
+        <source>Saving data and shutting down.</source>
+        <translation>Salvando dados e encerrando a sessão.</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="276"/>
+        <source>View the variables in the active workspace.</source>
+        <translation>Visualizar variáveis no ambiente de trabalho.</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="278"/>
+        <source>Browse and search the command history.</source>
+        <translation>Pesquise no histórico de comandos.</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="280"/>
+        <source>Browse your files.</source>
+        <translation>Procure seus arquivos.</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="294"/>
+        <source>Terminal</source>
+        <translation>Terminal</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="298"/>
+        <source>Enter your commands into the Octave terminal.</source>
+        <translation>Digite seus comandos no terminal do Octave.</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="307"/>
+        <source>Documentation</source>
+        <translation>Documentação</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="311"/>
+        <source>Browse the Octave documentation for help.</source>
+        <translation>Procure na documentação do Octave.</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="320"/>
+        <source>Chat</source>
+        <translation>Chat</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="323"/>
+        <source>Instantly chat with other Octave users for help.</source>
+        <translation>Converse instantaneamente com outros usuários do Octave para pedir ajuda.</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="330"/>
+        <source>Octave</source>
+        <translation>Octave</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="331"/>
+        <source>Settings</source>
+        <translation>Configurações</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="333"/>
+        <source>Exit</source>
+        <translation>Sair</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="335"/>
+        <source>Interface</source>
+        <translation>Interface</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="337"/>
+        <source>Align Windows</source>
+        <translation>Alinhar Janelas</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="339"/>
+        <location filename="../src/MainWindow.cpp" line="351"/>
+        <source>Workspace</source>
+        <translation>Ambiente de trabalho</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="342"/>
+        <source>History</source>
+        <translation>Histórico</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="345"/>
+        <source>File Browser</source>
+        <translation>Navegador de Arquivos</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="349"/>
+        <source>Open New Editor Window</source>
+        <translation>Abrir nova janela de edição</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="352"/>
+        <source>Load</source>
+        <translation>Carregar</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="353"/>
+        <source>Save</source>
+        <translation>Salvar</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="355"/>
+        <source>Clear</source>
+        <translation>Limpar</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="357"/>
+        <source>Community</source>
+        <translation>Comunidade</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="358"/>
+        <source>Report Bug</source>
+        <translation>Reportar Bug</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="359"/>
+        <source>Agora</source>
+        <translation>Agora</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="360"/>
+        <source>Octave Forge</source>
+        <translation>Octave Forge</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="363"/>
+        <source>About Qt</source>
+        <translation>Sobre o Qt</translation>
+    </message>
+</context>
+<context>
+    <name>SettingsDialog</name>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="29"/>
+        <source>Settings</source>
+        <translation>Configurações</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="39"/>
+        <source>Chat</source>
+        <translation>Chat</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="47"/>
+        <source>Connect to #octave on startup</source>
+        <translation>Conectar ao #octave ao iniciar</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="57"/>
+        <source>Show message of the day</source>
+        <translation>Mostrar mensagem do dia</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="64"/>
+        <source>Show topic</source>
+        <translation>Mostrar tópico</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="71"/>
+        <source>Automatically identify on NickServ</source>
+        <translation>Identificar-se automaticamente com o NickServ</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="78"/>
+        <source>Warning: Your password will be stored in ~/.octavegui in human-readable format. Do not enter your password if you worry about security issues.</source>
+        <translation>Aviso: Sua senha será salva em ~/.octavegui em um formato legível. Não digite sua senha se você tem problemas com segurança.</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="103"/>
+        <location filename="../src/SettingsDialog.ui" line="311"/>
+        <source>Password:</source>
+        <translation>Senha:</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="125"/>
+        <source>Editor</source>
+        <translation>Editor</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="133"/>
+        <source>Use custom file editor:</source>
+        <translation>Usar editor de arquivos personalizado:</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="143"/>
+        <source>emacs</source>
+        <translation>emacs</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="166"/>
+        <source>File Browser</source>
+        <translation>Navegador de Arquivos</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="172"/>
+        <source>Show filenames</source>
+        <translation>Mostrar nomes de arquivo</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="179"/>
+        <source>Show file size</source>
+        <translation>Mostrar tamanho do arquivo</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="186"/>
+        <source>Show file type</source>
+        <translation>Mostrar tipo do arquivo</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="193"/>
+        <source>Show date of last modification</source>
+        <translation>Mostrar data de última modificação</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="200"/>
+        <source>Show hidden files</source>
+        <translation>Mostrar arquivos ocultos</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="207"/>
+        <source>Alternating row colors</source>
+        <translation>Alternar cores das linhas</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="215"/>
+        <source>Network</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="221"/>
+        <source>Use proxy server</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="233"/>
+        <source>Proxy Type:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="244"/>
+        <source>HttpProxy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="249"/>
+        <source>Socks5Proxy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="260"/>
+        <source>Hostname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="277"/>
+        <source>Port:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="294"/>
+        <source>Username:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="339"/>
+        <source>Reset to defaults</source>
+        <translation>Resetar ao padrão</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="362"/>
+        <source>Export</source>
+        <translation>Exportar</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="372"/>
+        <source>Import</source>
+        <translation>Importar</translation>
+    </message>
+</context>
+<context>
+    <name>VariablesDockWidget</name>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="36"/>
+        <source>Workspace</source>
+        <translation>Ambiente de trabalho</translation>
+    </message>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="40"/>
+        <source>Name</source>
+        <translation>Nome</translation>
+    </message>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="40"/>
+        <source>Type</source>
+        <translation>Tipo</translation>
+    </message>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="40"/>
+        <source>Value</source>
+        <translation>Valor</translation>
+    </message>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="52"/>
+        <source>Local</source>
+        <translation>Local</translation>
+    </message>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="56"/>
+        <source>Global</source>
+        <translation>Global</translation>
+    </message>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="60"/>
+        <source>Persistent</source>
+        <translation>Persistente</translation>
+    </message>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="64"/>
+        <source>Hidden</source>
+        <translation>Oculto</translation>
+    </message>
+</context>
+</TS>
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..de3a769e3f6ba4f834ed1e7a6066bb9c0e6beeee
GIT binary patch
literal 9784
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
new file mode 100644
--- /dev/null
+++ b/gui/languages/ru-ru.ts
@@ -0,0 +1,574 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="ru_RU">
+<context>
+    <name>FileEditorMdiSubWindow</name>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="114"/>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="207"/>
+        <source>File Editor</source>
+        <translation>Редактор файлов</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="115"/>
+        <source>Cannot read file %1:
+%2.</source>
+        <translation>Ðе удалоÑÑŒ прочитать файл %1:
+%2.</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="127"/>
+        <source>File loaded.</source>
+        <translation>Файл загружен.</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="153"/>
+        <source>Do you want to save the current file
+%1 ?</source>
+        <translation>Сохранить текущий файл
+%1?</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="208"/>
+        <source>Cannot write file %1:
+%2.</source>
+        <translation>Ðе удалоÑÑŒ Ñохранить файл %1:
+%2.</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="220"/>
+        <source>File %1 saved</source>
+        <translation>Файл %1 Ñохранён</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="383"/>
+        <source>&amp;Close File</source>
+        <translation>&amp;Закрыть</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="386"/>
+        <source>&amp;New File</source>
+        <translation>Созд&amp;ать</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="389"/>
+        <source>&amp;Open File</source>
+        <translation>&amp;Открыть</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="392"/>
+        <source>&amp;Save File</source>
+        <translation>&amp;Сохранить</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="395"/>
+        <source>Save File &amp;As</source>
+        <translation>Сохранить &amp;как</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="398"/>
+        <source>&amp;Undo</source>
+        <translation>О&amp;тменить</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="401"/>
+        <source>&amp;Redo</source>
+        <translation>&amp;Повторить</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="402"/>
+        <source>&amp;Copy</source>
+        <translation>&amp;Копировать</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="403"/>
+        <source>Cu&amp;t</source>
+        <translation>Вы&amp;резать</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="404"/>
+        <source>&amp;Paste</source>
+        <translation>&amp;Ð’Ñтавить</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="405"/>
+        <source>&amp;Next Bookmark</source>
+        <translation>С&amp;Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ð·Ð°ÐºÐ»Ð°Ð´ÐºÐ°</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="406"/>
+        <source>Pre&amp;vious Bookmark</source>
+        <translation>Пр&amp;ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ð·Ð°ÐºÐ»Ð°Ð´ÐºÐ°</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="407"/>
+        <source>Toggle &amp;Bookmark</source>
+        <translation>&amp;УÑтановить/ÑнÑÑ‚ÑŒ закладку</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="410"/>
+        <source>&amp;Run File</source>
+        <translation>&amp;ЗапуÑтить файл</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="449"/>
+        <source>&amp;File</source>
+        <translation>&amp;Файл</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="457"/>
+        <source>&amp;Edit</source>
+        <translation>&amp;Правка</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="469"/>
+        <source>&amp;Run</source>
+        <translation>&amp;ЗапуÑк</translation>
+    </message>
+</context>
+<context>
+    <name>FilesDockWidget</name>
+    <message>
+        <source>Current Folder</source>
+        <translation type="obsolete">Текущий каталог</translation>
+    </message>
+    <message>
+        <location filename="../src/FilesDockWidget.cpp" line="32"/>
+        <source>Current Directory</source>
+        <translation>Текущий каталог</translation>
+    </message>
+    <message>
+        <location filename="../src/FilesDockWidget.cpp" line="46"/>
+        <source>Move up one directory.</source>
+        <translation>Перейти на уровень выше.</translation>
+    </message>
+    <message>
+        <location filename="../src/FilesDockWidget.cpp" line="49"/>
+        <source>Enter the path or filename.</source>
+        <translation>Введите путь или Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°.</translation>
+    </message>
+    <message>
+        <location filename="../src/FilesDockWidget.cpp" line="78"/>
+        <source>Doubleclick a file to open it.</source>
+        <translation>Двойной щелчок по файлу откроет его.</translation>
+    </message>
+</context>
+<context>
+    <name>HistoryDockWidget</name>
+    <message>
+        <location filename="../src/HistoryDockWidget.cpp" line="36"/>
+        <source>Doubleclick a command to transfer it to the terminal.</source>
+        <translation>Двойной щелчок по команде перенеÑÑ‘Ñ‚ её в командную Ñтроку.</translation>
+    </message>
+    <message>
+        <location filename="../src/HistoryDockWidget.cpp" line="38"/>
+        <source>Enter text to filter the command history.</source>
+        <translation>Введите текÑÑ‚ Ð´Ð»Ñ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð°Ñ†Ð¸Ð¸ выполненных команд.</translation>
+    </message>
+    <message>
+        <location filename="../src/HistoryDockWidget.cpp" line="41"/>
+        <source>Command History</source>
+        <translation>Журнал выполненных команд</translation>
+    </message>
+</context>
+<context>
+    <name>LexerOctaveGui</name>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="111"/>
+        <source>Default</source>
+        <translation>По умолчанию</translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="113"/>
+        <source>Comment</source>
+        <translation>Комментарий</translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="115"/>
+        <source>Command</source>
+        <translation>Команда</translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="117"/>
+        <source>Number</source>
+        <translation>ЧиÑло</translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="119"/>
+        <source>Keyword</source>
+        <translation>Зарезервированное Ñлово</translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="121"/>
+        <source>Single-quoted string</source>
+        <translation>Строка в одинарных кавычках</translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="123"/>
+        <source>Operator</source>
+        <translation>Оператор</translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="125"/>
+        <source>Identifier</source>
+        <translation>Идентификатор</translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="127"/>
+        <source>Double-quoted string</source>
+        <translation>Строка в двойных кавычках</translation>
+    </message>
+</context>
+<context>
+    <name>MainWindow</name>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="47"/>
+        <source>Opening file.</source>
+        <translation>ОткрываетÑÑ Ñ„Ð°Ð¹Ð».</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="124"/>
+        <source>Save Workspace</source>
+        <translation>Сохранить облаÑÑ‚ÑŒ переменных</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="134"/>
+        <source>Load Workspace</source>
+        <translation>Загрузить облаÑÑ‚ÑŒ переменных</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="226"/>
+        <location filename="../src/MainWindow.cpp" line="362"/>
+        <source>About Octave</source>
+        <translation>Об Octave</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="238"/>
+        <source>Saving data and shutting down.</source>
+        <translation>Сохранить и завершить работу.</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="276"/>
+        <source>View the variables in the active workspace.</source>
+        <translation>ПроÑмотр Ñодержимого текущей облаÑти переменных.</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="278"/>
+        <source>Browse and search the command history.</source>
+        <translation>ПроÑмотр и поиÑк в журнале выполненных команд.</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="280"/>
+        <source>Browse your files.</source>
+        <translation>ПроÑмотр файлов.</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="294"/>
+        <source>Terminal</source>
+        <translation>ÐšÐ¾Ð¼Ð°Ð½Ð´Ð½Ð°Ñ Ñтрока</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="298"/>
+        <source>Enter your commands into the Octave terminal.</source>
+        <translation>Введите команды в командной Ñтроке Octave.</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="307"/>
+        <source>Documentation</source>
+        <translation>ДокументациÑ</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="311"/>
+        <source>Browse the Octave documentation for help.</source>
+        <translation>Открыть документацию по Octave.</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="320"/>
+        <source>Chat</source>
+        <translation>Чат</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="323"/>
+        <source>Instantly chat with other Octave users for help.</source>
+        <translation>Чат Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñми Octave.</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="330"/>
+        <source>Octave</source>
+        <translation>Octave</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="331"/>
+        <source>Settings</source>
+        <translation>Параметры</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="333"/>
+        <source>Exit</source>
+        <translation>Выход</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="335"/>
+        <source>Interface</source>
+        <translation>ИнтерфейÑ</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="337"/>
+        <source>Align Windows</source>
+        <translation>ВыровнÑÑ‚ÑŒ окна</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="339"/>
+        <location filename="../src/MainWindow.cpp" line="351"/>
+        <source>Workspace</source>
+        <translation>ОблаÑÑ‚ÑŒ переменных</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="342"/>
+        <source>History</source>
+        <translation>Журнал выполненных команд</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="345"/>
+        <source>File Browser</source>
+        <translation>Файловый менеджер</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="349"/>
+        <source>Open New Editor Window</source>
+        <translation>Открыть новое окно редактора</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="352"/>
+        <source>Load</source>
+        <translation>Загрузить</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="353"/>
+        <source>Save</source>
+        <translation>Сохранить</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="355"/>
+        <source>Clear</source>
+        <translation>ОчиÑтить</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="357"/>
+        <source>Community</source>
+        <translation>СообщеÑтво</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="358"/>
+        <source>Report Bug</source>
+        <translation>Сообщить об ошибке</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="359"/>
+        <source>Agora</source>
+        <translation>Agora</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="360"/>
+        <source>Octave Forge</source>
+        <translation>Octave Forge</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="363"/>
+        <source>About Qt</source>
+        <translation>О Qt</translation>
+    </message>
+</context>
+<context>
+    <name>SettingsDialog</name>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="29"/>
+        <source>Settings</source>
+        <translation>Параметры</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="39"/>
+        <source>Chat</source>
+        <translation>Чат</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="47"/>
+        <source>Connect to #octave on startup</source>
+        <translation>ПодключитьÑÑ Ðº #octave при запуÑке</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="57"/>
+        <source>Show message of the day</source>
+        <translation>Показывать Ñовет днÑ</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="64"/>
+        <source>Show topic</source>
+        <translation>Показывать тему обÑÑƒÐ¶Ð´ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸ подключении</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="71"/>
+        <source>Automatically identify on NickServ</source>
+        <translation>ÐвтоматичеÑки идентифицироватьÑÑ Ñƒ NickServ</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="78"/>
+        <source>Warning: Your password will be stored in ~/.octavegui in human-readable format. Do not enter your password if you worry about security issues.</source>
+        <translation>Предупреждение: пароль будет Ñохранён в ~/.octavegui обычным текÑтом. Ðе вводите пароль, еÑли переживаете о возможных уÑзвимоÑÑ‚ÑÑ… в безопаÑноÑти приложениÑ.</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="103"/>
+        <location filename="../src/SettingsDialog.ui" line="311"/>
+        <source>Password:</source>
+        <translation>Пароль:</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="125"/>
+        <source>Editor</source>
+        <translation>Редактор</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="133"/>
+        <source>Use custom file editor:</source>
+        <translation>Выбрать редактор:</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="143"/>
+        <source>emacs</source>
+        <translation>emacs</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="166"/>
+        <source>File Browser</source>
+        <translation>Файловый менеджер</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="172"/>
+        <source>Show filenames</source>
+        <translation>Показывать имена файлов</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="179"/>
+        <source>Show file size</source>
+        <translation>Показывать размер файлов</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="186"/>
+        <source>Show file type</source>
+        <translation>Показывать типы файлов</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="193"/>
+        <source>Show date of last modification</source>
+        <translation>Показывать дату поÑледнего изменениÑ</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="200"/>
+        <source>Show hidden files</source>
+        <translation>Показывать Ñкрытые файлы</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="207"/>
+        <source>Alternating row colors</source>
+        <translation>ЧередующиеÑÑ Ñ†Ð²ÐµÑ‚Ð° Ñтрок</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="215"/>
+        <source>Network</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="221"/>
+        <source>Use proxy server</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="233"/>
+        <source>Proxy Type:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="244"/>
+        <source>HttpProxy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="249"/>
+        <source>Socks5Proxy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="260"/>
+        <source>Hostname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="277"/>
+        <source>Port:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="294"/>
+        <source>Username:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="339"/>
+        <source>Reset to defaults</source>
+        <translation>УÑтановить параметры по умолчанию</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="362"/>
+        <source>Export</source>
+        <translation>ЭкÑпортировать</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="372"/>
+        <source>Import</source>
+        <translation>Импортировать</translation>
+    </message>
+</context>
+<context>
+    <name>VariablesDockWidget</name>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="36"/>
+        <source>Workspace</source>
+        <translation>ОблаÑÑ‚ÑŒ переменных</translation>
+    </message>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="40"/>
+        <source>Name</source>
+        <translation>Идентификатор</translation>
+    </message>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="40"/>
+        <source>Type</source>
+        <translation>Тип</translation>
+    </message>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="40"/>
+        <source>Value</source>
+        <translation>Значение</translation>
+    </message>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="52"/>
+        <source>Local</source>
+        <translation>ЛокальнаÑ</translation>
+    </message>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="56"/>
+        <source>Global</source>
+        <translation>ГлобальнаÑ</translation>
+    </message>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="60"/>
+        <source>Persistent</source>
+        <translation>СтатичеÑкаÑ</translation>
+    </message>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="64"/>
+        <source>Hidden</source>
+        <translation>СкрытаÑ</translation>
+    </message>
+</context>
+</TS>
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..106e473c4ee5a25399cf11bc5c2f5f0a50834565
GIT binary patch
literal 9884
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
new file mode 100644
--- /dev/null
+++ b/gui/languages/uk-ua.ts
@@ -0,0 +1,574 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="uk_UA">
+<context>
+    <name>FileEditorMdiSubWindow</name>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="114"/>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="207"/>
+        <source>File Editor</source>
+        <translation>Редактор файлів</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="115"/>
+        <source>Cannot read file %1:
+%2.</source>
+        <translation>Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ файл %1:
+%2.</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="127"/>
+        <source>File loaded.</source>
+        <translation>Файл завантажено.</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="153"/>
+        <source>Do you want to save the current file
+%1 ?</source>
+        <translation>Справді зберегти поточний файл
+%1?</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="208"/>
+        <source>Cannot write file %1:
+%2.</source>
+        <translation>Ðе вдалоÑÑ Ð·Ð±ÐµÑ€ÐµÐ³Ñ‚Ð¸ файл %1:
+%2.</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="220"/>
+        <source>File %1 saved</source>
+        <translation>Файл %1 збережено</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="383"/>
+        <source>&amp;Close File</source>
+        <translation>За&amp;крити</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="386"/>
+        <source>&amp;New File</source>
+        <translation>&amp;Створити</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="389"/>
+        <source>&amp;Open File</source>
+        <translation>&amp;Відкрити</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="392"/>
+        <source>&amp;Save File</source>
+        <translation>&amp;Зберегти</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="395"/>
+        <source>Save File &amp;As</source>
+        <translation>Зберегти &amp;Ñк</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="398"/>
+        <source>&amp;Undo</source>
+        <translation>В&amp;ернути</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="401"/>
+        <source>&amp;Redo</source>
+        <translation>П&amp;овторити</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="402"/>
+        <source>&amp;Copy</source>
+        <translation>&amp;Копіювати</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="403"/>
+        <source>Cu&amp;t</source>
+        <translation>Виріза&amp;ти</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="404"/>
+        <source>&amp;Paste</source>
+        <translation>&amp;Ð’Ñтавити</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="405"/>
+        <source>&amp;Next Bookmark</source>
+        <translation>До &amp;наÑтупної закладки</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="406"/>
+        <source>Pre&amp;vious Bookmark</source>
+        <translation>До &amp;попередньої закладки</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="407"/>
+        <source>Toggle &amp;Bookmark</source>
+        <translation>Ð’&amp;Ñтановити/видалити закладку</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="410"/>
+        <source>&amp;Run File</source>
+        <translation>&amp;Виконати файл</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="449"/>
+        <source>&amp;File</source>
+        <translation>&amp;Файл</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="457"/>
+        <source>&amp;Edit</source>
+        <translation>&amp;Правка</translation>
+    </message>
+    <message>
+        <location filename="../src/FileEditorMdiSubWindow.cpp" line="469"/>
+        <source>&amp;Run</source>
+        <translation>&amp;ВиконаннÑ</translation>
+    </message>
+</context>
+<context>
+    <name>FilesDockWidget</name>
+    <message>
+        <source>Current Folder</source>
+        <translation type="obsolete">Поточний каталог</translation>
+    </message>
+    <message>
+        <location filename="../src/FilesDockWidget.cpp" line="32"/>
+        <source>Current Directory</source>
+        <translation>Поточний каталог</translation>
+    </message>
+    <message>
+        <location filename="../src/FilesDockWidget.cpp" line="46"/>
+        <source>Move up one directory.</source>
+        <translation>Перейти вгору деревом каталогів.</translation>
+    </message>
+    <message>
+        <location filename="../src/FilesDockWidget.cpp" line="49"/>
+        <source>Enter the path or filename.</source>
+        <translation>Введіть повний шлÑÑ… до файлу або назву файлу.</translation>
+    </message>
+    <message>
+        <location filename="../src/FilesDockWidget.cpp" line="78"/>
+        <source>Doubleclick a file to open it.</source>
+        <translation>Подвійне ÐºÐ»Ð°Ñ†Ð°Ð½Ð½Ñ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ” файл.</translation>
+    </message>
+</context>
+<context>
+    <name>HistoryDockWidget</name>
+    <message>
+        <location filename="../src/HistoryDockWidget.cpp" line="36"/>
+        <source>Doubleclick a command to transfer it to the terminal.</source>
+        <translation>Подвійне ÐºÐ»Ð°Ñ†Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÐ½ÐµÑе команду до командного Ñ€Ñдку.</translation>
+    </message>
+    <message>
+        <location filename="../src/HistoryDockWidget.cpp" line="38"/>
+        <source>Enter text to filter the command history.</source>
+        <translation>Введіть текÑÑ‚ Ð´Ð»Ñ Ñ„Ñ–Ð»ÑŒÑ‚Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ñ–Ñторії виконаних команд.</translation>
+    </message>
+    <message>
+        <location filename="../src/HistoryDockWidget.cpp" line="41"/>
+        <source>Command History</source>
+        <translation>ІÑÑ‚Ð¾Ñ€Ñ–Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð¸Ñ… команд</translation>
+    </message>
+</context>
+<context>
+    <name>LexerOctaveGui</name>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="111"/>
+        <source>Default</source>
+        <translation>Стандартні налаштуваннÑ</translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="113"/>
+        <source>Comment</source>
+        <translation>Коментар</translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="115"/>
+        <source>Command</source>
+        <translation>Команда</translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="117"/>
+        <source>Number</source>
+        <translation>ЧиÑло</translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="119"/>
+        <source>Keyword</source>
+        <translation>Зарезервоване Ñлово</translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="121"/>
+        <source>Single-quoted string</source>
+        <translation>РÑдок в одинарних лапках</translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="123"/>
+        <source>Operator</source>
+        <translation>Оператор</translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="125"/>
+        <source>Identifier</source>
+        <translation>Ідентифікатор</translation>
+    </message>
+    <message>
+        <location filename="../src/lexer/lexeroctavegui.cpp" line="127"/>
+        <source>Double-quoted string</source>
+        <translation>РÑдок у подвійних лапках</translation>
+    </message>
+</context>
+<context>
+    <name>MainWindow</name>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="47"/>
+        <source>Opening file.</source>
+        <translation>ВідкриваєтьÑÑ Ñ„Ð°Ð¹Ð».</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="124"/>
+        <source>Save Workspace</source>
+        <translation>Зберегти облаÑÑ‚ÑŒ змінних</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="134"/>
+        <source>Load Workspace</source>
+        <translation>Завантажити облаÑÑ‚ÑŒ змінних</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="226"/>
+        <location filename="../src/MainWindow.cpp" line="362"/>
+        <source>About Octave</source>
+        <translation>Про Octave</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="238"/>
+        <source>Saving data and shutting down.</source>
+        <translation>Зберегти дані і завершити роботу.</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="276"/>
+        <source>View the variables in the active workspace.</source>
+        <translation>ПереглÑд зміÑту поточної облаÑÑ‚Ñ– змінних.</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="278"/>
+        <source>Browse and search the command history.</source>
+        <translation>ПереглÑд Ñ– пошук Ñеред Ñ–Ñторії виконаних команд.</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="280"/>
+        <source>Browse your files.</source>
+        <translation>ПереглÑнути файли.</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="294"/>
+        <source>Terminal</source>
+        <translation>Командний Ñ€Ñдок</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="298"/>
+        <source>Enter your commands into the Octave terminal.</source>
+        <translation>Введіть команди до командного Ñ€Ñдка Octave.</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="307"/>
+        <source>Documentation</source>
+        <translation>ДокументаціÑ</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="311"/>
+        <source>Browse the Octave documentation for help.</source>
+        <translation>ПереглÑнути документацію до Octave.</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="320"/>
+        <source>Chat</source>
+        <translation>Чат</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="323"/>
+        <source>Instantly chat with other Octave users for help.</source>
+        <translation>Чат з кориÑтувачами Octave.</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="330"/>
+        <source>Octave</source>
+        <translation>Octave</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="331"/>
+        <source>Settings</source>
+        <translation>ÐалаштуваннÑ</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="333"/>
+        <source>Exit</source>
+        <translation>Вийти</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="335"/>
+        <source>Interface</source>
+        <translation>ІнтерфейÑ</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="337"/>
+        <source>Align Windows</source>
+        <translation>ВирівнÑти вікна</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="339"/>
+        <location filename="../src/MainWindow.cpp" line="351"/>
+        <source>Workspace</source>
+        <translation>ОблаÑÑ‚ÑŒ змінних</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="342"/>
+        <source>History</source>
+        <translation>ІÑÑ‚Ð¾Ñ€Ñ–Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð¸Ñ… команд</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="345"/>
+        <source>File Browser</source>
+        <translation>Файловий менеджер</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="349"/>
+        <source>Open New Editor Window</source>
+        <translation>Відкрити нове вікно редактора</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="352"/>
+        <source>Load</source>
+        <translation>Завантажити</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="353"/>
+        <source>Save</source>
+        <translation>Зберегти</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="355"/>
+        <source>Clear</source>
+        <translation>ОчиÑтити</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="357"/>
+        <source>Community</source>
+        <translation>Спільнота</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="358"/>
+        <source>Report Bug</source>
+        <translation>Повідомити про помилку</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="359"/>
+        <source>Agora</source>
+        <translation>Agora</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="360"/>
+        <source>Octave Forge</source>
+        <translation>Octave Forge</translation>
+    </message>
+    <message>
+        <location filename="../src/MainWindow.cpp" line="363"/>
+        <source>About Qt</source>
+        <translation>Про Qt</translation>
+    </message>
+</context>
+<context>
+    <name>SettingsDialog</name>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="29"/>
+        <source>Settings</source>
+        <translation>ÐалаштуваннÑ</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="39"/>
+        <source>Chat</source>
+        <translation>Чат</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="47"/>
+        <source>Connect to #octave on startup</source>
+        <translation>З&apos;єднатиÑÑ Ð· #octave при запуÑку</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="57"/>
+        <source>Show message of the day</source>
+        <translation>Показувати пораду днÑ</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="64"/>
+        <source>Show topic</source>
+        <translation>Показувати тему чату при з&apos;єднанні</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="71"/>
+        <source>Automatically identify on NickServ</source>
+        <translation>Ðвтоматично ідентифікуватиÑÑ Ð² NickServ</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="78"/>
+        <source>Warning: Your password will be stored in ~/.octavegui in human-readable format. Do not enter your password if you worry about security issues.</source>
+        <translation>ПопередженнÑ: пароль буде збережено в ~/.octavegui звичайним текÑтом. Ðе вводьте пароль, Ñкщо переймаєтеÑÑŒ потенційними проблемами із захиÑтом даних в програмі.</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="103"/>
+        <location filename="../src/SettingsDialog.ui" line="311"/>
+        <source>Password:</source>
+        <translation>Пароль:</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="125"/>
+        <source>Editor</source>
+        <translation>Редактор</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="133"/>
+        <source>Use custom file editor:</source>
+        <translation>ВикориÑтовувати інший редактор:</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="143"/>
+        <source>emacs</source>
+        <translation>emacs</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="166"/>
+        <source>File Browser</source>
+        <translation>Файловий менеджер</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="172"/>
+        <source>Show filenames</source>
+        <translation>Показувати назви файлів</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="179"/>
+        <source>Show file size</source>
+        <translation>Показувати розмір файлів</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="186"/>
+        <source>Show file type</source>
+        <translation>Показувати типи файлів</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="193"/>
+        <source>Show date of last modification</source>
+        <translation>Показувати дату оÑтанньої зміни</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="200"/>
+        <source>Show hidden files</source>
+        <translation>Показувати приховані файли</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="207"/>
+        <source>Alternating row colors</source>
+        <translation>Чергувати колір Ñ€Ñдків</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="215"/>
+        <source>Network</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="221"/>
+        <source>Use proxy server</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="233"/>
+        <source>Proxy Type:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="244"/>
+        <source>HttpProxy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="249"/>
+        <source>Socks5Proxy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="260"/>
+        <source>Hostname:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="277"/>
+        <source>Port:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="294"/>
+        <source>Username:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="339"/>
+        <source>Reset to defaults</source>
+        <translation>Ð’Ñтановити Ñтандартні налаштуваннÑ</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="362"/>
+        <source>Export</source>
+        <translation>ЕкÑпортувати</translation>
+    </message>
+    <message>
+        <location filename="../src/SettingsDialog.ui" line="372"/>
+        <source>Import</source>
+        <translation>Імпортувати</translation>
+    </message>
+</context>
+<context>
+    <name>VariablesDockWidget</name>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="36"/>
+        <source>Workspace</source>
+        <translation>ОблаÑÑ‚ÑŒ змінних</translation>
+    </message>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="40"/>
+        <source>Name</source>
+        <translation>Ідентифікатор</translation>
+    </message>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="40"/>
+        <source>Type</source>
+        <translation>Тип</translation>
+    </message>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="40"/>
+        <source>Value</source>
+        <translation>ЗначеннÑ</translation>
+    </message>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="52"/>
+        <source>Local</source>
+        <translation>Локальна</translation>
+    </message>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="56"/>
+        <source>Global</source>
+        <translation>Глобальна</translation>
+    </message>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="60"/>
+        <source>Persistent</source>
+        <translation>Статична</translation>
+    </message>
+    <message>
+        <location filename="../src/VariablesDockWidget.cpp" line="64"/>
+        <source>Hidden</source>
+        <translation>Прихована</translation>
+    </message>
+</context>
+</TS>
new file mode 100644
--- /dev/null
+++ b/gui/src/Makefile.am
@@ -0,0 +1,225 @@
+include $(top_srcdir)/build-aux/common.mk
+
+SRCDIRS = \
+  m-editor \
+  qtinfo \
+  octave-adapter \
+  ../qterminal/libqterminal/unix \
+  ../qterminal/libqterminal/win32 \
+  ../qterminal/libqterminal \
+  ../qterminal
+
+moc-%.cc: %.h
+	test -d $(@D) || mkdir -p $(@D)
+	@MOC@ -o$@ $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liboctgui_la_CPPFLAGS) $<
+
+ui-%.h: %.ui
+	@UIC@ -o $@ $<
+
+qrc-%.cc: %.qrc
+	@RCC@ -o $@ $<
+
+octave_gui_MOC = \
+  m-editor/moc-file-editor-interface.cc \
+  m-editor/moc-file-editor-tab.cc \
+  m-editor/moc-file-editor.cc \
+  m-editor/moc-find-dialog.cc \
+  m-editor/moc-lexer-octave-gui.cc \
+  moc-documentation-dockwidget.cc \
+  moc-files-dockwidget.cc \
+  moc-history-dockwidget.cc \
+  moc-main-window.cc \
+  moc-octave-qt-event-listener.cc \
+  moc-settings-dialog.cc \
+  moc-terminal-dockwidget.cc \
+  moc-welcome-wizard.cc \
+  moc-workspace-model.cc \
+  moc-workspace-view.cc \
+  octave-adapter/moc-octave-main-thread.cc \
+  qtinfo/moc-parser.cc \
+  qtinfo/moc-webinfo.cc
+
+octave_gui_UI = \
+  settings-dialog.ui \
+  welcome-wizard.ui
+
+octave_gui_UI_H = $(patsubst %.ui, ui-%.h, $(octave_gui_UI))
+
+octave_gui_RC = qrc-resource.cc
+
+octlib_LTLIBRARIES = liboctgui.la
+
+liboctgui_la_SOURCES = \
+  documentation-dockwidget.cc \
+  files-dockwidget.cc \
+  history-dockwidget.cc \
+  m-editor/file-editor-tab.cc \
+  m-editor/file-editor.cc \
+  m-editor/find-dialog.cc \
+  m-editor/lexer-octave-gui.cc \
+  main-window.cc \
+  octave-adapter/octave-event.cc \
+  octave-adapter/octave-link.cc \
+  octave-adapter/octave-main-thread.cc \
+  octave-gui.cc \
+  octave-qt-event-listener.cc \
+  qtinfo/parser.cc \
+  qtinfo/webinfo.cc \
+  resource-manager.cc \
+  settings-dialog.cc \
+  symbol-information.cc \
+  terminal-dockwidget.cc \
+  welcome-wizard.cc \
+  workspace-model.cc \
+  workspace-view.cc
+
+liboctgui_la_LIBADD = \
+  libqterminal.la \
+  -lQtCore \
+  -lQtGui \
+  -lQtNetwork \
+  -lqscintilla2
+
+nodist_liboctgui_la_SOURCES = $(octave_gui_MOC) $(octave_gui_RC)
+
+liboctgui_la_CPPFLAGS = \
+  -I@QT_INCDIR@ \
+  -I@QT_INCDIR@/QtCore \
+  -I@QT_INCDIR@/QtGui \
+  -I@QT_INCDIR@/QtNetwork \
+  -I$(srcdir)/../qterminal/libqterminal \
+  -I$(srcdir)/m-editor \
+  -I$(srcdir)/octave-adapter \
+  -I$(srcdir)/qtinfo \
+  -I$(srcdir)/../../libcruft/misc \
+  -I../../liboctave \
+  -I$(srcdir)/../../liboctave \
+  -I../../src \
+  -I../../src/interp-core \
+  -I../../src/interpfcn \
+  -I../../src/parse-tree \
+  -I$(srcdir)/../../src \
+  -I$(srcdir)/../../src/interp-core \
+  -I$(srcdir)/../../src/interpfcn \
+  -I$(srcdir)/../../src/octave-value \
+  -I$(srcdir)/../../src/operators \
+  -I$(srcdir)/../../src/parse-tree
+
+liboctgui_la_LDFLAGS = -L@QT_LIBDIR@
+
+noinst_HEADERS = \
+  documentation-dockwidget.h \
+  files-dockwidget.h \
+  history-dockwidget.h \
+  m-editor/file-editor-interface.h \
+  m-editor/file-editor-tab.h \
+  m-editor/file-editor.h \
+  m-editor/find-dialog.h \
+  m-editor/lexer-octave-gui.h \
+  main-window.h \
+  octave-adapter/octave-event-listener.h \
+  octave-adapter/octave-event-observer.h \
+  octave-adapter/octave-event.h \
+  octave-adapter/octave-link.h \
+  octave-adapter/octave-main-thread.h \
+  octave-qt-event-listener.h \
+  qtinfo/parser.h \
+  qtinfo/webinfo.h \
+  resource-manager.h \
+  settings-dialog.h \
+  symbol-information.h \
+  terminal-dockwidget.h \
+  welcome-wizard.h \
+  workspace-model.h \
+  workspace-view.h
+
+CLEANFILES = $(octave_gui_MOC) $(octave_gui_UI_H) $(octave_gui_RC)
+
+clean-local:
+	-if test "$(srcdir)" != "."; then \
+		for d in $(SRCDIRS); do test -d $$d && rmdir $$d; done \
+	 fi
+
+BUILT_SOURCES = $(octave_gui_UI_H)
+
+EXTRA_DIST = $(octave_gui_UI) resource.qrc
+
+noinst_LTLIBRARIES = libqterminal.la
+
+noinst_HEADERS += ../qterminal/libqterminal/QTerminal.h \
+		  ../qterminal/libqterminal/QTerminalInterface.h \
+		  ../qterminal/libqterminal/win32/QTerminalColors.h \
+		  ../qterminal/libqterminal/win32/QWinTerminalImpl.h \
+		  ../qterminal/libqterminal/unix/BlockArray.h \
+		  ../qterminal/libqterminal/unix/Character.h \
+		  ../qterminal/libqterminal/unix/CharacterColor.h \
+		  ../qterminal/libqterminal/unix/Emulation.h \
+		  ../qterminal/libqterminal/unix/ExtendedDefaultTranslator.h \
+		  ../qterminal/libqterminal/unix/Filter.h \
+		  ../qterminal/libqterminal/unix/History.h \
+		  ../qterminal/libqterminal/unix/KeyboardTranslator.h \
+		  ../qterminal/libqterminal/unix/konsole_wcwidth.h \
+		  ../qterminal/libqterminal/unix/kpty.h \
+		  ../qterminal/libqterminal/unix/kpty_p.h \
+		  ../qterminal/libqterminal/unix/LineFont.h \
+		  ../qterminal/libqterminal/unix/QUnixTerminalImpl.h \
+		  ../qterminal/libqterminal/unix/Screen.h \
+		  ../qterminal/libqterminal/unix/ScreenWindow.h \
+		  ../qterminal/libqterminal/unix/TerminalCharacterDecoder.h \
+		  ../qterminal/libqterminal/unix/Vt102Emulation.h \
+		  ../qterminal/libqterminal/unix/SelfListener.h \
+		  ../qterminal/libqterminal/unix/TerminalModel.h \
+		  ../qterminal/libqterminal/unix/TerminalView.h
+
+libqterminal_la_CPPFLAGS = $(DEFS)  \
+			   -I@QT_INCDIR@ \
+			   -I@QT_INCDIR@/QtCore \
+			   -I@QT_INCDIR@/QtGui \
+			   -I$(srcdir)/../qterminal/libqterminal
+
+libqterminal_la_MOC = \
+  ../qterminal/libqterminal/moc-QTerminal.cc \
+  ../qterminal/libqterminal/moc-QTerminalInterface.cc
+
+nodist_libqterminal_la_SOURCES = $(libqterminal_la_MOC)
+
+if WIN32_TERMINAL
+
+libqterminal_la_SOURCES = \
+  ../qterminal/libqterminal/win32/QTerminalColors.cpp \
+  ../qterminal/libqterminal/win32/QWinTerminalImpl.cpp
+
+libqterminal_la_MOC += ../qterminal/libqterminal/win32/moc-QWinTerminalImpl.cc
+
+else
+
+libqterminal_la_SOURCES = \
+  ../qterminal/libqterminal/unix/BlockArray.cpp \
+  ../qterminal/libqterminal/unix/Emulation.cpp \
+  ../qterminal/libqterminal/unix/Filter.cpp \
+  ../qterminal/libqterminal/unix/History.cpp \
+  ../qterminal/libqterminal/unix/KeyboardTranslator.cpp \
+  ../qterminal/libqterminal/unix/konsole_wcwidth.cpp \
+  ../qterminal/libqterminal/unix/kpty.cpp \
+  ../qterminal/libqterminal/unix/QUnixTerminalImpl.cpp \
+  ../qterminal/libqterminal/unix/Screen.cpp \
+  ../qterminal/libqterminal/unix/ScreenWindow.cpp \
+  ../qterminal/libqterminal/unix/TerminalCharacterDecoder.cpp \
+  ../qterminal/libqterminal/unix/Vt102Emulation.cpp \
+  ../qterminal/libqterminal/unix/SelfListener.cpp \
+  ../qterminal/libqterminal/unix/TerminalModel.cpp \
+  ../qterminal/libqterminal/unix/TerminalView.cpp
+
+libqterminal_la_MOC += \
+  ../qterminal/libqterminal/unix/moc-Emulation.cc \
+  ../qterminal/libqterminal/unix/moc-Filter.cc \
+  ../qterminal/libqterminal/unix/moc-QUnixTerminalImpl.cc \
+  ../qterminal/libqterminal/unix/moc-ScreenWindow.cc \
+  ../qterminal/libqterminal/unix/moc-SelfListener.cc \
+  ../qterminal/libqterminal/unix/moc-TerminalModel.cc \
+  ../qterminal/libqterminal/unix/moc-TerminalView.cc \
+  ../qterminal/libqterminal/unix/moc-Vt102Emulation.cc
+
+endif
+
+CLEANFILES += $(libqterminal_la_MOC)
new file mode 100644
--- /dev/null
+++ b/gui/src/documentation-dockwidget.cc
@@ -0,0 +1,45 @@
+/* OctaveGUI - A graphical user interface for Octave
+ * Copyright (C) 2011 Jacob Dawid (jacob.dawid@googlemail.com)
+ *
+ * This program 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.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "documentation-dockwidget.h"
+
+documentation_dock_widget::documentation_dock_widget (QWidget *parent)
+  : QDockWidget (parent)
+{
+  setObjectName ("DocumentationDockWidget");
+  setWindowTitle (tr ("Documentation"));
+
+  connect (this, SIGNAL (visibilityChanged (bool)),
+           this, SLOT (handle_visibility_changed (bool)));
+
+  _webinfo = new webinfo (this);
+  setWidget (_webinfo);
+}
+
+void
+documentation_dock_widget::handle_visibility_changed (bool visible)
+{
+  if (visible)
+    emit active_changed (true);
+}
+
+void
+documentation_dock_widget::closeEvent (QCloseEvent *event)
+{
+  emit active_changed (false);
+  QDockWidget::closeEvent (event);
+}
new file mode 100644
--- /dev/null
+++ b/gui/src/documentation-dockwidget.h
@@ -0,0 +1,46 @@
+/* OctaveGUI - A graphical user interface for Octave
+ * Copyright (C) 2011 Jacob Dawid (jacob.dawid@googlemail.com)
+ *
+ * This program 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.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef DOCUMENTATIONDOCKWIDGET_H
+#define DOCUMENTATIONDOCKWIDGET_H
+
+#include <QObject>
+#include <QDockWidget>
+#include "webinfo.h"
+
+class documentation_dock_widget : public QDockWidget
+{
+  Q_OBJECT
+public:
+  documentation_dock_widget (QWidget *parent = 0);
+
+public slots:
+  /** Slot to steer changing visibility from outside. */
+  void handle_visibility_changed (bool visible);
+
+signals:
+  /** Custom signal that tells if a user has clicked away that dock widget. */
+  void active_changed (bool active);
+
+protected:
+  void closeEvent (QCloseEvent *event);
+
+private:
+  webinfo *_webinfo;
+};
+
+#endif // DOCUMENTATIONDOCKWIDGET_H
new file mode 100644
--- /dev/null
+++ b/gui/src/files-dockwidget.cc
@@ -0,0 +1,188 @@
+/* OctaveGUI - A graphical user interface for Octave
+ * Copyright (C) 2011 Jacob Dawid (jacob.dawid@googlemail.com)
+ *
+ * This program 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.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "resource-manager.h"
+#include "files-dockwidget.h"
+
+#include <QApplication>
+#include <QFileInfo>
+#include <QCompleter>
+#include <QSettings>
+#include <QProcess>
+#include <QDebug>
+
+files_dock_widget::files_dock_widget (QWidget *parent)
+  : QDockWidget (parent)
+{
+  setObjectName ("FilesDockWidget");
+  setWindowTitle (tr ("Current Directory"));
+  setWidget (new QWidget (this));
+
+  // Create a toolbar
+  _navigation_tool_bar = new QToolBar ("", widget ());
+  _navigation_tool_bar->setAllowedAreas (Qt::TopToolBarArea);
+  _navigation_tool_bar->setMovable (false);
+  _navigation_tool_bar->setIconSize (QSize (20, 20));
+
+  _directory_icon = QIcon(":/actions/icons/up.png");
+  _directory_up_action = new QAction (_directory_icon, "", _navigation_tool_bar);
+  _directory_up_action->setStatusTip (tr ("Move up one directory."));
+
+  _last_current_directory = "";
+  _current_directory = new QLineEdit (_navigation_tool_bar);
+  _current_directory->setStatusTip (tr ("Enter the path or filename."));
+
+  _navigation_tool_bar->addAction (_directory_up_action);
+  _navigation_tool_bar->addWidget (_current_directory);
+  connect (_directory_up_action, SIGNAL (triggered ()), this,
+           SLOT (do_up_directory ()));
+
+  // TODO: Add other buttons for creating directories
+
+  // Create the QFileSystemModel starting in the home directory
+  QString homePath = QDir::homePath ();
+
+  _file_system_model = new QFileSystemModel (this);
+  _file_system_model->setFilter (QDir::NoDotAndDotDot | QDir::AllEntries);
+  QModelIndex rootPathIndex = _file_system_model->setRootPath (homePath);
+
+  // Attach the model to the QTreeView and set the root index
+  _file_tree_view = new QTreeView (widget ());
+  _file_tree_view->setModel (_file_system_model);
+  _file_tree_view->setRootIndex (rootPathIndex);
+  _file_tree_view->setSortingEnabled (true);
+  _file_tree_view->setAlternatingRowColors (true);
+  _file_tree_view->setAnimated (true);
+  _file_tree_view->setColumnHidden (1, true);
+  _file_tree_view->setColumnHidden (2, true);
+  _file_tree_view->setColumnHidden (3, true);
+  _file_tree_view->setStatusTip (tr ("Doubleclick a file to open it."));
+
+  _current_directory->setText(_file_system_model->fileInfo (rootPathIndex).
+                       absoluteFilePath ());
+
+  connect (_file_tree_view, SIGNAL (doubleClicked (const QModelIndex &)), this,
+           SLOT (item_double_clicked (const QModelIndex &)));
+
+  // Layout the widgets vertically with the toolbar on top
+  QVBoxLayout *
+    layout = new QVBoxLayout ();
+  layout->setSpacing (0);
+  layout->addWidget (_navigation_tool_bar);
+  layout->addWidget (_file_tree_view);
+  layout->setMargin (1);
+  widget ()->setLayout (layout);
+  // TODO: Add right-click contextual menus for copying, pasting, deleting files (and others)
+
+  connect (_current_directory, SIGNAL (returnPressed ()),
+           this, SLOT (handle_directory_entered ()));
+
+  QCompleter *
+    completer = new QCompleter (_file_system_model, this);
+  _current_directory->setCompleter (completer);
+
+  connect (this, SIGNAL (visibilityChanged (bool)),
+           this, SLOT (handle_visibility_changed (bool)));
+
+  setFocusProxy (_current_directory);
+}
+
+void
+files_dock_widget::item_double_clicked (const QModelIndex & index)
+{
+  // Retrieve the file info associated with the model index.
+  QFileInfo fileInfo = _file_system_model->fileInfo (index);
+  display_directory (fileInfo.absoluteFilePath ());
+}
+
+void
+files_dock_widget::set_current_directory (QString currentDirectory)
+{
+  display_directory (currentDirectory);
+}
+
+void
+files_dock_widget::handle_directory_entered ()
+{
+  display_directory (_current_directory->text ());
+}
+
+void
+files_dock_widget::do_up_directory ()
+{
+  QDir dir = QDir (_file_system_model->filePath (_file_tree_view->rootIndex ()));
+  dir.cdUp ();
+  display_directory (dir.absolutePath ());
+}
+
+void
+files_dock_widget::display_directory (QString directory)
+{
+  QFileInfo fileInfo (directory);
+  if (fileInfo.exists ())
+    {
+      if (fileInfo.isDir ())
+        {
+          _file_tree_view->setRootIndex (_file_system_model->
+                                        index (fileInfo.absoluteFilePath ()));
+          _file_system_model->setRootPath (fileInfo.absoluteFilePath ());
+          _current_directory->setText (fileInfo.absoluteFilePath ());
+
+          if (_last_current_directory != fileInfo.absoluteFilePath ())
+            {
+              emit displayed_directory_changed (fileInfo.absoluteFilePath ());
+            }
+
+          _last_current_directory = fileInfo.absoluteFilePath ();
+        }
+      else
+        {
+          if (QFile::exists (fileInfo.absoluteFilePath ()))
+            emit open_file (fileInfo.absoluteFilePath ());
+        }
+    }
+}
+
+void
+files_dock_widget::notice_settings ()
+{
+  QSettings *settings = resource_manager::get_settings ();
+
+  // FIXME -- what should happen if settings is 0?
+
+  _file_tree_view->setColumnHidden (0, !settings->value ("showFilenames").toBool ());
+  _file_tree_view->setColumnHidden (1, !settings->value ("showFileSize").toBool ());
+  _file_tree_view->setColumnHidden (2, !settings->value ("showFileType").toBool ());
+  _file_tree_view->setColumnHidden (3, !settings->value ("showLastModified").toBool ());
+  _file_tree_view->setAlternatingRowColors (settings->value ("useAlternatingRowColors").toBool ());
+  //if (settings.value ("showHiddenFiles").toBool ())
+  // TODO: React on option for hidden files.
+}
+
+void
+files_dock_widget::handle_visibility_changed (bool visible)
+{
+  if (visible)
+    emit active_changed (true);
+}
+
+void
+files_dock_widget::closeEvent (QCloseEvent *event)
+{
+  emit active_changed (false);
+  QDockWidget::closeEvent (event);
+}
new file mode 100644
--- /dev/null
+++ b/gui/src/files-dockwidget.h
@@ -0,0 +1,102 @@
+/* OctaveGUI - A graphical user interface for Octave
+ * Copyright (C) 2011 Jacob Dawid (jacob.dawid@googlemail.com)
+ *
+ * This program 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.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef FILESDOCKWIDGET_H
+#define FILESDOCKWIDGET_H
+
+#include <QListView>
+#include <QDate>
+#include <QObject>
+#include <QWidget>
+#include <QListWidget>
+#include <QFileSystemModel>
+#include <QToolBar>
+#include <QToolButton>
+#include <QVBoxLayout>
+#include <QAction>
+#include <QTreeView>
+
+#include <QDockWidget>
+#include <QLineEdit>
+
+/**
+  \class files_dock_widget
+  \brief Dock widget to display files in the current directory.
+  */
+class files_dock_widget : public QDockWidget
+{
+  Q_OBJECT
+public:
+  /** Constructs a new files_dock_widget. */
+  files_dock_widget (QWidget *parent = 0);
+
+public slots:
+  /** Slot for handling a change in directory via double click. */
+  void item_double_clicked (const QModelIndex & index);
+
+  /** Slot for handling the up-directory button in the toolbar. */
+  void do_up_directory ();
+
+  /** Sets the current directory being displayed. */
+  void set_current_directory (QString currentDirectory);
+
+  /** Accepts user input a the line edit for the current directory. */
+  void handle_directory_entered ();
+
+  void display_directory (QString directory);
+
+  /** Tells the widget to react on changed settings. */
+  void notice_settings ();
+
+  /** Slot to steer changing visibility from outside. */
+  void handle_visibility_changed (bool visible);
+
+signals:
+  /** Emitted, whenever the user requested to open a file. */
+  void open_file (QString fileName);
+
+  /** Emitted, whenever the currently displayed directory changed. */
+  void displayed_directory_changed (QString directory);
+
+  /** Custom signal that tells if a user has clicke away that dock widget. */
+  void active_changed (bool active);
+
+protected:
+  void closeEvent (QCloseEvent *event);
+
+private:
+  // TODO: Add toolbar with buttons for navigating the path, creating dirs, etc
+
+  QString           _last_current_directory;
+
+  /** Toolbar for file and directory manipulation. */
+  QToolBar *        _navigation_tool_bar;
+
+  /** Variables for the up-directory action. */
+  QIcon             _directory_icon;
+  QAction *         _directory_up_action;
+  QToolButton *     _up_directory_button;
+
+  /** The file system model. */
+  QFileSystemModel *_file_system_model;
+
+  /** The file system view. */
+  QTreeView *       _file_tree_view;
+  QLineEdit *       _current_directory;
+};
+
+#endif // FILESDOCKWIDGET_H
new file mode 100644
--- /dev/null
+++ b/gui/src/history-dockwidget.cc
@@ -0,0 +1,151 @@
+/* OctaveGUI - A graphical user interface for Octave
+ * Copyright (C) 2011 Jacob Dawid (jacob.dawid@googlemail.com)
+ *
+ * This program 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.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <QVBoxLayout>
+
+#include "cmd-hist.h"
+
+#include "history-dockwidget.h"
+
+history_dock_widget::history_dock_widget (QWidget * parent)
+  : QDockWidget (parent), octave_event_observer ()
+{
+  setObjectName ("HistoryDockWidget");
+  construct ();
+}
+
+void
+history_dock_widget::event_accepted (octave_event *e)
+{
+  if (dynamic_cast <octave_update_history_event*> (e))
+    {
+      // Determine the client's (our) history length and the one of the server.
+      int clientHistoryLength = _history_model->rowCount ();
+      int serverHistoryLength = command_history::length ();
+
+      // If were behind the server, iterate through all new entries and add
+      // them to our history.
+      if (clientHistoryLength < serverHistoryLength)
+        {
+          for (int i = clientHistoryLength; i < serverHistoryLength; i++)
+            {
+              _history_model->insertRow (0);
+              _history_model->setData (_history_model->index (0),
+                QString (command_history::get_entry (i).c_str ()));
+            }
+        }
+    }
+
+  // Post a new update event in a given time. This prevents flooding the
+  // event queue.
+  _update_history_model_timer.start ();
+  delete e;
+}
+
+void
+history_dock_widget::event_reject (octave_event *e)
+{
+  delete e;
+}
+
+void
+history_dock_widget::construct ()
+{
+  _history_model = new QStringListModel ();
+  _sort_filter_proxy_model.setSourceModel (_history_model);
+  _history_list_view = new QListView (this);
+  _history_list_view->setModel (&_sort_filter_proxy_model);
+  _history_list_view->setAlternatingRowColors (true);
+  _history_list_view->setEditTriggers (QAbstractItemView::NoEditTriggers);
+  _history_list_view->setStatusTip (tr ("Doubleclick a command to transfer it to the terminal."));
+  _filter_line_edit = new QLineEdit (this);
+  _filter_line_edit->setStatusTip (tr ("Enter text to filter the command history."));
+  QVBoxLayout *layout = new QVBoxLayout ();
+
+  setWindowTitle (tr ("Command History"));
+  setWidget (new QWidget ());
+
+  layout->addWidget (_history_list_view);
+  layout->addWidget (_filter_line_edit);
+  layout->setMargin (2);
+
+  widget ()->setLayout (layout);
+
+  connect (_filter_line_edit,
+           SIGNAL (textEdited (QString)),
+           &_sort_filter_proxy_model,
+           SLOT (setFilterWildcard (QString)));
+
+  connect (_history_list_view,
+           SIGNAL (doubleClicked (QModelIndex)),
+           this,
+           SLOT (handle_double_click (QModelIndex)));
+
+  connect (this,
+           SIGNAL (visibilityChanged (bool)),
+           this,
+           SLOT (handle_visibility_changed (bool)));
+
+  _update_history_model_timer.setInterval (200);
+  _update_history_model_timer.setSingleShot (true);
+
+  connect (&_update_history_model_timer,
+           SIGNAL (timeout ()),
+           this,
+           SLOT (request_history_model_update ()));
+
+  _update_history_model_timer.start ();
+
+  setFocusProxy (_filter_line_edit);
+}
+
+void
+history_dock_widget::handle_double_click (QModelIndex modelIndex)
+{
+  emit command_double_clicked (modelIndex.data().toString());
+}
+
+void
+history_dock_widget::handle_visibility_changed (bool visible)
+{
+  if (visible)
+    emit active_changed (true);
+}
+
+void
+history_dock_widget::request_history_model_update ()
+{
+  octave_link::instance ()
+      ->post_event (new octave_update_history_event (*this));
+}
+
+void
+history_dock_widget::reset_model ()
+{
+  _history_model->setStringList (QStringList ());
+}
+
+void
+history_dock_widget::closeEvent (QCloseEvent *event)
+{
+  emit active_changed (false);
+  QDockWidget::closeEvent (event);
+}
new file mode 100644
--- /dev/null
+++ b/gui/src/history-dockwidget.h
@@ -0,0 +1,70 @@
+/* OctaveGUI - A graphical user interface for Octave
+ * Copyright (C) 2011 Jacob Dawid (jacob.dawid@googlemail.com)
+ *
+ * This program 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.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef HISTORYDOCKWIDGET_H
+#define HISTORYDOCKWIDGET_H
+
+#include <QDockWidget>
+#include <QLineEdit>
+#include <QListView>
+#include <QSortFilterProxyModel>
+#include <QStringListModel>
+#include <QTimer>
+
+#include "octave-link.h"
+#include "octave-event-observer.h"
+
+class history_dock_widget : public QDockWidget, public octave_event_observer
+{
+Q_OBJECT
+public:
+  history_dock_widget (QWidget *parent = 0);
+
+  void event_accepted (octave_event *e);
+  void event_reject (octave_event *e);
+
+public slots:
+  void handle_visibility_changed (bool visible);
+  void request_history_model_update ();
+  void reset_model ();
+
+signals:
+  void information (QString message);
+
+  /** Emitted, whenever the user double-clicked a command in the history. */
+  void command_double_clicked (QString command);
+
+  /** Custom signal that tells if a user has clicked away that dock widget. */
+  void active_changed (bool active);
+protected:
+  void closeEvent (QCloseEvent *event);
+private slots:
+  void handle_double_click (QModelIndex modelIndex);
+
+private:
+  void construct ();
+  QListView *_history_list_view;
+  QLineEdit *_filter_line_edit;
+  QSortFilterProxyModel _sort_filter_proxy_model;
+
+  /** Stores the current history_model. */
+  QStringListModel *_history_model;
+
+  QTimer _update_history_model_timer;
+};
+
+#endif // HISTORYDOCKWIDGET_H
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..5587ddee1c2a3b144104b36b6165d7f571ae4136
GIT binary patch
literal 3324
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
GLSTZIU@G4L
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..814f916b5aab5d9474f3e857e982b123ac673b0c
GIT binary patch
literal 1382
zc$@)d1)2JZP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F8000FoNkl<ZScSco
zS!^BE8OML$cV@1ASC4IC;s(dbO&sjR1OlNIFO>=;0)!9`NC-jFsu)2qWl;-MVw0%U
zKJ}%PLd6q2@xmgW*g+@(9F{E2B_u?|S$v)AB{X*I+?hKwhlgv6I`}%SaX8W^of(bh
z|2x04%!sv?v)g6&y!LEsa=gcv?C}qdWN)&sTwD0jLyOdOwwnk0iyONxy(;myd#=gX
zC(QQx+dkOxvjUVu%d>9{aJV$dy_=SKbw*xF-SOe`nXMlse-;2^gh-&T7;xJyYq)W9
z9<kgVS$1ZBw|(7t2M`flRrYI=-U57;U(SZ>*3y)5y2B{`IQ#n@J?9kw0a2kG!HF`A
zOv2#u7V<Z3puH`Z3&ZGzOwY$JWbgVUdtLxU6jV_W904N`25_V<Np906tiR$SjI}+n
zwSBp}KkZ(00EB9)$c$SW!C+*VxIEAL-*n)m+^#UPeYtIY+ZGu>P@~n<vzoCmR))d0
z7V_7xqpdZQiX!{3T<^{o8}9qeTO<HL1+2ve7F&sClvE;uiHLra!uxe6UEM86%+}cQ
zNyGi0U$zJUf~aC+OB_^YEgMu|qRg=g%Vb9z-M?xhn{qm%m_F~pFYo)w05}R!jP=9X
z6@;iC@ZT|?VuMHf#&(uokW56eea3re*UOE6+}*Sw0GTpCY_a7E)}On?ui%fD>8}`a
zYnPE<;el{#3_BVh-t)@^7yyi5qnOyQ5c}ad%laXl2{?YLLV1ZtM@KXD3DX(I?C>7h
z`-fTp&g=k!sDap4UmnME4dO>5I$4IvL>;R-niw1ycZSC*|7d#bKUa&&ouhy0J~<Bq
z0*+wg`5XA(a-xt#6c8xfyLl;(UU?yvg5F%-FT1=43csC)0Z?Oz#?KHOJ57urB2(vr
zRJZ6<U#9y~ea3Z!Y}(M6P+A;A;JX|<9pYvTf!dNdcJ$l;Dp(`cMHoa_z^YacMwuCC
zr>;eXx`fi0G<YdXd!qrA=Rf+6p;C#=nwEdoTmCfi)LQ?X0D>T*7)MdpU=c*8MlU}Y
zn6{#-Wa<?!V`$DA+M8TTW0svqeI}0{n9R0ayk+Fci(j2BtL7A71TlgbQ?-4T>S+_M
zBjl0>FJox+3@sU#J;jiHyY^wC;6QR^_jMyrtm&UMr=|g&ItR467-6RV>3Oen4UHMa
zODQXwUBK|}p@5-p_S^KzuD=u8$44Gt?a!7mw}I&qtNvg>v^ot^osLYs!AmI@WDUz3
zU5aCtF9v)j`}dztuk6|~{OA1Za|O>0pj!PFs349`t%+*5V}xwd;H8z;hN|-2gArft
z-iL<%*QwR(Hw{0s^7wqhYXeOG56mzi)VV@KTJchbe6vGr4exwgVdP-JW>$6mmDoN#
z^ze#czTve20JOTt#R!6su2&jT%95<1z0u|9Da-B?70Tc4JC$C&ZtKuP%is8ag69TM
zL5zY?jBCi&D_&apMb6Naa@kdiICQv(9Uc5SwdT^ROAodUE+o7rfJjxpI!ZR<;H8yS
zO%9PYyni%g^gsc}G5@aX+|XOPe_6E9@R|S?Ax7wINpN#ll4GYrJ}bo(Mnn8>_MXgi
ztiSz4Z|j>sC3sE%QBX%2A5b=4n4~avhA$2tMuv-p)Y{88o!GW?!OG_eAZQ@G{a#4_
zp$Ybu_gKe~=e~R9hTg>ro)f^v!kHt=Dq|ROjt{z>>+TroS@Qm3ht~vfa;@7d1I5+D
ob;W-7qAPD4>1kdx<!86=0e?S5N-cB<^Z)<=07*qoM6N<$f{US}pa1{>
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..5e761587198608815a4625f26923e4c2c59d5ed1
GIT binary patch
literal 690
zc$@*U0!{siP)<h;3K|Lk000e1NJLTq000mG000jN1^@s6?Q>5r00004XF*Lt006JZ
zHwB960000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!L`g(JRCwBA
zV88=DRWZzeU(PTepBjJwV#Fo!p^`y>iJ$%c@81jzzux>*l$^-$0h>C20Aj*r!2kaY
z1+2RA0&IF(0)PK76yQ<^5I{H$U|?g4XLHbF;Br!C_{Yi=k4qUq0AV%YZ5cxXv#PWL
zBj;lVM()Q99O?=RPntv<{{7o6fUXuGfEfREG0gw_k3r!t(64_v*&P0H^D}_h+!2-x
z%pxzrivGNmV|YH}0K?zE3=H32d}Lr?=lJmP{-+B-uRQ<=AjZF)4D<h~swXfzSpX&8
zLCt-N!@(jz%+B!l=^uuBvraO+Jojz^KmdVb;d=u^!9PCcevS}*21e#@xZ~^(BTzE~
z!<A{b7(T!JTWGhNVFEw^!K3kg1w#UZ0LOf8D?SDm5e`hvKbaW5-U8aZ`5D8f*Z&f2
zcQPyh2?GQWN;-HyS+d~wo0t6}?!s6NxW4EO!-wa81Fd&3Y=8*^1P}{Kh)Sypuzr2T
z!0_=WMBpD%JOKlcos*H_-#^p@1rR_e2K;*Z$exoGlnj3XF(bpTkN<(u@t=WB80b(S
z;${a1!yg6*po#-9JpciOV!+=|Ume&v|1<o({hQ(WlYb0v-~PYw2N<OSLW~9qI!p`#
zyg)U780?Yt00a;`A%POfucvPrKHUDtaQnvJ4<FwDPc&T1U}(CD!SL0K|B0t|{r&Lt
z_Fs^X43G@~2q1VM-cDpt0Q&DfFcCEZ=?OY3Q2n~kfdQN+fL^EvCOk!-Qw$G4;s5~#
Y0GrXxbc~n>*8l(j07*qoM6N<$f~cq`1poj5
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..122ea66f099371b3272cae63812cdac415557c46
GIT binary patch
literal 1173
zc$@*11Zw+<P)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800001b5ch_0Itp)
z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FZT01FZU(%pXi00007bV*G`2iyn*
z5gr0Dkv-M`00b3DL_t(o!_AgmXj^3%$A53m$#=4zHC<P$)v9eA&g!<_y1Mnk3!zdS
zf@p`RV0SS@@4Qgb;gv#nRm2XVV|XJd2$o(+Tt#r!b?aab+r+KKt?7q}ZL{R$oRgE|
zMLybY?Upnd_`pLBBzgb8_j%6qe_vr)7CQ+c1hoix<6^`2`Eh^YbEnW-Zp5-Igb*e1
z&i+1v9S!)6MNn0e%PD3q&og=cj}k=jKQ#k5Q&{ZSxj_PpVMwlms^v4IfvOW<llkt4
z2mtTZ5WvQUod*`fuy&`o25N?YnV_@HORb{>5bS8!EUs#h-uRp$=+|lvAQvC<J<mW!
z-=YHf^o#6+10bC)h;9R5)Lwj33zEy}QorwNK|x$MA0WWY)cmHGu2g{yJD-l%9$@nr
z_Ouf){#kFu2JyHGqcfnHv;rZZ7f=dcuK?czr}|;GIwNZH67*&8+ssngr{i!b2AatM
z;HS?1K4lxTS^<vs!&JopWms`5aQWD|LFGPXwE`S0w-R!>-hM`iP-lOiQZlQ|-IEe9
zbvoO;%49SZ0^Tm`B@{wXP6E9Zm{o7ZQ&2`I>t?0h)2wU`NxAURi$7oa{CMh@_q#u>
z6~MY#ZI^|qaqRZs-R*q(*%P059(`v2$Kxlv2WkPZQm$F$3^QqB8b~@VulMnIM@MM<
zWOrz*MWu4pdtjf_<v!5tR!ic#kwZ5vbYVktI#JyorZpF-#)e6yeNR)<p)R)&x2WrQ
z9^2BwkyoGa+DCr75#BV0<pK;B$FQeeDVo*V-eyd%3;a&9yL{*k3Z}4GHdz?<U8cS9
z<pCj#C^(#8H4z>8ikmahfumo9PgM+1fXEwBn^y_?GWcKWftJTG_cWpHZN|N?9U(jO
zs|pLSK%WIkfWw2OHxfPjC9&(*PrNV`9<Hbb0Hd(b1K-3FhH`bmYQ5bMaINHWs5Vn~
z`HY0qy6F(vgoKp@D+$?EknDL7Q$@H`>N~nH=H|Lz3)an#Ox&2N>Rx3{e)bN+3L<F1
z)Se{$??G%i2W}s@T;OnkWk5~`DF<>6{PkF=cBamLs~!q{?UAcG%I1E|&yfjafNY`c
zb_?u<`bvNsaOBgB!ThyfG17Wu^Mzz5p_>8;fsDY3Acvsn>SiJ93h4pMgxLxB`|8Sh
zN#@<E0U}X^WXC4kkpMYoVK3@C+|c|8h>hYG;np=qC7Cz6PKT3K1H|H703wBZfdV{)
zKv+2*_A9*A{1iUykWIquC5ZjSm=L^K6t8#;%Z>35yMuN0j6ZjTrmP8(Nm!a=Op-Z%
z_;fh2^RuA*s6!xYw;}R7EX^?_$-Hu>c=a#gb_a}&Wi5sN=S5geFeKUe;P7DBy!W-d
nwh=cBCX7|~17q8X|1aV{8S+Raw4Al<00000NkvXXu0mjf5!)@f
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..a183a08ec073d4390d4f4d4a3416c184daf1326f
GIT binary patch
literal 1159
zc$@);1bF+2P)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800001b5ch_0Itp)
z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FZT01FZU(%pXi00007bV*G`2iyn*
z5gs-WCCOs|00aj~L_t(o!_Ai4PaJg=$3MRr_69DyxD@OflqOta8){*F&?p6oCWf>P
zwJ%hO0b@#^jMit<^bcq?u`k=0cxj_gCVle7WFhTC6LpcQH3Ds2l#77i(q(Tm^PBNu
z2G|gxEG)*8octz}ncw-&IcGlSCn%9wmbIhz$|#`;ApnRz<hj8D(V~<Y5JId4k8~cQ
zsWps$Uj_Jlq+GR(|MVB}=(RNwB^PkT$-t@Ojf5%<@VUY30iWak0E@L<eD%hA0GzQb
z6iRH7h6+M*39>oJ<{_82*K8ghEEAfG5gF{;n;rmY^5-D~tTv_P`06#wG_^Dm-zx!r
zVL*1vV&T{4_AUbe=*GsFh0Ow)%-#vmB)HWA5rrkd0?Q(`u!jQ17NMo)-!ieTWc>cj
z&ILrF9yky5072(=@`@1GfeRzEB*K0O`8JBMgD)C>;=^~=;Z<btBfwCk^H6XT$RvRm
zJu0JZ`=L4HlmkeaD&s3&;&;<K1CjIPKb$(=7<>q1l0YkvC@G4g@JXbhqCe8)1+RNO
zu(x2X3=qFtMLc@#(=(Peu$_I2Az_aVncO<rG6j@#NY~U-4bUTmU^`w+69%^nnVM%0
z1aH6kLOQ!N7uR&-*wKrz2c^isdRJ%jn|fmIZz69V<M7${%PXop2Q8E4Qk@5qnk2Xt
zWG2-|P!BXy*ZUf%8WO1ksZt5JKDJ2zW{^n)s!=1)Q+K)#tZ6K*4r$<#I_*Pmchv$G
zf)tPgazc>q{4h3OjDQOxv-E`h1UEt^u`i5q<T>hl`+!-{b#N&>{)8)7Tjl!*gbC=F
zj0(&AO_T254bwFNTrC<z9+jcC{RCGbGgBKT{c<-A{bv#GdC)Q-EpXS{oU?>oCQ~;N
z>If+JF!=)*6V;KAi$d`rj7BA`x28CMYl@!0Q;!9o?s$df{<jdGX~<;(7bs<ro3tB5
z*C3mMbke|GDRGrcbVFj9=8k5;piQ^|U|^*8rA+hb6Fy<yg!v^f6p#uiZV)ceG|1&3
zy8@;H<#|v&PV<W0PeVPEoS6FN^TXkTNmKyM@hl)6*8yGF<tP*21ysP?DF+HHuV+r)
z`!PA3_!+EnAOr*ew<AQZjyww#Q{a&TMGAB&(4^RP2992e-M?|J>%{age4!{DtA7SW
zxgFTjVP*=n?Aq9MDK>dkLr0N1yBFYyNZok1>-DKSd?|Bu*SA5L3#fp(c~(+MJ`)Pl
zSXlNyO49MgqR#_c+0AoZk4l59HBZvr7=bbsZV&V4@)8{#AH>E>Hw!kg_DiuPwTzSV
zlU$zo4)QC2o$^4b#_@JUXsU~M7G}8o>-UgPqbUjt|Cs=Q_KPtIe7&;Fgs$`LYOVjb
Z_78p7$%OXBiSPgb002ovPDHLkV1kq945a`7
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..7f1731df9a0b78e661e21c0597ff862071222b9b
GIT binary patch
literal 803
zc$@(v1Kj+HP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800001b5ch_0Itp)
z=>Px#24YJ`L;wH)0002_L%V+f000SaNLh0L01FZT01FZU(%pXi00007bV*G`2iyn*
z5h4tw+G#ET00N^)L_t(o!|j$&NRwe4$3Ks3t(cS1B!oIx*f2s6cI>YmDu_Vx60vjB
zbC+)7v4h>Un}h@z1d{?G>*^ux(m?|?NQc>MZTkM%eD`$N<Lll{=ljZwLHLCqdwJgN
z`TYJo@AsXMQgRpxA@D<i>di(D_;N~p9yaMc3z1SHgs|a>RFZgCE0NL~=sJb<Ef(fh
z`TXgtoy5*>d`n<dZPqt7Ol)l$3V%R1D`A+R7s=)Wyh(op;IWShG*MM~Y;79ywQv)3
zgP65Jq9csovJ;4RwL0Ot30n2FK|Er5+FZgZ34>CdwS5mEpk{7>QQV^gm57LKFYspI
zJ#ZE1l<-J^+_wX0nzQ=aD0zaP1SS+5;306U;Rp)rnmzBj5h!@ka$WfpaHnediGU9c
z6Il4N>Ns@v2&yWd&mIU51Mh%qyGslRc<$~oynm5c>6d~R9q_CUlM7&4v;%`cFA!C?
zb3sTa;X)9u)WAo)8Bs@=c(XyI$+Fu%pM}{Bm=@i@$3!X_b(mEqk9;{p%kQn7eak?<
zfETWv(1jJZ19N?2!%>G>6?8~1!ir{>or9;R;hF1qfg5ih6=E=vN=9w7GV0*~-_M+2
z>SwXjwGjy+a1%hU!>smzb16jZY#DVvyg8u@MQyX%)FHjJ3l|kQE!K`%MLoTaT}#sx
zd>K}@obZU{$*d03fm|W836o0=;mWLXz9$fXba{LRerOFVS7!Cr*AYkvmEc@(V{;dN
zIRs&=&a7rL<bWaH5|9uC#)HrUU;&G5A=(1lL`rpLl`}1RQn2j$ACU|AE8u}zGBPlb
zh8wk3tlB>01%6=V5+)=_6}p7G9EBtVB)qPIYZ7jARFZI0LRrBL3HLZ^N$8i5mvEhb
hB?;#_*0KI~{RQ@;iH5@x4O0LB002ovPDHLkV1f(iTiyTw
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..7d7e2e3ad2b797f3077b65989dcd8ccfb4dcbed8
GIT binary patch
literal 2608
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
SU00g`0000<MNUMnLSTY7U=K3@
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..40b19cb63b244d6e71de31875904fb934d0498a2
GIT binary patch
literal 15258
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
A4FCWD
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..1753139eae90fd43069b2bd7da99b852b3fd2e93
GIT binary patch
literal 2548
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
KMNUMnLSTaRrTcFH
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..532f4b4b8aa18a19aa29e550fe839c48e5d60689
GIT binary patch
literal 1730
zc$@*k20i(SP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800001b5ch_0Itp)
z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyn*
z5(OA%gRyS_000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}000IZNkl<Z
zSi|j?U2Ggz8HS&8&dluW+H0?qU?*`m-niQY<)^-g_z88P!WD%C#YqFSA|wPUQ4nCD
z{9Lru#Jxiz4WL3PAfYHAglK^p5EiO7P!|!UYH1xi#)<8C?RaCyaUAd3-u2Gx%;92J
zNgTInii|2G&dq3a-kI;2@B8MQ_Xw>u@8poY!^61oCcO8lxBY^dU$iV8003JSzEBt-
zY>*ZZ0vQGs1A9Hpe(vd|&48gK!U6$k2||EWKmeo-G6X6Bh6O>uvCO3fuq+d4gD7=|
z5XCN$Hpn0-yO<4COa@ugSXzL9X&~)lP$5bnx(J|xAOgj!5?}+?k^@*KGI$*Tisg{O
z5=5w!4HE(-;H52rX`pOC6$1<4Cx3mQGq|i~%gku%=+_P<T4e}~P$>hY9ys;rb<I8Z
zsaERl2fGStwlHw~`=mxveCT_L+bMyG3UTez1yEKM*s$sIt)UCQe(Le>{<z7Dtf_6A
z8BOub4-z;P<#3ax^TZi1vZkkPW;De;-`;{DU2e73EdU4^8u#}<V(wCs-@Lbvf~O*~
zJUs5sUtU)G;HP}#?;cHd_vqNBjZYkGY2x_%zC&kA6O~chML9$t{tW0}9UkiL)@$$H
z_(W&hH;J#0++GQ$r>B|hJ;_wxDKaB{1U~X{Va(4(JYi}I^IF(*s&?ltgpyw$Iepr!
zsIG3?d+IU2`mRvK^+P!?o7T#l6w!zG0KaS-?&&etZr=R(KzDcXx4G3)JUu;4dwV<m
zC!S^U%s<FyrYNhfrZV<!QC%Ah3MCO*Bji=Jdi##hstp?t<z};wRV-f?Dqp=$t-Qku
zBZR>7(Rz&NLwi_RAOF^1SNGwyn>S%-c=3^@HwQ>2leD+D<6li(UzTgvP+1ohRUi1Y
zPzr(e5O`o@)Eyt)UQx5Qt|dR8`>YiT2UmRf3rb2Kw2$x$XgSH9dk<0@uWuXb?m4uw
zK8|*7k%6wRF1ot90IoHR9TeD=70ALk!kqwJ056a9(x~8+72Wng_+8Ox>-d?$hxGi2
zC7iM1gT9AwGKfHm`2GW|s*fKX8ywhQ8?UFcrHPlm(X_Y+hKGkqCX)*$RQ57t$H6qg
zP=E&%!0?e$pjBBQ+O)N*|Bs1QJ<)3s3KSu=3x*GdMue9U-@Pp~d+fQV<NFUB<Jiv`
z9~yXz&8RfIiSsB5kV}Ipi^`w?Q{zi06r?wC?lrHFbB7tYco&u^YHYyLpnSYBpNqXG
zakEap@LwXndmFRIo?Bdky1F`IvDo$XADF*#h1}$2{Cpmr&4I{)mBkO_DCk__;@Rxn
z$iJpuG>zFWi9*5A^DZbC%3O4~fN%Rc*#m>8r~j6Bv%9==9gMzk95*|?7@(n{frf^L
z1rwQco^(cYIRjn*O&RzWcn;p!Su*4O`Y(p157+_!+@&;*Zv$b_Huwef@ITS1UjC#E
zb~Nted<llUn_UbLi^XVeZYER{Lm&_W=5mmp!=Fl%^8;vKf;)>h+QsZxA19Q-BTkNq
ze1ZJr6j>caYXxowKlw85XfGW?u%~e!Gs#yV)eFjid!I}!28cu=G&eUBZQM!Yohw*X
z5hU+G-XSl*@g>5UqcHR;-i1Co(R|s-GJ(d;J0K-lt-zVZJO3)~=viJ6uy5-p$qfD-
zM$Z&Wdvovwo-h)Luwuhj=C>cF>SJG|L)@!<kE@PD4F$x|>!?dfekvuOaON2=ufqMx
zv#+6jw69Ul9RASj=!qmhQ;G-Qzk{j%laM-B3V!sBHzRSQD}EzSn20`~3WQjlp5lj6
z^40g;k9WQYCN30H>J=bZ#w|6CPbU6zPw1wef7wm55%{xZ;q|=&=_ybq?6|U<KP>+(
zuFIQh8jmDy-<BInVp?EXVA@~>Vdwh9uAO%$)=5c+>%wfhs6BWjfn}LA9!cPN>;l#)
zwNUd`!QYlA+;d+76#@|gRRiH0JmCkACjRdU|9hSg2{KST56D3AY;dzDTtZvE*b^eb
zFhK;tECVYHb_6QnnkQT`fQs@E>Qo0xDGVu)QlXSUDTyH^Qc0AQ7)qf8#8xl=-#;Dy
Y8{FuC0-DK(B>(^b07*qoM6N<$g1dnoYXATM
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..671e3299121eb8de50d6e0564084e05904e48a87
GIT binary patch
literal 1251
zc$@*_1RVQ`P)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800001b5ch_0Itp)
z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyn*
z5&;=>=tTVh000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}000C&Nkl<Z
zSi{AaUx-yj9LGO1znMAbT=%SZwN_WHq;@qZ6k3=5psTU{fgXD4A%hfpUGZfFU+Q5c
zqJ-?<LTChu21X!Bgwex&$n7P;vNW-{u4}7VORfLbtM{(wP7mj-nz8HM_L>8S%Yi#H
z-}(M#KJz`wd(Z7`n%msW^)K<7zHw0<z{|kXfSYW93p>}Vx(NV;_VteguLDZ}rwphN
zv;%UWV~~XqE{4&U-mk9%M)Yds=vC0_H7EsIfB<v|ItLPfaS#C&XX`7#Ioqp4T2;0)
zlu8StL(maOn7SdU8I-K4uYkasRvo63Dg{adJ{2Gls383n1tH+-F2GrIbWH$&B3-=>
zL2{WJ7J^i8ol9U15(1J=tg<tqgS7TKNcVxsWe#L}U|&zygDtapq^%W?6VE+QK-dIx
z+I4ZqJLOZqp89I#+lAp8N??&3SC>96z*tZb*csqr2=g!#s5CZ=cbzSk#Rye29_6$8
zAx4i~@}6&Ma-gvxhkW}bB7)HhtpyQ<h{kA*7L90)5kV9zoHu*CYu;Gy#*mQUQGhj|
z5hs<)q=wbRf&U7XJkUzQ70P&$GK`ggs(7VKH48X!<k*xih7VutP(Vx7^AML9qv}1S
zGhhPni9s`pC$7~2XkY(NOKKsZLU{m>P0wu=X5`c30(LTIZzLhgrT?CcgbkFqW8^$O
zJkP$Ku0`H6|JrCCq6UcKY+A2<l|}n{y8ZxSrTKZqn}zcekq{k@Z{UeZxUTR9i_aY;
znm0<L;_D=#!DakFfG`B>KzU4j#m#I9H;bVxh`o5Gd<5v6h=kNa!UZFP%;7KY?|`6z
zxxNBi1WK6z=Q7tl&Cm9#=4!P`xd0N!k6T}DpEe11uUf~_;r+P7duZzb(@1(dodYU>
z9|L2cGMJ8IEhH@reX@-UCr`aKZ4#b%;9<@@wv6(|BF`N-OxvSi;%xQjfNBLu(o4fQ
zpoO7bA9MWBPn$aX3cV91qQF{$90UQl@Y)kPa1lf^AdaD_31(@b|IVivKEd9>@4zS7
z73lz}0%PEE;O8>5YbVDK9qPSt@@bRsuKCT#Fl$a9W2b~Xvv3(G2bd~^5x(5au^k`q
z`#|xv&c4E?S~8)U>a%=HVFY+#=rCUl?1uy(o`o;Zp}2i3Cx0pSE`PW1%0wJc*Qerm
zP2ZGBIGzdnH+03x6+XXjNq*IWC)ZNky|;9FpxD#dSJ*aL|9=aZA_+%6>b^?3{taFC
z1~&JZ&E?xh|NO0c#e0SAQ_X}mk#M3+xME9T09ZPmOjr{MZ)GMtt3&etXC~A)kgz+5
z=no>!1`)Ubf)Iiz<3TQccegMTekvi~BRsEQt%3z;+|4p!9ZO&n$#E3ejN%6c-Dp-C
zi@QlCtdD@}NO;+3wMT0?D55rs=+#E+rb#m4E&Dni1iFD)lhANl?Qe_?C5h@^vT^_b
N002ovPDHLkV1kd<G|2z}
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..3fe18e6d45b2058d78520bfb6584ddfd78dee591
GIT binary patch
literal 1377
zc$@)Y1)lneP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800001b5ch_0Itp)
z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyn*
z5(5IvyYG_#000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}000EMNkl<Z
zSi{AaYlu{37{`Cl`=0BpySi)Ot<80tMer82^{Lci0!c!OKD1pF3%ZFLVbD#@1qBIA
zOUwKqVQv(KhDfwQ48%$wB*bk|30*JQj@Ftvwzt_id(P>@Iqt6J&aOJ<0}sRbF!TQB
z|Gdv{{v%-+aw|)5i^~}LP`Y@_B~kYQD}e=oRp<jc8|$TL0su{I{X@WdU=Co30pftN
zfCQ*g&{g0}hpy+g7S{not2(i05J-j!L_lf42IYWCfVRP~zy<P_SzG~@Wi}{>q{KHv
zBpQfvK)Ilu$PFEtL62z^SAcCAN##U`ihw8}j09*G#ExFIfCE@X7hstvcTfO;5Pf^)
zfKJ42m|#bOi#!6;Ks$hr4wiT)lpW1p+0i{P60rmE9cW&WV$yi1NdlIJsSkrw4ijo=
z+xY>R(;4P(N{`F|+cdEgVB26hgY8&gx!{&SX(^PK!+4;gY)rH|K5KieDc$>9jOKkm
z`DI8L&kqdcQHXVyIZ!qxf!^PQ)*3?zN@=tfv{o2Op|nCPg`qWCplb4Xn(I>y)8@=v
zRasZhp-*0)(f3FHbcCNV4Nzd|{55glnxL{||66OO&7R#*S@$&PJU+e$bmI4c*8>EE
zQW&-}^tT`;;i#&qV$Zs%GiR-=d}=X-8N#5FgIiZ$xOg`ArYMdAAwnmR19BpC&)<~p
z7|8*st-oC1RY<sdZ)(lN>g3AGx@Up2;CWywrrcqUn^5j<0SN$)fEEdZlX>4d-5;38
zfX0zXh*;4ah9luu-=<!gl&o&JbIFUKJ0PEj5QKgvELtsuViN*^XCv|A2DpITyds4t
zn7bi8ED2H0zy<yf2|xcnwRB>2a$|Do^N5{+TrXgPG9dR`L@h55y`9jV?Z+zfF%v#s
zzfTwh6%$M7zR*{YgcKs-nA;|AO+K;Em0%xq{0;pId=<?{%*c&g4tl#FP>|@001^VB
zFzc1~Y2CK=`bp^ZWRJD~uyfAj8Cf(yKJH$?kJ|&h7-L4vYz+kP`+;^k+cU$1$TAIV
z2W%H?2ONh1FgZ5#c|DIGZ_WOA>JWqpA{vd26GJ{05bYMIK(Kv5`GV&Qd0$Sp9_IcJ
z(}hN0q7#EexP)TE1aV>YtLYPKH>Vb5j_`$2JX&=xNFq8o^x#Z8<a-C+ZYse5biar4
zJ!IaN^o^5n+st*HFCSX<O#5NJ^m8n%x+fAy3H;eXS7(;bM3EsRjCPc4+~;dXLBdhh
z_Pf^q^Fr&}i!(=Q^!iv>QyYa8t?3eB^SpN+IU1_DwC&hVrtJg|ew-d1iVqw)KI(}4
z4Ub_Eu!p@L5wN^^77$rJHtepUZTF{~JyH1Z>n7pQOsGv>J9h^1IhObJkXMRxEjxD6
z_177$HuD=M;gy;2femTDc}42Gu8S-H4g=@!ez)<uGhsmz4wnh%ZA>=-O~uHBS>-V9
z|ICEy3KA}}UG~{7S=$B6W&li<15P4(wr*l3{8~F4MDwJ;5`o)MSR-Y^BF1vl*9m?F
z-b46BU>S<}hKVIEm?dD9f-^26a6Zn2MH4WDggHaW9;I}P*7Ands?JcV{A!u-X8$`r
j1uO$97)<I{_6^m)Bl&HTP{LG=00000NkvXXu0mjfyxD7!
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..b697dd8ec68ee5feaeef932c41f07eb13ea5661d
GIT binary patch
literal 1189
zc$@*H1X}xvP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800001b5ch_0Itp)
z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyn*
z5&{$<bZdhE000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}000C4Nkl<Z
zSi|L)O>7la6vuz}+>e=g?dul_Dg{zwrACb!8(CS9Zb<6NxUgdJBeEcbBBqHOAl8*3
zhQ>fcB=Mt(E{t*Eg5XA<6c!4hXd)pbMFJu`MS(&~!<*N6*TuXBXtdhC2QECx&17bh
zIlucq_n!M7_`ipm`JlFErvOg?TY%Moo9zP=pKMZ<0GJucHSN8tfVY810H+M75X1o)
zkSypH2-{%dmE9F9a0`IZ(ybi*3R=B@QXm=#KthlV=m3m^2#B4nE`W2kUqV`yl<T7a
zDJPFWhp8Gm6@y7@stXWU(<)(_R4Gsb_!K}#pn~+O6@-ARI)JlCbOT^|l}c2G$duKv
z5Tw9WE`c@Z5YTC2MY#k)T6+o7bzm}O1**LU0&CHk8yj>Qz*tZb*cxzI2pgati0f)O
z(AQb#tl1ki-PJz+%ejFkcjmUu8=$T>gFf^nT5F6bL^N6}v=)pAq6IC2(HgCwWzhos
zue8-P1`j^Gep}}3r@OWeZzNecnCrh|oox8^&If+j-j(;)j(LCekpFqlYkqiR=bQ6V
zV7A!5xpSfS)R2}x#FGV7Qe;^&Md0HCO7bjuz6bcY|KKKU$Ijf=ssS`FZC-7pc)!!}
zQm^D*gvS62UQBk%Ap*rBxI9a`dnkPL{+4exP+YY;_tu=wg1-y@$H+RM4PgnC?!zaK
zBUaMw;?sr^pH7>E%i!aMoE&<O{HasxR}SX(RIC8Mjg(N5U`;}CG9kV?MNNYv%7S(2
zT#N;uK;bGXEYkY&IvDzJ;6N{h6}xgnl>uD8oX)fWBn6nf3=`)es)aBF=fD@C6oW2-
zDWS4Wv_9LFnHc(fH&7wKnXf>A1h@`Nm1VacY}&lgq^FciN0Nv0$G@dG8IM+8f;drV
z6b40rqJ+Yi-zDWyUmlsX5~mNt*<)k-wc*u@0Y*=vv_*_X1E%D$)A?Nlixz{rIr$Md
zcbvW2ux7<TZoFcE{6)S4MuCR%xCe#uC7QDhytJr|S}aVB!|9`t|A~D{@xpA$=d=xH
z>4eMbn;3rdDej(1U~~j7oME3ftnC=cU7D*U^K(b|VmS&^n1EBq;KEr3wV|(LAQ#WC
z6}R`^D$zf9LJ@v1Tq8bl1g>0SP+K;4?8qha^@J#w)@2T!@M5vZ;o=n@0`|=%`CoZL
zBrIF8f9VN3cI3u^XR751$0VfTPI^L_;R!bc5eI{au^<8$KoCL@feRtbr1$PNdcx0i
z$oFWTQ}CjK#R%?pdcs>2IR4I><i{>`A_&;-Li$|DunUPpmv+0T2C`XbY=i|sQ(bNK
z{|#@Br{Dd$MQinj*3xZ68fSV!5yb~<msi}({?qsqxP%@^S2l(O00000NkvXXu0mjf
D5r`Ld
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..dab44a4ad261a5d3236bd449a461cfff80bc5569
GIT binary patch
literal 1010
zc$@+90}cF%P)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800001b5ch_0Itp)
z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyn*
z5)UcNvRU5%000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}0009`Nkl<Z
zSi|j?O>f&q5Qd-GrAW~+ZCRFLsESh{A4m>CfZTj<@A-YnZ|OaUo(nVw!-!=EjvY%%
zEQuEPV|t)m7-$g{(!qy%0Ah*dF8S>H&MZk$RqiqjcO3Ts_W*Yeko@T4A1_}5Fo}^|
z1gDAv98iVu_qcy6WVzM<>*3*Q0BNT~Z!#fy^9I{$VR}7cw~HT-@$cWm<t0oeq#<Cv
z#{$t9=1-q;aeU0odrtTFS684K4vCK*arohbMqnNz2`~q(AXY^YDGFIwDGDN>>RhDP
z1F#D*Rs*;Obbp`5WD<Wi#v}&^*u6dI_r-tvX2ZL8mg8gWWJ2OxJt@m%(&^aCvontR
zeSDIvo`kAO;vBQlXdIqB3ubQ*S}iC`5@Sf;z9oJAnq+4OvJ8v?@7Wj*+3j|*)~;6t
zE(G$^Q#`0?Hm!JHKLk(_q|-qT4&c=*XtyCrAVy48u{j)KVqC8ZR26e_f>UiZkB-3F
z+U1=cL<F@KX}96U3z*Fy1Q?C#wyKaA>p80eI8}5oAolx~k00wBdk@al5UOYhNS?#v
z$8|r{5HZ%U>nPw<`C69DW8``;pcx~m)(~Y0c@C;*o<pyP7*pGzN*s^TWhJl-;3gt4
zjS+Wt#-_EkwDUQ%+elGBnnF>a#vn1Gvl(+$)R^@Y0N7fzEnw^%S6{xcAwqIvg$QhK
zgE6%g-7e}JK~)=Nxik%z0%VKU0!^U2zQ$f$Agb6KOH`pKpwWP>EpQI~{+-6jiPc+M
z_R1F2`*O;Is=}&LP9^{}W5jxo#)$O$&~BqyhBTX)B#~4Eza$Zt0%%dxCwY#F(45Z!
zn9pXEA&^xSiT9{#op40~A&{gg7(=$igyjm{Y^9AxEp-Sqy+>kXT9){#VskzxiLq8<
zcb6CfW;SC~RXkXdi2ofRNf41b>B^F<s%QYy5V#tR*eOe7I)x`sh$6`OIosRYoR3Cp
z0xVYWd!D1Ju(45R{UW)-;%ESw_sFMDbvZgmo+Rs+p`<ClOs7JOP*o5ka&-kj3CtF6
z&7T12^$5GWxQ7q%g8{axu+N{b2k={?QTu;8y4`<_`%{EW1T!APcwB!Vh|v1{`Ns>q
g|1-J=_}>Hk1pvvDW}m?j=>Px#07*qoM6N<$f@s&a<^TWy
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..8df8201ec9748822200f737fc52eb925382b0809
GIT binary patch
literal 1075
zc$@(<1kC%1P)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F8000B}Nkl<ZScSEh
z%Wfk@6o&t<DrX#=2qRlTxk1>F4XY$#51Tv%gLs5t!G=w?gLnvd05%ymjJ$&pBL##A
z$}rOxw=c2NZJ9WZ9ox98>aei8V>_M8ke;%R<hHBN`Rbhibafd-gxki>&d$fFREnok
zb7_jbfuOa9QW{z-+~$*W&OOholu9K_+!`IgU@&;QP$>M6&1M&s(y?=hMi4}V+t!p$
z&*AaoZ@vTY#hm~EKuTpusSpIgjq?n{xRXDnR0;sD1=!u)Wov6|831{uR1N?et?uUK
z-KC`Cc{ByU7~|P&Hn+b1-ulMI`x_4*e*S4bpR4%3-`LvP{+2Q0Ev3|*oWITx0PyJ1
zmtP$m{Px+>($c&6d_FfnpJw5N^Yae&_xEqD>%9P0S64Q-x3@kD0tuxQdc8h?Q9b+p
z9;B3SCVB{Pc=*@f0B#gmSpU1$__Y9R+p?6>Fbw0`07(OcUIYMCtJPAw-5zE#nYlQj
zg`JgX2F89E0QkON_kF*~Iggz;GJ@90Sm-kX2!i0$b=_mm`BbX)#P`uhCt?~D6@iUY
zs~pF63<J}_^+eqXAf1q@84Uoy%a^aru+CA5CV-L@A(4)15CNE`X-TQ30T2dE8sO4L
z1W+!Qik(geLI^0WqZ~~FB?&MkLI5~9IXP}No2Q1sV$u%GX5qdzB|-q`cDv1LwOZ$b
zCmQH_o5=tX^@~Nv<%~_K|FQ++1^NFoFrxtgFip!c7@L|9wjdG~Az`Kq0Kl?LQ%X7d
za~wy98A!Sd#%`tnip8SS@ApR!9g5l@x+c=29=<n##uX6)K&@6Uw_2?WgBg)fCKY?R
zFC<{&m{S0!r~fqS^}5H|Y$qfuKnf{l0kqcba;a3A-IOjLMsK(a0Km3wn=$suY*5A+
zgb>g=Mgzw6mzoHI3#3x1=(mN1Ma(^TV8jAAj$;z0SG}^bibA0P#uyMa(8M5&_jx@!
zoB&|V0An1B3ybi5uhnX`{t!Yi07$3P^Ut6E`e!V_ix)>n{eC|R&KO57mjmYv;oA~L
zt2DqE0~Z{Eb1=q00D|EVoo*Lrt=7Q1xHx<I^r!ECeDdUL0DK}r5&(?ZzRqMaAN>5w
zvxDX3<(v#8h%}^9;Eay~2?5Rp0K)L!A=>RW{DyyCtJNB=>sD>sa*9sTtksU)X0v(R
z?RJle$S0!MH{L55==FMyhVR!lKitd>g8%?QN{Mc#Lw?O`SE`j0$9Bq=ZMo(v(=1oY
zcEk58gTcTD&?2H?T%ha56#yc-*xTFtT}rulczAeZS*GQ>rDC;ODSDn)?)7>efHn~&
ta#*-h0ss&~yrZ>dM07?($)Cq2#(#k4+4%v4qPzeA002ovPDHLkV1jDD`{Doq
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..514bd97c273a2ab2f85222a0113d5aff45297b5b
GIT binary patch
literal 1379
zc$@)a1)TbcP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F8000FlNkl<ZScS!w
zZA?>F7{{M;+TIIo?=3_a_I3=hFkLA)3Wx)$#$*y*%rX;$FT<d7S;pSJEFsHg%$$Q5
z;|yk-Gcz%nMCXjC)dby#Ee@Rs6c8hCb!ia_rF2S*#a`OmXJ24xu+vWM_D{~2=bU@a
zFaPH`_c;U+AyR}8f^&m$6pa=uD=mFp5Cr}I1psEV`TgS!4c(<BCF|o(fQSzbL91PR
zv8gG1w(*Q7H8nLe+L~uIq6Y!kw|DF~)oJa(ulDc1ESJj@|5E@&gp`z&Rp-u}d0=gC
z$E}r>yW<8RXoXCp(O4421;y6N%A;+qt$3xmIapXw_*z^53@;g0c6M~!vsf&@m%LI^
z4gh3!lIQuQji*oF@3eMc<LSmbJkQU6<^TX7<2cS-Utj-QAP~TomX@1URaGDIJfDh)
zP+neM+j{*v-t6wiy1Ke^K!`jpH2?r<Wo4zG_xAQmh=@Z&L!O$Nnms(P$=~_e&Z`|(
zEB5vFVns#8$8jq{07y(uPF`1ATiZJ3av>t3-EP0z(9qD?+}tc#+uO0dt!>I+FqFjw
zAOd7TadC0o$sbQnIGs-P`~5gEF@X+;0|)y1(PFXK5)%`X;s!A52FtQ5Hf-2%;`}+w
zgWEP64i68bdwd*6Tw_?bckc;~<6?$TDV3S2DJiSeDz!c`PG&3dpF{{za~!u~)5eV-
zRc+t?s*+{l^5)G@xONRBSHCxUaNoYBE6rEBT<)=EpU?M)D2kJj->X!rj2HD;dzDJ1
z$?Nm>E0ro;AP{K1)!XxdBuT-?0?a@V0MKS-XTPznYFoA0-e*W#Rs^bb6%g=wVbAW}
z;IKPD3Wq)7v}hLtqCFT2x)_Gh5`fk2aZk(Wn5!ln4&MQQw3qYpPKx66)t<iIYI%(P
z0s&wI0KOrF{QC9xM}9Jwl;%jDahULWy$Y7S6$(r964-=AG8s(?homBvQVAT-LpU6U
zew*!pBuO`Bw!4>+{=x;FAiP5<{Uj!UIWRp2gW(7j#RCO}1@PUWL#KW?cI*oPV0oU;
z)d_-`Q*%ohmd)||{TjdD4}_3x0JsDIKq;k#`KHxApKlZqV@ttYQA&jsX7i;aO_FiU
z?LL0(ddr(LE&(A#4gg6E!(?fAO=$wlYzziN#`{zLgOpOIhU2y<6B3`d58Zi76vc~A
z1ONb_6Ljz98I9j66bk4Y7}!2w8#p?5%}nj&r3<?AYPC9D!6+OakLQ;Wm+LS9SP@Zr
zVgN$Oyn=kw1(i~{Ory~RI=Z^n4?BmOqCrqf6_gNJNRq+;5JE(0c0THhC>9~&pY}n=
zp-?CkcDY;$dB)sR$w|qJqpU+olBR>9&;vviBM%3F$NvW&C51wvUzo9=U7QwufZ$0_
zPv<*sbglIJ{mxkTcwz?t079YA6s2U!>zmv)I6Sn*cH7pSn`1mHm&=*|1ONagfsnf#
zuTDTj_t^M&wQF>AGB?L~LMD^RV%p(pn+dO0?=qK^4l)d*o=IoMqO9zm+#KWKr)owq
zcQXK8_CkGsaZypj-wlS4!X?Js!EAljr*Q{BL?8gmO-q(coAUF&oQ=sSU0!4=aO(tN
zOWXkffXZdE$|6(2{epZ`EyFSjL<B*rJzzBCT!V;r=0osLa}6U!2%!XEb+$gMUaOr?
z{8LjFxlFccXxQ22935GYh~c;t;an#GU@@ms*XtK#+R{>=`<YT&{K)h@D+lJdp#T64
l089hGBtGJhxB&bc{ROWmY2tDu<75B;002ovPDHLkV1jtxe=h(4
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..8906e80f7e2c57bfca05f524105a861fb278f127
GIT binary patch
literal 1550
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
AnE(I)
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..4828b63375b5067b8901ecf061bb65375cafe593
GIT binary patch
literal 410
zc$@*60cHM)P)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F80004DNkl<ZScS!x
zL5{;P2t_gJE_cgKvx$_&TrCUeV#XDvK)_0-NELBx!z=!_+s4fBO~bEd2Y`q5a@)4s
z%Cam=I|cX~cv(^+0%nGN-#_|Xfa5rzwFb-#t^GnvZ@mKmVCJ_E5xoE`a{>AUJ+VW{
zXXzyn5dk8aak{x8loKS3_bhz}LByAzrl|(tC5eFaI1Nz(s3eRaBuELs3vMOKEQe=9
z6{uEX2;eN}=yIe1^tY`ftU#phf{}!mRzL^365^5yWFX1_BWm~b5<#Ty0)5{1_tEy!
zMnpA$OmgeQ^ZGnX9Yh*P_MeF}igyZNt*MtNBTmc0C6EcTCD-G6yIcWHuLDFoB&wFS
za2G_PyIq7marQ`+V>|&{He3M!f4%>$0+uc;@68VZJRwC#wC9H|qfDYJAY2X1^ZeG<
zzxks-D^}Yx7hql2A7*ZuOGo!x;}H>v=%WlRtJb^h3BCK`LD4@z3jhEB07*qoM6N<$
Ef=E%W8UO$Q
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e3528f02c939db2a07723980076767c367605454
GIT binary patch
literal 1365
zc$@)M1*-aqP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F8000FXNkl<ZScSEh
zONbm*6o$WBRb5@vJ<}7CIJ8L2gV-TTA}B$Lx(cXSxDnjA(3LwAapBH|E5)4)m##!a
zNCaIdijOf12`CCa6FZrSMjaC;qfU2EPd)BE$3<0l+D^|nJ(>em6veIk|M#5#Kew(?
zRjyae&d&N%Q&Y7#j%T(^PuE4<&WY;euH}_%_YFIDeXw)O#Ovn25SX2v^=q|SEso=v
zTCG;M*6yg)YP*avH&?6Gok0-X7)9lJISi)-FYKgBY?X4!@Y#3gP98mU>m$K9fTvEK
zx~X2TKNg1Jo=T;1^TC4$Z;Ya-9t6R35Coy```3J<z@IA_-P93;KGjMI6$hvQj74DE
zwrx-C+qdtTjgDXHq;yiDR0^n6%V59?s8gJv0NywReBUnv43=%J60Rhc-`W|KYD5qQ
zWCGTK)2r9m1VlszfqUS+=icS4rPc0m<@XMmUJL9LTrtyFB^bb8Gm<1BiDS|vK@>cN
zRKS=%byO6q*MWeD5XUhh4r2^T4rB!kfB{uNu0sZlG5r$ci&dmZb*4E1Pm4JOoco^%
zj2y3;*V`$^fB@DCz7bsR!tn^Wf_6`Q=4xTD2}7Q45pa?dP!*gL@IXYzCor6WK_Y{$
z7#wd!u&Q_p&bqurx=8}P3=D^=_Oqd?p!w=m6z2rzz=|LueKDqX6D8QV29%x%MIp0-
zIEx{-qg7=kb(<$Joa(_6^j%;I5elT41r>||&p<a-R<r*>1O4?5l%P*ga{_6Wky)F!
zTm!y=rLG`ub1slRKoRRX!C6OU9k#HcZ=jng%c~i>NgGZLzZ>3|^3^L@mge9#7h<mu
zTy9&emGN9~?8zr9_doE!6Ne5RdU%u-2eTj|WN8B8@Qt$6wfG30F)Vd0okZ{qXfe-*
zcEbzv^9PO`Ir37yUf<@N`-k9qBt(QP%Sh7{>x6RPbI0zG)}<vp;BqVFuN4a-IO}lh
zX<&b&VaS_VkS2+}rO~K}2tDxO6+7pU!sk&G6&sRJ!VxDim)e&0YHq{apxPI7Fa%rz
z{NjBH2rwp7s1C1IMEcLYFvbvuA!(ZCWP!{nVjU{N)t`yHMUTor6__YU^sWrmiGF&m
zU9(i9+OdivPWma=;@0b`!vt0f5>w>*@BphYF>3N2=-Pzx4M;?AgW}Emw1FWJo@q7{
zU=c`w3NT5Y{)s{14U2HSOei2uQ70G`d=wAJ>>4&a(`=^u8;ykmd>TkqwY-t@!yvFR
zh9C&=y<Bveb+#4D(qcPXxYWw7{L$U=#z+E1lnU@F;HzqR6#O;yR>k*yCMPFpwU*O`
zg@yCYpS!LV1&iPO(w=X}(n`b_Bl2+&n0MAAuma2jk;zGvC!&Z_skEjD(=>H)9G{z;
zn>+o{haaB)_Uo^{KL69t^W1*?>H2{!TNjtpwh2mQKUseF!pleB>wPzpz?o)KfM54F
z8Y_Mf+;(Mg@z;|lPP~8k@ZsBc@7YsdU0r2)d6`zLb*|g(e%@}kKe5)Ho|&0x&dkiD
z$BrN8t~>82n=q<Qd4$eM<V={9=iYzw!duUs8pQh7v*G?mBNCAtI-Sm6d-v`=@cfG}
zKCyM{)-Ntzy!a{b{f-?wlHqSW&*Pz^5BesIs+D`6eg5*~Uc&QlzxvZVFMKvUc2kGb
zvuDr#>(9yd?c2HU-g~^MyB~k_&tHE0e(vK}z8p1ftle;<VT_^M?Q-^qrWj*hTW{>&
X7MP!rkhXXe00000NkvXXu0mjfYNeO3
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..82db5055699c6c9e300a5bc6cc3e7dd936859a00
GIT binary patch
literal 1440
zc$@*C1z-A!P)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F8000GNNkl<ZScR>Z
z&5vA16~%wI>b-7vkBtd2AWvc^4#*IYk?{&5F+q{SB7AHRk~c{FB`jcpvS0%v5yY1N
zz!3@(5!ixkVSz{pIM|K?NZ^bCd-}asb?;?S^?JI;v{<xDx_aML=bm%wRy}cdo;-K{
z!pW1TUv~(Tw)L-m?aTjcn}|DGHxXeN64ze+*_o6Qf;3;)+uQ%ikM~~&5O*iW_}eeN
z^!3YU9)FCt-+qf<{ql8Y(`Nh8Ydh=)UU=a}o;?3?nzrGM8^5@H=l0E~0U7{zXEvK*
z9&mTMzGpUV@JB#_h>%jk-N-p10;;-vUegp*jm2Vth>+Fj`ouf$+}awzGatJ^R>!>z
z9AjL2UI92MCHk%hcT61-xbVzVTLTaQGsE36GgJ-dh}oskW`>&L?hH9|*ri7zK@cHj
z#VG)+j`0wH5uv+dYM2?fZ{67%z*A43C#&M-M-r^$wFIE5Wng!bDk){o?w;KmKuVdM
zOJb^u>Lv!vmJFyGS?$rxf)EM=|IY)ey3{9UC9Cr8op-keaPIs$a#qZ(N}y{6Zry}c
ztE@&+<D<K~TLVa1vo^<6F;)0q64;6aS(Tjh(G{Y6B!L~1b{&8gs)m#aBK+;WzitiS
z>=V1>oR<Ky>ShmUWkFRDX*v7E_On0))O^`*2w_cvFrJJI<ed5ATW=DZme{m}*sO(w
zxG|2u8)Hk;PI&VVzbEHh7|0u@p=t&ZPM!J?-~ZlsXxp}CAczPE1PMqe*FrfurHCCx
zF`T;>svS~Foc`d4s|*`vftn%&vSuVqQ4?YeAOQ)1uo5Cts9a%h6~xhuGR%$GG^l3W
zL4s^v3&0Q&+O`1^1nBz#cL+i1y~0LG&eyJ4VI#)KbUG>EaI9u8E*m7sMFJ7QqyTAR
z!&hE<k*im~!F)bL;ApTB%tOstbUi=#;g7g+<2OhUG-uq6`N>lw%1sPZ%|pP<IB{ai
z^LwAiwC9yqe#*61uMtDw6VHB{Z+-JBXU;rM&KVG-q7#7=(<zrOJ<Ii9zd_r!w37+{
zx_3Z341^drnNW`axZ~Ba_wPSoXJ^i9KYtDNmKa<9^ygc=|NcFu(<v#XrBU4-5uu;<
z93C!;9A>x(AxIrVRu{u{2Hd?EZdtW5DJ62sfFlwJwX>8HDJ9H`T%~qY5I`CROcgEE
zEN1|eg>M4`4rX|jz|0tip04jIAV;;hKj+La4CI{GvM*AW9hRwLAyg(DGcWmXssrv$
zsDp!(bEfNi`o71_&<eoa$tj_=aE;C%C5$nUaw=20GGL~NK+`rGrlD%N?G7~~t*ci`
z3DpX~3RC?s(D(h4fw74QIcp(P4VCi#nDl7cjUMn7LlqB{P*sMZY_DSsq?8zjVQJn~
z21ZY)W<nin+~}D3!wk5)Ei2Uu09B*!d-|^9@@KDb^X6Y@nwBe9E`vM6Fs$t*$8SRj
z3`4(WLNjCNJ7Uw6J;5;sK6h~U@4q|!*hfAEg4NY)armEqXU#kJA3TW9?>)yC_nyPN
zR6lp4>$+t}qkqO@N|_-gYSkjfNJ;~_{G`Zn05RwE-MjyI@7q$^5JHgM-QAlvu3!Ja
zd_I?&St#p)NC?XxjIpz|-OItjLDL`J`($7BFA|l+c6Ls_y!?37ZZ@0A{{DV@@#4j4
z(=@ZmWHN1<X4W)KoKB~crfFs&gcC8wX$WB=A}!F0$ha!GyPLabGaFJGvO9yScB;A0
zDKAn^UDtK@=kxj9OP4-lBH~LEE*1+11|Zi+HD)!-28cDnO6KFa1G@5U4|K<3Q6m7h
u#=x;Qb}B39tM^vpc=KanHCC_3bN&m;%U}LayjrFJ0000<MNUMnLSTaS$g7(G
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..59ecc9ff3cbef7d3b2484b2389234c1f39edc8ab
GIT binary patch
literal 1942
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
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..a3e5175b9098d3ccb097e5c633beb1f10fe22ca9
GIT binary patch
literal 1777
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
Tjwl_{00000NkvXXu0mjf+=+ts
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..cf0fd38174d6901460943a4c7e66039eb95afaae
GIT binary patch
literal 22733
zc$@$_K*hg_P)<h;3K|Lk000e1NJLTq004jh004jp1^@s6!#-il001BWNkl<Zc%0<D
zd6=bVSttCvpXYg(v!B}c>Z<B}-_z+Nodr6CYy<@%=<tCeDxZ8t$C+zJ2OS+9@NyhM
zXLLRdDhQ%7V88?tAc1uDwbPw+(tB6e(%n^c&Z)DXcYBuakM~q{$G|6GAdPeP^<HPG
zrQh@1zvp+a&s}7U!RsM^OoTFk2*8y9{t|#_KmQ_tcK~<=z+V9P0Duhuz6@X(z#0In
z0jzI-|IY#V3V_M>?<Sf+U++g~(~d(-rEMdsOnYeq!+HSb!44(5oD45xp4Q~K9vSL3
zMbpHm4Z(|i;w8YnXS-?Hzm8_}CxFGr4De%@+|f9II{<v*by<ryLcU);ir4u*UUzX5
zBUmxIi;av-aWbwlf#p(KOmuek^l7*-Mj06t&w;$@0Vky#CnY?S(OwW@mtneAtQ&cr
zp>y+TS{%Fy3+F~Kw=kjQWYVa{8~y3tc)9EVAOLUyTm?{WLq9gI-OW9jvOI52@y@|(
zb6u-{Tx(w;@{5K-AH>qh^w>CzsyeLnw@xBB+4L(B3yc{ISt_MEyIVOJ8OUn3+P9ES
zOhrTMCwOyQVP<w*mro37(;xt^4-@{V$r}y;4nQ%WQvjtg&~HmHZ!KtZ<gk^QG?ir0
zBBMBUZn(kpZoUhPhd-tL#itk{BH?lpLU1Y4TeoieFB9YI9>`erZ#3(*nb|_%A3JaF
zO*;M@k95O8FsZ^;;8mYOx%@Dv)8{vgB}H|`2ib*ZimG%DuahzS(ULa|05*WN<Dlyt
zP}wDRt^>^PbSM>q*&<<DuI1*m>0rE>Pg<Gra__|Nt*w9Npev_VQ1|HW*2q4inG;H5
zJQ&z(hpm-8SwE-Yyfc^SN8bQp>jopg`N+Y$j-8%=&X>$FJU8kl^E;9wJvV!;@{`TV
zxqC9+;#_un-m0ytsUxS~qs{DB3{ZQcmgR>oKU4rH0LcWfW+f<R6T5P?#RFJ8(Q*+m
z?IdCKrW0yq(#DRoh&E<LX?238haPq}cD2+Y`%degm70N7SFXas?tMVyK`RBNG^CVR
zT&zPI4Xq7gN;kq4a#L59&DWZ0rsWq7MU~>S+E`t7cHk|^;VpmMsLX%aTRiuL{6N-h
zNOrQ9!;Hkj=M3<FhJ)}!0e}IJvq0BQfX3G_Hkxxqz2!1Q!b%Vy%4X%&dB^PQ5dPi-
zQ)9Me3C=BWHwj9PW3svpS9eSy-~Bcg!U0?VcDO4>K#>n)bPNEc5JeHfAVlB?2!jAY
z6k*f4l|MHz>b<3~SbM%utUfVcEWcQ*HcDRk=--9)%+r~!)$dCr^1JJW)4$hmhb6VS
zR~&zFi!_BN{*SN-^n(rq_ho^(F|e(J#QhFeL@LEJ>~zjnJNjIGd$%obPTOY8wiDpV
zE{OafSauM+a|j~cg@9%7@n^Dl?=FUw11U(&p!zq$q<aCQ0071SS{oRxAf<wo5<wWC
z)%4J8dhl8;_`VO%^K`A=JiRb=@>_GqU-;I!x^=oK-H7*XeLoVtqm{XrewoXturOVS
z4nO}nsZ0<r5`Z*fPPklAaao0d27n7-U=Y-?m$78RwHCdE5XR1QCUEs|GJ1cvtKaOp
zj%%d{VfC(o)w>p=V+APP31%k&Ccrp{3K{zQB?h_`z~lGerlC0lz2-9u*d|_#v`M3*
zLnDeJ1VMmiqlsFr!LnYsdWbEo&YXGR&Z$)AV+UI!_nx^>`rBye%^%8S`ajqzy!87k
z`UEm7C-h^dj%o#<6Trg&t_M*1K`huCD6cyJB!GksTyX_4t2-@xmavr)PG`dG8PA$u
z>`Cbx6Umfib&SIr*aWM04R~%CERh9-6>n!50y+Ye2QCHH4RykbrU3<zaKJ1F#Mo=L
zqcH%HX}j|bj1f3za2y-ybQ+yqooGb{p?@5_voo8koWEtlntStczx%<b%KFKv-gjNq
z!CS**g7afr`sHHlv~kae<`{qsVkY?4Ca)U+41gSf>L{pmg~L0nv>oWAWeYtvp4A^3
zN}2bjQf|`jUIk}xD@4y~P_h$@+W=!gSOo$NC<!tKWOV$fZ3JN&%=ba0fTRP%M63-%
z?Z+4iL_quowO_OLmkbyKIOnhv95l8DdjDPU&OQfm`YC5edHU8-dEnZ6%?7`Y!YZ!I
zm82i)fpuBGQx)YO&BN%|YoRVPdEEfubKuQ)F!q?079LMK(uhQV#@w<hk6-IdIcu!!
z0PMl-uzS~lCp%+hwMsx3TUO!@h}p3gwE;x|5c!aiK&i-~t0w@8VEWfXY6Cz4+5nee
zU<m+3)PBwYGJv5rGZ4rqFdYH|>ma(v;g0V{>-Zz!r=Q5&S^Gq0A(Q&(v3llXjZi*l
z^T2d(1@2sck|&@|>-Ac#%ST=}0Ce66e!9EcO1F}Z=IC3O!(C$?_&GP(A*|jFu=_TF
zr@Fw1ftm||zX*gakRcER2yIGN3Wy@W^MO_qCS*8SNg#Ajz}9uB#2_LAP#9s!1`xG(
zJpt5a0LEev5V4Ej!x*U50K0GmhCASiELhJ<h-@F6p$)KJ`Wl>buWZWm*4<~D?kDER
zzPn~piz6eg;6j&)Ry_h;ie9f3yFBD|0l@G7B#D9kF1yxBI~f-n*7e|b2eaaOk?x1x
zzYSJ?6r9^2zYH{sfb_u>fusZ?2}lJ<3CIWt+n4VHz7GmHimf$h*(Ic90ctZr5(h~i
zpjh4Q?GCnN0*IhBmI1KD2xJMc%6YKTd1%G}+Xf{&;%j6ZL~a1q@dIGT9!{=dwO>zi
zd;Mg?`E3gM^fBRi@7)qb)x%K7<m<6&mxug|0r0V(A<-@JZlF?5XF^}SWq|+pj<mZ<
z<R@VFZH7p6f-4Es&jWr9Oc{_=Kq!GQj31*22qGYgV4@fdCQ@KBf{+YJCb1Yf==DNK
zD-ESJNU3GT0|Z8ZZoeih?S25zF#s3?aRYn$CD6hQSUL~m*f3rVRGR}&_kdEJ$ZWY4
zB0m6r_^TK#&i+`Eo1v36@$Va<dqi{@|Nq`3gFij;uLlJGA^?2!XGnCiyhA$ecBkm(
zEq(Nd>7?6jb*+cfy9wM*fPxCBQ2<m3iZsX%;@us}w(=!R7+;VIPzFXDKpQAcAY}mU
zqW}l%ARtqnP%;8(jf?6B6kTEhsO<-!P5ne5gP8u0J`EJ-L4gNKq+nbZTC_l|GANM;
z&krH7Vh4C42lm3fz`3JWFlIh^yexjD9=T6aua95cEQ3FJ>0bv3zHb2h(YuLv*?E`g
zwA+)STQ>L6A7)&)%kEqYr)LAW<$^UAK+O_J8&D{LrU$e<zz={(!${TM@ft=N7#+v(
zMz^iI29(rDBrO#E6qMvpi3~_9z?kJI(BNVsgxbCUBLKvfO#}%BzIYxqc?3{l%sx&X
zlyJck2^hx$`3<010P7rs(>aR#j<<uj1xz1Vy)GyJ<XDw|xExqdu`Y?bHX-=p5vT`$
z#6j?V0pRX^jQ5OnI$o4=^J%<gb07c1wBvT!-Rt1=t^?;BtTqegRe_~l-)sR*9|!^<
zRM5%*Do*AZ4H#{p4WKn(lz}p_{pOq_%@k^O4q>Vnk&}W6{McUrVrpkBb}orQ10bWJ
z3;?KQCV-uQIP(%vD#F+nC=39>ftCO{4v=ubTo=X`FkTJF4#LXxA-8cqj5aVcM^>!O
znLmDc(fVLBFo*n{kN;}~ft-YT_;pgo8zJ8_0G`=LEEwvtp^}NbLsx9>WgpA9$u7Hl
z6`Y<mU<9zr49Kqop#nAiSoy602qlcvFcL7DU`(uhtpTMCv;quqz;dCS1VU~>D}`#r
zAwz)$1JoJ~==t+7GK?b!7$8<V1QT$RNhDHfShfpBEG`ZKfRbRRUxM}`5EFn_phyCt
z4|pw5OMqM(I^lx37IdQsxOuRS709gK3ljy<7fz0^&f&iwD?7gsGCH9qJhiC_^XLM!
zdYu*X!;<d_03YfncFh&GmC$y=7JAj%F8Z%IH!*5=O~CG32hJF%ItywwKz;;jv=tvj
zK&0Z`t_WJi%GU-^(m*M|FbgJ`hHtrOL<(ND1=%Qp8cocJZgd89RDv@wA_YxWI|tMT
z0L2-=P-`?7OQ6Lf5{`>RDuHAw4=a&^@#?_I7oo@kQ!Gw0wQ~q$G@t@NMqr^2@;Sf^
zbYT`Korf4)kIcj_sK|pU%xoRc&~F{DieD*N*4*kHQRC;IgZaxMjQ@kt(GOI<CjeY~
zCGnb-N(w{W6KVAyds6N;yJHY`&uVZmu*xi`UIBR_sNn%#O!vz>UIE4slm@giP!iBg
zz@##0+6k0v4b)DbMNq83uQj1UiAY8`*)fPg*}|!y1pC}Mh`bMr#j!q!z=?qi4$cLL
zTyREcN(H}KN2OeWo6V!6u?TAUP|S%V3?8S70RtEVf(F8vjz~t}OaofMw5A|K4}5qN
zGGjZS{3iN!`KG26ADXS(e-LP`28UH^QyKEPA3+-Ut^x3;R}pu*9hX9$9LPmKHJs*e
zw~`&OJ14-2$FyH9g0&)`<pW;ScJ3%vz9wiD)4h}iN)h0s&~no#H9eG%okZpAJj(SZ
zEMhQ>pkUwu5cw{2&d;I3ZFCU>q6kuJ5Sez2PvDG!aSp~AII-CAV*-wCBMKrk?)~4W
z%$3nU*o#EegbC^}09czx00v?jkZnMa1|vX_4O5v17>6~u9_ba^5S@4eBRc%KTF725
z_|BKC6`uOVy3u!?hW=4&CHbxZa91C(EB9JfT_)UYLhYGIvkyBW2|F_YP8O(g4pc3G
zS|QL30AI!qUR&`o?E^{~NM)ckN91NvjDUsXXHlKJfWl%OO=ZA21LI3Rfy9iJLqX@U
zvwi{RnKXR<f)x2KW!e<Zg%E;s!MT7C0-Uq9^T@!Mgw__w_d#EO2vKnk)x`$-#s<-s
z>;n8s9C{)S6B!t2$){ih#yCKL;RdFB9>#LvbdMoDum)=Sh%=TkzuJh{E6U?Xn?q9W
zoksYz=(4RCe_Q!y0r1WtL2te?&&xhba*O&#)B3|H!8(PL1?MiPRsd@(g85MlfM7}a
zY<c%96;r+pH555$3K!=}HPoi(QNK{aq8Gvgfh>*y2B9|awSg~Xbb4YN&)Y%$d@_5~
z?dvU69(}By=<g4CI%Aj+j2PKMSZT*`I^9H~JDp1PB$BDT<2a0S4$V0*c>=-g3>>MD
zoms$KqlNlNAI1hc;RIDc24I3MYmSJ;ekBOR0S*I02D)$-%t<2AJC2~bfDSdkdN|2`
zcCu;zwsLiJ!)mRLy#hJ)16A4UE8h_SJv~>^>Xqx+>K)heX;yJN`C@7!*}T2q!3~@&
zSat@?Yl4MMP^dwHjFm3|EGr)|?JGbA3Q`JGY#ZkaRmj-|)Cv_WMhemrFdFb-(9%G|
zpk5<BTkKjLOm^(p)LlAspkk+<$&pod{h+~vFti=1l>rAqghAxCTCF6?<(%N6+jgv>
zOeV9sqoZ>?V_E6o;fEj_EyzRyQPV@Gl<)$H<1HT(WBtfz4jr{X7F(|Q5+}egkOmkt
z;A9}Qf|)-JF}w+>fi(!5W%Q?_cP#|$p_a0~&ijLK_j%~43VvjYhpz#^$jEgxI<l4T
z*l{f*N2;op+*Wp;L2n$kDnFA9BobB<cFO~6w7?hxfyWM%0?@YgvGU{HFGB^XZIpzK
zVxt8%S3+&Efub_df+GT<1&yjkwPNU%28lCOk*?D2+uzaYM~D6T;(f|;XA+TKh;-Bn
zw3331fmQ@C&ImRbbD=4%l*+YQQFpUmf4(?9J(lHc3w!qI%}FMbAOhnYHKmcMHz1}Z
zjx{~3T0M*o?n21`jAEZ4E+WO@B@qWB1Ho+Qpaor;hTT1mMCUM~@Qgd0G9Nfz<u4HD
z!Nvg<JzIhPQDK2s0l*r08(n?ln}k!ATuGU5y83U`SaIW|7Y&?_ywNFtZe>qY!Ig;`
zt}ISsw6zFIxj;G%C=Rr3J`|vJT#%8GhSU}onS)}Z1wFff`C=6nZ6Jk!CZMH^Dj2*{
zG3;rNiD{M1H_}(!@l)r~AIgOT|0_!7k1M7xv`kcSeGzaXt&B3zh9adYk+GR=Ac81z
zxL^rwbOuUxMfKX`{Q23Fl+M1KY1FSaGFZ!qAcR1`0TzUCi&eZ5M%cJ|7#+5NmJ%cg
zngB*Dt}`0~Ax<_4W<%8qV95?7x<}ww=Fu%%*Uq=_=Eczde7?&M_T-J4s{Cm90?Pn!
zuep(pZ(GZiuPkX(Pv_{Cj~ip{UYvgE1zkHO_atY=mB`To8^;%d9r%LYhqZJJca)yT
zZtVe%1sDfL0oug$FQtJt0uA9}q0)dpJBNiz9Tfv8!9gH2q^i$JeV}3ZL0{N2d|;$e
zUvb@?U1M9v`Qax%(h|<gDwQnwkuK_><{dkBNG8rD4UtBxmBSrx{~aW(hiU$Ng*v;s
zIActhNH0cFRMgGJoM|>MXy2bJ6Q7Y_S8>ojn=#ko1i=k#t<l-^@ydx=Y}+t`6lrLw
z!HMEr1F^UhiJN66;95eJXCZo5A<@x~&_9Fz1m0Z^*a2+`f8#(Dt*AgwUA`@Z%d!lB
zts~>an_0{FNMr}s{2qbE>a$P%irbi!SBjV3{?qx>b}E?!Priacxi~2Y@Re{2{wv;v
z3GY09mQG*;D}qT0Z5&7yn*d)VFk7l2JaZlkr5Z{GFqQy7C@Vd8LFos4X1y5M$+LdP
zpqIVkw!3<J#&@26>4pC+W%xW#<||}GS=2r6<nc$NVl;QjqISdRHTcY@-)ovpf%m`v
zefsR#si-5D3r!RTywPf?YOPAmMwv%Jxv6w{j!?F3+-Nc0A;=&!8cC&)^#i<eW**yC
z^}$k27~U=}5doZH7BEXJU_p5e=vD<zt`An}JUSfzij2UO6)EQJPU-K>897z`;Vble
zm5U4zW`$;kCz9D~Y$vg$a_-Q7$cP~7>rIYcIkIZ6Aqy&M!chTI@Nl)M;%a#UCxb40
zCR~NzWY=S}UBpkR!x)c>;D#ZxvN%`w;LpsXRH$G<0g)xZL8wZ7eoo^bedZjF()qLg
z(3akwoj3gUqD&;Kr;hwvqgqErBHctpWu;l`^w}9%jOM@1jxz8(4~%88P$-zW3+Hj*
zkpnWxx!$Htl;$i<w3>m|QHz1KTF}8<qypO#`z_7~0x&S6kkSfaxsEgE9jqP9LPs7L
zu{H}(Tv##&L<|fZ90XM_Ky;14$#%gBW?6TFZm-tpQAY^x+TkdCx(Ye@+8e&CWElW~
z?Qrf%<|Z<G!)Ezefp9*bV)+$=gZ-(u{=%w8HVqLjKoyTePalGwISN)NV0Ey7|KeT1
z$?^;M)8r2PYR7fh=`P}q@ECf-8uZ)(qJ=VQ%0RI=)T(M-x<KM9Es=PEjjRd7(OvKA
zTC??C3x)E5uzvJUgTS97;WWWjiDzVEe%6bMg$MO_VpPUB3WX95A3B6$v4~=!fM&C)
zj{>w02sdTO*ltR3&J+X5mNBLfY0Kg4I>A}L1W_O*^2}g<ei5Zy65R<7qclw1XmAk(
z+JG1XXBL>>1PdCl)19yu=h5lNz2^ni`kG2wz#A6Olk)P82$lgLIA>fK4lu@;F-e<6
z>5QX>SFhilNavVHrNM^AfUWx>b%dx^1f4kue&RV;N1w;)$y4}v;ZZz#<}kk8e-(Z!
zdjm4nqu5?rz_5;!E5>NF!2B6I|8%Q&T=Ug?-YG`bZsw9#=g&=kv{5Y{P+EITST#eU
zqLZ~|c`^!TAAei{LHkY_01NT!7M^<Qk5H@mXti3{xpOD(yYD^#!0z3<@#67g$PW%8
z<#2^$B49yOHhzN}71#}9QYB?lHe>s2PI)Ofq*CZ2!r600<X84WNFRpB9Yrv#ogpMJ
z6Q`dU2-GaYO83BWlSl@&eAc3?TOmIrGQ7E|L&+x#(3f+?_+k`52DUA1lC>wS^w2Nt
z*}UzY{dv~i)!DgAFoG=@1QdAW!4QK^cR_Ev8Nt?@fMx|Wa}wh4W7ze=qu4of2#=S~
z;15n3{8f4n+zimqTFANrL86P2<EyU<Sz6@M?Cgbe=l&W|_2E_&7MZX^B2yKit}@4M
z%}qt}<;NdVQlGlymPY{G0^olk2EfOczv4I!ve_*4_xIEO{coYGuYMED=MzjeTR^j6
z5JaJ>E>ujdBK#;!7NdZPprx&_`BtWtqjiL=mQXc=a>YY`w*w<17$U?`VVeagP9O`$
zA%g~3suNZ+2hpgb!!~<LP4;=kSZ$<31zQVH&jZH&Au05Gm1O{A7*`3)qNLS2>5BTH
zJ$v5#pZand^K*+37KbI`R4WldFV%3PAa2YM4&=(M2v%(eZhk*7H-)~he-R&<{|6jD
zdl)Y|gIMgGK#)k6>#!y<H$52!jc2N$qsp>MWH|w6c3m1?vl6@siD0U<AWuJbNWWV7
zK+FKnYd%O%PY-O{rrU16os3rSyoQ>dSx}Qx5i?M^?vBpE(G@G!Wt^20Dcc@$6UiQn
zbB9{ZM0I{vE!3)zr6NpW4!T-Gw$Q}>o(yu47dMwM9`~4;wnG>PhG1HP1r1nEGVWcl
z<R;fLD_api=jLT=XU0V5>o5$L=edGq0CY1bH)BP~1X*Ll;@nWT9hHhDi*p9cvX}Gh
z0ARF^J9n_u!J|MjiYsYCpxN0EZ~wayZGQ`To_zwlAG#mKBM0>J^`VEGiLNKB$=noj
zy+!S&YfM;m%~*pOv}_f63vlJsp@&s*>ah843amm1NGY*n#}1r2b;?XlO`BT12Ej#k
z^Oh~wtQudlf9>iudxwSwH}nq-B$LU6uq^9hGbs@?F+@tC83d@;YN#yCV_{|%-_QYa
zg-K-RPhldON1ySQ3s7;xVcQG@E$~DZ!g649nN3^R>PbAW9n`xM2t^%w<_Dv{f3YkB
zptq~bq&k_lnN$-i`Zox{tuPE>TUM-mA;1`0ZoP`nTbNe^0RU-@=3)`j58xXEx$O!h
zx9o)f)vp}$9)0df=A@3nNuHC8R}8V1(T<m32*bLRr_N5PGgAk(@~6M+53uLTt8neL
z*P+#F0U&6N^_^W^@4MyJTi(8Y&Dz!Zjy!|WXf&IsRjW9A;XEpp3YyJ^@qAxtsSJqV
z*cKO-#can#DwDyg4eQX|(+4+`MPYscj~_n*cKm5f6pvtonTKU57$Pv@U{L_(7zo>e
z#hXYAY^X5a8G={xUDDrHfSNIvr!%+=fYFsUF-BxUSY6%uF{Ko=(y)>igy8Ke8!an(
zN%>2&HR7ZxAj1H@?<0ydq#r<sA+*+}63NFhJ^5oIWTzx}F*M{w%0ykZuTH-_uP0AG
zu7hy)pTA)tASJ*#aNF%ahV|<=0sx3;<LKzful~eO{P>+K$Hx;=N)!t7c<RZcIDP6=
zc<R)t;+e@ar9!b-u2!qnR;%UJYBf(vsWeEAb!5l4cVuqVjsxu`VP|vb9h<<uH|@u&
z4I8lQx;MeU>Ux|$aU4gU|0Y&lcmmtlG+d?-X#=K0aLWNBLPD4khwC9N=t7u6YcK<8
z)u1oOBLx@p0NE^5!z0V(>As%cu^<TJZ?FV7W8kb!|CcCzxf#<e)zBF{uZc(*gkcET
zZryHFt25G=7xVo+=j}?p5VlP1mB|@(zIsku<!KWr561lS-4wP>bjvNb<6Ga#nEm_T
ziZyFD!}tB}zP_ISbmNWtKeTquYRB_hc=7Nd96EG3eEOMZW?p{z$mI0&%(UlwCB%~-
ze8eF{gt&AC0GKH*zI3&v)+am+*MbPONa4_-=TLs(35=~-i{6dfv1ZqmSi5dL*oF-_
z^70M%+b8eC_R;~YVizE#2hIgJ=dif!PFie8f*(~@RPD0Ch5?$q3^Ril!@yP(0E0G=
zlV>ImW^=g_A$W?j_(M?}05Ar6iS7~a{3S*p2KcQeq&AQ;g4P;DK&@6iYLba**KsQr
zvfjKmBWKP$tf3=(w@oyIgM)Pa_4}}P?U->~!pc?K5c=UASMJ&UhkLKwGoh5kp@RqU
z_+yXOzxD8eqlaERe8ls-a{vkesvxQ|qN*`y0VXs+&_<mBz#?OOL$vMM-uwqjL4;Zm
zVon-JuLg1KSxg;y5;F(x#Y<cFV#D<}Ve{7Q2-d8{laK7g(HH(6R|T)Ywc;)%!H{y8
z>2;V%k_+C|4c1u#CNDenUjhKlnNfxmDcO4Y<(D7m?;BXLcJ11$<Hm}M^baDC)~^OZ
z`+cP(!YG2$21+RyW1y8XP0xEpI8K=iZ}56OdhyI5^Suz_#*G{4t#5rRf*>${Fo*vB
znv-ycKYGXQZ~C_@R*d4*iIX^R;6QNiefJ)I?)m4Rl~SGoFi(ulF=C6_=(5qKsg3cR
zWZuhlbgNu0i;jFAnOr9rV<<;JU+Lr*)?4KdsALK<vQagJIom>K)<vmaMWH&2#czBL
zj~sdwr>=f0cHMLb-g@&}@zU5TeEGq@#qQd}$kQAcLD(EgM{5xhcp0DufnY9U2B=r7
zn)6i1$TS#3m2<9z5MZ2vSUVF2Tm-=-Ot2(cNkmdY8v_;hWh07Y&GWq}K-3j80q=3u
z{6gWoUWnDJSJV67|2_mkXwFW}fEr%U%9U$BbK7mV+{B6S@I&9kKYZz)sr&E0|Dk%L
z@ghLeoQqiiC8cCdb5R=_nFu#-y~4Wcs;fG-ZeG7;WMX5kw<F>9cDfcZAsItZY+<qT
z!~rk(v;W*kwi@X~)WQT~s3csZJ5p#SH7*1WE_fl%HRdq))lcGU$DYCLZSTY08*W73
zPktB=eYqcFCq9c_oMarF0HGLDMraLw*{MF3WdIZl3%aADM-q{5S=@IMu0!pT=+Xg8
z0I&A=m!7vH10^M*NXGpDCO(oCw3-DIG&MK!001BWNkl<ZsUm=u(K4#E8s@u=h}W-Q
zPj}vVCwxCNVJP9c$<a-lHh%fmTW{W0E|u_&uYX;B>eHWo?8TQ}dI-Q#F2oc-1tp`Z
zo9d`ux9?5j-9Pb;bvN$cziWK7XA^)f#8xW;-~nhZU41FEdam2+Pd#_#0xeufTR{_+
z-$2qRbf!24nTL^t!GfzWEf}Uf;OxoA@xq@UM``L9Zg|K0amRb!i~GKm!s7FvvQyzX
zYmp_Qz=h(8IU{g+_6#orAeBlZlFGP3D5DJo=Qh#B-M?f4$XpW7Tr!q~h#+OuKA0&H
zw`&vpM!h7XphDaVgl);EzWJ2#Jnx^qvEJTZeDtFqHP1f#9GWd3Q521C-@ff1Z@cB@
zt><QEaL+yWH2(6hK6USfxeE_5#*Z_`=A@Jr;iMOT@;&c!-}lo$d&iruz2bJkX?6Qo
zR@zq!7ZvXTXqhE25Npz|Yv(2B6U?&WP9?vEx?>^q8{k0`y*faqQAK|4JTm9c;ndkP
zn0n+M+}HB3|DEr{+u!j{JRlf9`QpR9o@8!dh&9bQl#V<BsLL-BTn2#SxajD}qq0~A
z8M1`1Qp;!T=-cnuf68icf+#k11^{G;pjxeKLrus~c4fQtjVt%#{K4}`A+`K-3=E4{
zL>cAf_c-TJN~2n9z!-FG*s%T!x8CyBtur&z`2630zH;|peDZIq)#^i>i!%Tgr81?R
zd#-K$+OL1)EpNYV|1WWd^#JMsiipSiG!QF#DGCVx$zw!9wAiMd73KR-wu8uVpu7fr
z%K}o__90UaAuNnUAyUN!q)weg>iAJio;iaD?!O;5-Sif`<+iuse(qc|b@uEb6*P-g
z->p}YLOVh2qBDJ&$T9#T8KT~-5(|AsoO3Wva5I3N1gr#%;PKgggSHc>mxnnlNj$7c
zwOj3%&-w*qWTeQbvqz30fB%4a58l&0#~+IW2aoZ`QQKKZTBM<rLN1rX*|XEoT4Qu%
z<o~_>wp({E%+KQsU-&}h&p&zhU({-~uL)t#DkUqzPS5|+UBA-x(ck&V$6Q<7iCED^
z!~j@Q`jVoTlpX>I%_YwPgeD5L2?HptppAkF0}u=-h*^smgC+uJ9DP0ANGB6Wr!(MA
z6331n#RCs~4Y%EXE8cX&b$wsG-~Z{Usk4*yns=@{pMx=-_zrvN4U=U6gbj~maf&jI
zLqvw0XYM9@W*BU6HK=zK)IAK7>H<grOaNTKa0|v^Fzv&dux-G004?KruUrCJLPwEe
zfGKDncl&<`iPzT09O2@_*ZvX`i6pev&|2g4nMvewxsTj>+s*F`d=K~Cdtd95pZw%s
z)oQi-gk_(Xk*o|1k1c%s6aRDPyWes1-H7K+UjR@=toTcJ_|ogwfB>;i5P~3;lxisl
zV%s*plfPnMpp`-<oyNL#Yrz;nMj>8#`4xQafv@2m?|28Ux%$e9;zHq<T^CPx4xBs1
zF0<VaTmk@N9tGwch?D~o0H1lvh!Yj?WFF)s!R<5zPXVbOm}EC}vJ1-1wXY0xx&urD
ze7*?sCCEy^ST;x-p{rFGK~OUKj^oUX(I^&+a9wv90FL8cf8Dj${6<%2C%$^$S8(@V
zeDZG=%jGW#F6Lwul}9Jm7ykBhpSk&}Jv%;)c#hK?V%xq%^FCfn`BD42boWOD$VjRS
z)mpuF(YVE#j!TcB<I?BGKxqxfaWFnU0nhW%Xf$#B_;Gymo8Q76cf1X|cJ0`;SYG^h
z&p!9;FVq_iTy7w^m<fF3airWnL*01;@G!JQ-6S$FOvJW5Yyl<&Z&U$!CeESB_AoEQ
zp?CtmorU}2DPX<~k6CDdL3ea#S^uajp(qL@aiVXV{4vI$P$<B*Z5U&~7)$KickS<Q
z-@eU0bnpdy_OqY8e`;##?-}C@%9!fPbz2L6^O;ZIv1iwo&m-1Y5wG6i|CIJG-SwBg
zjtG#A2&XSp<zy&TuVabj83S4=FwSEKnCQ}BM9ULOwAQd~3!|f>sFW+HR;&1jd%kqI
ztE;2$s;l?)pPici`RAT{=1bF4XCH8!*H$v$NLdB|dnq!VI~UAiLmDzHQkl><F161`
zFc{)6Bw&~TF%EDJBM7iqe4I)XECPrTgi;Wp1XBh=n=WH0DV5}_>prSl)1%)eB^pH$
zzVY=3mKXZpy!U-~-MIfvyBA9(+;`u7XP$cY*}ux>y9()aM{C258|HuWH-2s3o?YXg
zLOgH!pDKTu*3HF~@5ReNVyTIpU}~W`J6qS2Qko27Y;}C3Jf13Y>5Up(97MGo4x9LW
zsWgPJFf=@jN~MN-@4ffMkAM7+!tL94d|>b1Jvejb%<t^nx%*p;u>hBmECXOI0jFgI
z;kC3O?t8AO8t~Y$TlVWOSq_SG{{~ntt8zx*t_>qNEEre>I7;@jQZX;I5o)o{JpG+R
zp(u*8gFQXHE3Ucb>bv@Sd+?R}zJdq8`OVK{b6u02-Gjl#9oJWW;X@x@yKmRXrvT&u
zlyQkiZ!S`N1hcICD4s@u_EZ9B0Ga`)2IlOArk-S+b2JvmV01s@Hi&T;t>fkoCScmb
zr<N>O+$~N^gUX<_fm8~X?V_)L0Q>e`*Zp^Y_qhkZ_{A?C`{|$gnRV;duiJI}*zupV
zEbFf>S;R}o<c;wTmjQ5v1(Y3_y4K17QKYCMb)4pn6F(RK#r6;J2)3nBEJnkEhLuV}
z2@YGU7y!m(6H%}-iqzA_C@};C2Z8_J+UV8S?ECqB*Id(oZgv(AKJ?(jwR-E3{=qT1
za_#QcEqDBs+P8b;cL7Ww_VRrIfibW4<`FCXRl9!~1O|!#YDhCX@0l~i$Yu<IQQ=+!
z5=0D)GnjUzgA1$eyATYhz5m&(l3`lMmy`;Q<KoAD{Ks$Z>h2o5=SyFH_{JM=T(xKS
zZgJ}5sb5k`{T&f`K<xLJcElv*8`C(p41l|vfL$b$=wgbDk)fgmsWmj>>Dz|I%`mYI
zY+vo?#0aDTVKhX_1-ArjsbOotH9!h_Tho{?kt3{;AY=&x)x6{;dU|@OySv*QJ$e+`
zT(1Ad8*hAXHk-wxj~ob&9y@tYPya}3Xl!$^=ek>??*0)vU+}*+G2q^gSfSyi%5OV%
zOG;O55G*U+AXa{$Q7QyD2?m>i2u3AktA0HfR(y1vb7-Z(7+>Z-TJ8|0`17|xU<{yi
zJhWOV1!4?6UHw?MVMF-WfBor~zxvg$zVyKlesKHf=*YIyXC{B#65?+FpjeoP@B1hg
zi#TxL0RAQZ!Jq!gAAeszx9pPM-2xhO#t2f185XueGaD)sX>Ho8r(u?jL7Vpouc9!L
zA<`)qI_bjU3@#(sjF97O7iVTj6WmV0#O_NRY9gY+!9nD5IRL=Qm8;*iXU`SG<x&yP
zJ@@=$8vK=k;nixxmc8NV#Cl0&(kIS&|9id?eH3vPV%eiNShnrb#0(%2lbF)6@-^Zw
zdZhrz6~H)=!x@o|f)z$a`<dWijK_TkQ2@(H#yG$9!-8N8!%{+AYYnB^|B2Ed#*j*<
zp_KJ}I@>k%*kg|$Tr8K(rcIkbz<U8e$_Pp+D5aKne-H%U_x1hCG5}_bF@srSLZKv>
z4kK+!o;0O++r-sBZQ@h1c$Gg8mw|}@(h4a{fMru~Y!0^#f()b43}bsh<iNG8m6rg(
zb;q%0%@(THY5-tebImpH9_a7Ki4!Nx^vt=3yL(5%!O?Zms&(7d+VR{b$EGAP${aoC
z|M_A=eU<=msoghAet>~82GW?=MKxHSL4{gmCIe%9!O3BqI1`Xzqw+QadN_}}pO)-8
zx9v9A<6gk!eyH|vO4CM|)*4F2EWiZ^5zyJc`pLB$c9jdI(&-lt9-LmaawW3a?DfW&
zjZqX{j4a+jc~wyQ`7(^<OAY8iYAV(POfSXc+8F3pF+ki06t9C>p2_Dx!tKg|IW`i4
zA;Ad=B6L~&R+~{z=#o3^fUjzUU}z{ojzd@|EFhUo?cA|_`xSt}iIXSKNX<_64NYKp
zY-2dKVxVj1>eOGaA5Ff8G1A14I9&+-M?KJAX9U~C6dxILk?Kv{x*89iiw!yjz<k7M
znsd@&sO=!s8L#25kmbTpC6W$oTfnj`NEv}~0nWuG{2w0`Gqlta(*{7B`lV7(+Q71H
zG+I&MnT}K2cE72b$#xZ<eg64l$%KR9;UPyUealiu)f+9ZIvl#Y1awHH3Pb_HRO%6(
z4Yj$#ZnJ<g2AVV&Gz_t&O%Q960gMrh3ek~EVIiABLTUI$!qo~LV7tql?Qa<N*)S>m
zn*ymzfKKIX)@;;Op-{x;En9C|zhS*tER`@jd;X<tzPr}lH)eVU#{7}K<ZS>(MthxK
zt_S*fv7ru14Su#1{n^SMn-YT7sEc0ylE<%?BDHn~x4KXciZ7ig+)`Rtyy4i%g_X&q
z=+sh)z6@5Rd%Cf4lw%;t5e5OAY(7>tW6ODgi?ayhK3`)Dq}Gt_KU$%U(YE6@O4X2_
zd2#;T>&G_!kCkgSRnN`No+_0}Zyp~X6Gx98yMb~3-;6P^EQ>M5-mogss~F(FNn@sK
zOB0jOs)godKhlxZ8nSHyw7DcCBm<BJu_b2^AT5y=fauCXBy1!(A;Abq0tOxNe$M!W
z5l$ju!Fs!Gu@#9l9e(*`1Hf9fYSrG}o*v9ym_y48j&*hqqO)gIcXf572D`2O?b~$M
z47&fZBP~`D!3va#rpod!TT;JB1glN=O2_jijUi~x;rpRVKKR7xJ3jg8hd=Yo6Nf&w
zSSpQf-#+r(jz06vE2bYD>YIF?DlZ(weFskC{>RQ@;n*3ZiZc*l3lJ8JlY|i#Ks*Kn
z;xKTj`9-#`Na5^!EBnrf<?ayN<Q5y|=5-r(77eH{Gd(juI5-F)#BSG3b*Iu9xULJ&
z^WL!Z;A`dshy`dnrz2^h8Avl#3(aiC*5i_ENT%b%A;iFpZqMvD7oEZOqmVv2Ix;Ah
z>qrI>0;LgYgB+tZ1D5#U`5^jTk+NknnFZDBIyHA55Z0=7>(;MvYzy-X^EJb)nSAFU
z&vx{oBkK-ll43i6rZ%WsoCeqQ*>{~NM1K$&G(u(6Y)yY*C`)g1I1TGKIb#@ulp1ns
zy0rJ%!_(JR>h=20?PH%?w|4O9WIl7&vEccCcJFWT`bo=G4#-KMpt^A=ScwN&KTe$~
zVh?{1!(BFH{|bctt6@6&VVo35*nrm1(vL?SD;<}^Me<oq_5~@8%w-Y<&yTiFjI4R2
zqqDa<Gdr`eZo~SaOeWJ=sZ`e|+~lK;MpcJl_=Y(GuK_@<03-%=L>bdmjOI$7d8s$4
z#v`pDHHRbv!D4TKVB+2127@v2u_>)2a<+p?cOJ|Ok%}au_8h=|!S9TK;{}7y*i2C9
zwOUcV0Vk6g85kJo2Y_m|I+w|G1esh9bCX&0cG?>_LrQD342+Zpo^8>}@h<BF(^dJ`
z(!h%}%!Q`@T5pnF>v9@k458<%<O?rPzoSs9j;vhO_u1~@EuT##xi1xLEg%~I_=TUv
z(ZlcIxh@z%umr=P8=zmmf`HH9kzfq}nAnK1bF;YO?6=S_z66=c!|xe~>RtieJqDTR
zhLi+F0tyz$$v(k3%fP5mYTc<dsZ73?`ud0cO0`<xj3JlJvQnwE#Z4q0?d|PGUtced
zA3sh(5d6@cg4Y1xcOs+jzJV#9oEB+at@`XxGt@WPTssldu$YEI><6&+Am-Q<AO?eu
zLqZ<;=<P`1Ts4Vg7$TC(&LkhU#9a(jo-^`(KWW)C)?e;LVnugnmm7s4TAp7>W%5xn
z)4^@WVXjSU0B{2n$N2HADL-k`x{;i?^ISvSqXA!OV7_G@@6XV>s2T2f^5EnxnUpB+
z+q>ZtCSgAoNLWFDBpfv5Gta!mJn`WFV`s7uHV5YfBwREFM~)d}q6*&04q`eui-Va>
z_`G==Cd>tF_70=_<l~@Y-$ck=cp?EW(Sw%Vg)ljCQmnt_q%q8@R2n0ta((aEVBaS|
zcB+4HMOZ1Gt|_IE$z%XvSZj?Sj9}Z2dBZb-m&%1Hqxx2cK^WS#mcsF(XO5+9wN)~O
zh%pFaU`)m5VhjT<`2z7orPwKy3TY_h`#Mo=`N&2JT7}T@OunuWNBoA?h8kKuGSRnU
z=zJt6(%B3JK>%$~OK0+M+>CH+E1ge^ek{fH8d6gn?@NuqwP@vFhTk^dGT%@@VB0J>
ze7a1>kDUIA9UBLZu30(sl?YfU2N1+y!9i2LaPWHd)zAG0+jU&qu^|}19UH!F!Q}u`
zAtKuWF@q7RW7vNj7pyKk%huxl{O!mDB}~Xu=<v^if)b+gQAE{6SUdjB{UVWS%wH(2
zfAN)>f7jiSInvdUIUOmad-{h}rFgm#MUhOUlLEj15g`mCFlO*ZMT6fK056}185xPf
zkVMTGK3{0ziN2KHYH<ZiaY)kOq`_#31<;<(tYbhh0GwcCfSz;`t^O{kNFk#XOdvr<
zgBj`_<NP;+$p4=goaA&ao4dlYErd}B&Mn_gW-QB2NFi7z;jj*45Eu<<5c{Ku8>}QW
zLWk2xUy|NZmh|xXx$3ItpE>edy@S199vB<?h5|-f5dv@sFi82#(>Ln}|KaCtAySrO
zgENA#1wzLH5y6Fu|FQ_T0Wyf%;O;{ix9BG@<8|PayB3G7J)rD02x>K?k|j{8q=mJ0
zOa1v%n~R0Ymd<?osfp3P&$L=Ht+hcqog>Fd22x7nI4%J60kI3^`{5h*XG^~=0RG-L
z<}Y@T(jBr%nilI3J5=)Y>4Z=#L#`kU12+tuR6M5LP@EJc12D7n7klEDp@-q_G$w-(
zu2RSv4~P_)(GZ~SttR;Q^?K>ar``0Z0U?ScIA_X9BrRdtk`WxnD5>M=aZA}eWlTJY
zrd_LwY(bqlt#7>lg)=t}4E8*8<=(Yl@+4TOFl#Kd;Dwp!kq6$6Lr>gp*%r6#1OyQ*
ziz9MuC?aH7Ji(l}4KTz>FVfItAR(Y2(W9%#2Tx+PejXQsUd-wq)Qyd(Z~G)=233w^
zWu$+_$5To7wC|~;F@|YljN>LnE}K(IDNk^2VL2HV=M#4B+6^h?4?QvT9mm8ybQbEG
ztPUb>%EsuK3r+TDr>j<SrXYxelLB9!%in%%S4Sw02f-MFRtA;~uwt+iQ&Pe)2Dz3G
z9%*<+!__LaCaAsncx_R7z7H8m5HVj^woQy{0D=Hp8zT+OQj#Zj^bO2XX-a8?Gv`Xz
z?^xSy4UZ3fD=<hJ4y}MlojkS0JpJH1X#U(PE1iyyx)C5O4ryCZL`abVbO=~Bz}gv4
zYR?C3|5Jt#5l2J{WI}X@XOZ!bp{^3O#5H^VoOKONOFy!FKeBvZW|s;`Fvi%n&6BAV
zk6Q{ZZKE>~LSWy%>weI>{<iWR0q{f_Si2y@OutoUghDOEQwuG#*X43;$QT3>I2eex
zO@UD$)^3<ssu;q6A#SR0b%4>4UQ7e97Ana5AuOq&VZgK|<+ZGOy$;#ki71jIjQBx-
zk^cYM`|=>Ws{73EoO8FgFWv9;-fF3(ZY?cj)__4Qwz0>?iH%Zr#xpRfNis<$c*9@<
zQ*kQ9P9}Dev6IS_Lj~IbLA)RgCdLMAj96r}parzITIxmJ>izA@-Of4l$GNY&A;xAA
zo2S33r}w(L``*_5eP{bE-%mgn6227RLIj3iC`MB(pp^1Lx!yUGueGmV+xo+3gmy3o
z(c0u0&3}I9W(*&{KqEra5(zLyzzD!J4Zg0yCqR@yHIkzGl94YViHZg)<8yFH;1dBK
z6dt8;n1-qVwEnA}*0Q|?w^q-3o|3|U$&@ZNjWNqIbxqTlr=;#*G}LYTtw|eySptkm
zDL<AX;@!<&O&a<fxEwoEAwNl(VkM*8U_=QfQA$*aGzcVkps^Qt%&0)4gj#SPAqw<#
zWiZAV_;d~l*9YeuQA!|f8~I!gWK|CgL%Ym0L=z|W0m1cCjw|XRlkvc>-|+1V076pA
zeE?Il<+ZKNk+Be@TR%CxQA~~ZXlKSc<m@D6kq8*0U_^N<sjk6cN)%F!d>@jjk>5Dc
z0Ez&MqhBeAaKhn%!WR^t6p+czX=}rKb_w5)ODS3Kn~RCDQi4)QjS*^DmZ@pFY1eH)
zMKIrT{8Fjd`|?tJZ3FSpN=g8os`>J{iHh80Y5rzP2^b-ugs5;ZRlUC!8Z=O*j)V;o
z5CX|LEa_lXXBrchj?zp4&7Oy}kTA;*3i%u~O$Vct85$WNdTjv2FITEz9x@}63u#CY
z2L!eRYzc&6*NIcDg(_9ADK$T3)`tt%idxMil7ndsh{eHzFfL;hQqy1)K%)c}QGE)*
zbVv#i5=1&0?~oAS;8G}eFJbUFhc7ui;=_Z4HSqo?XgKBhc0B?tMx7RX&;rmHk-Elc
zC}c({qqI`30tC}<f_;A_ex+9M&?NYVj9;%1eb$h2Y`R7sOBiBJEA?9!_5cl6KqD?d
z0w42BNB|H>F2MXcRy0RYh*~J-%8&wxSs|3Gb?CZ|P{@L=F%ZLm=hIl-cHnsiJYS@O
z1Qqpc2_Y;uL&~`_LS_P%Q;I`KFw0a0EOh~97>Wpt!J`C{5SUa#mqJOtu!a)YqTvyw
zf(UR3NmYP>a^>xl96sgn1c%mr-t$(^xkJ9^CZr@p2)QuoRf@b?2Mmo!LnkC;nMo-@
zOQjMBAyaRdRbK^uB?0~^C*{AKLp-C&DG6AUoa4x784rgvemy`8+EB^Rh&l?A;G#qZ
zB%pwxAVh!!29TUU_%@P;j(B?#RZB<ASczJ_4$3H!i8w4%2eV96>Jp9{h)*sQoiwys
z2#8_9(^VHSP168IRW}eR0bPe65%?^~<tKniB#2aoC3^6mBtanyY3wSLr&CA<j$rh2
zrkoH`z?BYUtUVuIf8{PI5s^Z$1;YoeZ)A`m1V~sWlez|KS!UX{9TbZtP)c993dS3V
zS0opI{}J%_UC3==`t!PEV-=6?7%ib|4dw5r#9v61Buf7gpa2UzLW%_H`wg*0KrOf6
z9(1>cw*CS1cU_9(gD2oPE}GJ55RF2&bhv_`<_P$HLy1In36X>Z`Fa#oXVAF>(HI~Z
zBs2&q;BpSBX@TJZ8dQVJhPNsRVK+W6j(%16!h_hd+V~0hP*XqGbU!rkzNcw8<@=5u
zUFdZr7md%kdTERx9MXhFJu_rkskvMpwOWl6LJpoyL%vqLA_6?(OZnF+;*$ZVN?}fG
zltkxkJQAvimL8LBV$1?z6ohFYjDZlQdjEhy%3zL=L`kjjpoJS$2N4hfoOd}AGz)WN
z1aouq=;~_6+*}@p4roN8Qgu;xIZQ)?Y*ZvcMdJ{p`v^k8HB(hAK?0J4=^Ch1@~)5q
z0t^dvu8mP2d`2++3n_wkl}*A0hfgGY2zZjiClto&3!c-OyXUy;#v2BgLPBu$;ylO^
z<Pu?%A{t_xpq?^KGd(eJ2EOml>bid9?3(hm;T3lb`CoY{zOae7nXF&%eRi5i5+1M7
z2XxJiuL#FivQQL^5>TcE@pB4L1`P~&5ebM|dnG`)fXuXmUhp0yjt;>zO^l3=Vr_pP
z@~nh#*n}-8iX|77st-e>;Egm~0FV+sD5$Q1NeU1n@G?pe;e+d38FL|*Z!wE$F|$=2
z`<5oY3b8o)xlrd%9|FGbLhD?A%<Nb<%6%^`gdl3FSMg`n<U)W837;z=t!P+7G^}wZ
zM8*fgV`F0g$WEy0rMDcfs%Ox#gW&7daeE@==QQ0I5uoO1g?x|A7Or2>lWb?9sM-cF
zrfLTW0SE&FMWZ<j0Z~K{1aRu`He3SI)P{6&7KwNq6BB3PxGr>!0^CK!ilI`IC{_g$
z@kKp<bxBQ0wMhvd43g<UFnS>w#FC_yg+}8GX??+Z-|#3AvG7@lAOU8<s2p6lU~Ro4
zM#uUgA$Ux1L4?4<NLN`w!O!~w+*8wkJgOmL5$@H|p3fICIXMN!=%Z)LfUg&?iU9Ws
zDSy9-`2A_G3Tn-OKo?ZgM=R8#r^i3h-P@O?iDnRR5XK-0g``xyLphG9^0cVuZ&~1L
zFNCJ+XiBG%NF*>lJ&RMrBUshbjk;Y%IFW>@GnA`7Dm5P=iv=DaHT@Hbpn!wIrzQx5
zlH!m8f@wiNVJIgR)NUVG82iD$i!*@AA5+E`QW@44E@*S-xYn}zloT=|d_fw9S4LOH
z7hHh*GU$mUkc{a_#SN)5Zg5JnCx(Vluh%QOu0L{i%=h~7s{00hV_wQ{XNh0zt5@t$
zbW%#fJgU)CRVw(&lOJ2P*6L)L4tNOG>R=|2Adr-THRb^>fN%<;b1j%q)xgco%{X&r
z5{C~R#`<;rD3xYlXdKaqhH{N#Ht(W68(LVqN#iI-HAtz!XL=Bm2;8kw1V=n9rmiiS
z`qihUGIugaB2+F%!6kfd1BvD-t$D?`6e7yGAbiOt??o?P!uJI{kAqQybWB4!u5*Z5
zrc$kkjvhM>Lg-@vMqaPs&K6!%=g?2gNb&FhaSukTCC$?&m=17eV8kW9d+g{()=2av
zd)7A!s1{W=8^VkrV4e%PauY~2rP9cv5wx^q(bSa2@W>d($0v|ZCE?TxNJO(JRyYb}
zAJMRnP>2B{s7w-Sh7pp$Cwe1WD=@22j;bK5R}o-|x(OD4R{53%Bn{k*g2VS+iFo_8
z7H^&vLPYqIk*`L-8u`Ab4Db5_p07?U>9~$`%0x6o;Mk&N@Wcts%*=o>cF*fI+S$Zw
z?j3y1At~&uiF<;2MMG**N>6}<{WCILbB><);2PV$uw~#9Ld`II;R6jH0HLbgqrpKs
z`oS0jqz|g=Xl-pniji2z00EO2Z07(Nd`Uz>R5~?+nb}$F+_eWE`|WFy%jb|uWRZ;N
zsMLH+&pT+#hJrjzp+q+bg8+p~G%zfVc!|I@u`vB(aV9{6Bn<)tCkrXTeILFAC-K%<
zYDLR}%dp@AFPip!u`uEnjPFT!j(}-UWKssQDN{<}MvH|~bl<)M0I-7)@`Km<%-;yS
zuI}N#{Szr3`~Y=NnY1W<CUhx$Ksq@iQ$093H(M?~a^=eNFN;Ll`@khvBa9F*DIpCD
zdS(R(1VGj1u(`Pjt!-_{<#RYSJc^-Hr_kNmj(T|xP03c2t3GD(F6Q$Nl5rg%1XQSv
zrjP`lR4r(L#&oYnKMfobWQp+?GcX#$myP^>AA%SziKdERhTy)4NhucE-f{6#<EyVd
zPr!AQPC|3iK(@(5G(?D9cT)#mIEcx~N$9%vHFfTN``~pE002Jvs1Sej0qXU~XxaBH
zp%du};@cH7T{}`Eb3;2%e&qaBv&qg)mw?8z5Zs029<*c!gb@J~fyO8SLZL9ay1Fnm
zHHAW<h^L-<2G?Kr2{?8I(YT9jlZBeiF_(7%LJ$ryb)p~yf)Kbq0b{|4r-7hzkjA~}
zs$R;1rI6r)OHj*&VLC#>kRG>0;N9a~m468?7mV(E628Zk@m*CIl1}JoZ8DKfn^JJw
z7@s&}?B25ngpi;4KEMB$JxduBn7kB(5O|&k*LBZ&zQF4y007+as1P6DNWBX>wF(g8
zl1f+j+@Z{}hmB3yvEkCim!G~HJ?CDQYT9rKm~H{7cBL-EeUKokNC?o{+JcUbc2p{5
z44ycNr=H${tKWMSiup-oGCio<CTvGwX5K+MX}~n-g25dSu*NY{s%m8d5=1N!kY&*w
zu<$S&Zd|5GfH28rSPDr*Aaf&@Z2AOOqu%!gd{1ro97n)&IN}ivZ5b2onGkg9BbP6+
zC!c&8#X^yfkDvaM=Xvs_MwU`_JZa<##-dU6{ly(CT-U{h4I8jw{d%}T1+{Dh!-G`)
z*NU@3006k}kQC?Sr@iKl5pmjU=NwW9rb`p2esrek{VR9Z%EOb-?#gx^KeV>zoQon&
zSFV9Zsp`@N2_Xn5l`u>b9UYyRot;HTdkqH<9z<7XC)TW9g<5$Qo!J(6zQpM%8}oSw
ziI@SyU_rN0fQkk80~k}G0YVW(EgP+7v9KXrfGYc<QVObS$byJoW8D`rXmq_u0MFxa
z9Rb(nh=v&2GbTDRVZ_1&wOSoJpWTg9r-m^!H26=ucI|vZa1O&Tkw_#KR8TC-#I@IM
z0igtI*RI3Bh7GVC8;mkgLcs-x=X*#cQ%EEes`wO2vR?=h#2jAxs&du{005y0Dci~;
z{!^Elc0~5%g%@K~2u{mmKOK!-b|qu-;j-_)aAxP84eg@2uj`6fGLufgvP@8>Y7C^1
z$Ye6;=<GzLQbna&#bZDHDN^Z=A)QPBei19$5|9#@n6XhPxrl@{MFNck?OdSByBUFG
zDpcK=VHODRAEwgANuUwOUv%>DAh5G^?N`%2hvy1JLkt~R3tg=tG$j~Zr-uCpUcl4O
z?7-OQ=(A65f8tBFZNoGS-2Rt;iOrig!*LvNuG-dicC<qR@O>XrNQA;6P|Cn4T__->
zl%ig%Lr8H}3Bdm1FaF|nn0yhp-+nt7fSr!S(@sUUw{DarHzaHt19ywVo}THbnmy<0
zyzrz<bsQ@ReSBtSx-c`Br`2jLEQHWh6G}ig4OpfDyIzOy`>2#F7#tizUw<D61VSc7
zA|3@G;d&C4svmg&)GQzb7N+&!<3f~9EHP}OreC~tlnZ5K&egi^`vTlkM?B9H@LU1M
z=HOf+8Pm|&5<+)t2+c_yu2aL&ql38r{s-XL4o(go|NDBa_C$C03jE)%e;u1IzZ|-z
zArgro910_3S@1j;w&Or>4nhdHSQODwRY!h6VpWmcP@R=>G4Z6OrR6o*?W_`D2*61I
z^^!n~*(rH<v-It_tV8Fh%{=dG@klAu_a4E$)0BD#1R-NJ+Zmgkn>{l%IpxgE%*G1E
zl36KN7Yt+9ZD_g{oD4?LySf*YC=w(SQ59{LK()@{x@wcwaO^A%%L;+TfKBlAQUa&|
zPT<aMxOF{s#`ip_)_YgNbvRs?gA#&F(m-d6g|3#s_--A?kDtJO+rAIZIo7RTho+{c
zi+s=Bo5^N|FTdgnghEOLOG>#gx*Mr<gph@v41@$pG*ShqD5Y-*0nX|Y(13uz_M=aV
zi{k&&OJoyON0f*sb)nCVe9Li4d!6K}ExDQ)NQ=szgyS9xo9=L}Zch@8#X)JTSSo^2
z2F`s{YgJ54oZ;ni3AtR3KJdT~$Zvl5LtvD_v^Z9FBoVe4B6Buo3m&RA5A=FS(C2`F
zF#^g+@PMI?kH26u-I(?l-WN81!G<qrEguarG^Y%-q)oIoTZmW$^?D8a_aDIbANT=Q
ztmwv-S6qQZM~))hoJp_SFmT_{;Nb7LuAAeWn~bq%vD6*;7UB&d004My9lQ2C!dGAO
z2{+AR72S6^7h2S>)%H2g(WCW9(?z97^Hrg`ae2gW=1q+YM>p(l%c{l0!ZUTIgNChU
zYS8EQ?w#JVdsju*jcBc2Z*srynpeN?J?QOS1tI3qo=G7V(GiQ-m@Bv_ls(w4a?CJB
zpfLibsnY^ovJZICad64{zjRh;Z2SNqWHO}U8k!RZGHDY{Ndp??D3wZh^2w+0&<}rv
z)|M8$|LUvJ+q()Nz_U9`=<exBUGw1&-G9-A7h3s3LC@#&|Hm+lTcI=!-cr0_1ONcv
zK7tbm@AWrc{D-o|^+c&oeVtk%jl0|}=ALkC`5mqqS!G8O10hRmbG@0}rTp~%WXNZ_
zPNRUCD7dMfqU`d_=*UcQeyVcx=rPapWYTur_=OjoM=rYHJU|LW!cna5iXfdZFkf(x
zFZ(E0Jk(qP#}R-dKp9!^48C+D_@a%U1SD6-ER7Mw!W!aH4XK!hri6)f!a&#}@O>BK
z<I{NJiS5|)++IviO^$bUw9Qtk)pN(jPGfa%FF+_}rl--_*%1>$qG!blSf=&4GgFgm
zG{$}(s-MAIhBuS|0Kf;2;n?ZBIp6##8ET#4Aztx3n>rlS6t3XhuMJ9B9X7ZgC4{A1
zO5+6=5h;b`)IBR#8A;at`08l;`OVUt_RGcD+`eOT&eTjUR;!lIpO`okx#W`HKzCOM
zOw&PgJc4vQic*!MP<BzOc&OAl>Nbbt1xGlphWpYvScMDJ5@9k5(_#o)6wxq4EUF_B
z)sT$p2w4<T_$U<0ICSU;cKrP3n4O)&<mBZ3r=HsWPd|C=5uY)3!+WoO|3#Ei#G?`H
zeeN{&?ca}hJdXEXbtU@y`(Rn-Z;p(PJq{_aV~oA<M%&@#K+cv*#V_|z^#JsDV0QkD
zwDg=uJ6hr_3|;eWqB9|NJxcUw*wEu)O;1LlMM8{8BK2C?iR6k^D_5!-m8z%bW+!XI
zLkB9A!gN}2FV@|?;+)GiU-6&2SFGq=+qVYqde<hjwqy|sg`gV-B+=n`1l78aYRyO8
z;c#35H*nz!5d?;a@)Ky9>W^p{6qdyhu^1v@4Plc)*9fHWQLa>Q>eL8!?S2l!!y~9x
zEB5~Vd+*=1Yv(@;&gTKFGEKAfPj9{L4>oVU{Nl;UNzCWwA%s9fg7(sPUxLdwUk2N@
zF?eDqFF5}nl(G8>0W_w83;v>GpwE41ng)$&FMA9;=bVkN$!>4>44^;&;lLT&Bge)L
z^2yAlqUYS-=2`8y=b2#|ry6mpgw;%tFfkD)6dr+QySC-H(&Vm$&)xc5X{ubBA145^
z0J_J<M!jwKeRt&C^Uizk{M_7!hE5H~dsp^g{rYuiZ*N638ilDF2q$%9k`{cfj)`6n
zvll`v5`YqDjH(8i8dSk3Bao8A_Z&=57ce|Lf)@@R!r0gts?|EiMo0Gi{Ml#jotd6~
z48REh1^~@*9Dd~R;peZo;);tc%Y<Q=s8%ZwLZDbG;og7yHVz#+g#UK^b=WwtAvJj7
z#C^qL>CeNV(3jpEdo1EjBEVAE@McfRp(l>>llr%LQ(qe`JJ+CGj1cd<d7PWkkg};f
zGhZcTN3T2iqUPEjCMsorV&aqsRS+@`rTgFMx=wx9&S$qBKX!D_rgxop)zswV=Hr7W
z64`79Ju6nAySo$3&CQ5LqX=0hOvYeoK{6@TK!Xr9=Un9)3l1(gYBd|hVhPjJGZ-Eo
z!N|xc=5smJ>vcIXF@9j*-sc_~9UXZ}N_iB(bntiiP$yv$i$!TmOABn<4wS$=)ay2?
zl?vwO=J5URKY+uBkKm@y-H86aJ~BK!^2OP?x!!0b@)-hBdb6zYCM^Lg0el3&*Iwr9
z8v#55XeXfQ8Z^P-B8=u$7ZR&H#JD&Yl`3Sh_+yS2cispAXboOz0O43H*1Bd*|AlMT
z^j+B0oLQYn#I-~sfmAAqrluw&6A8p(QCOA<T{l1pg^&WC=b~;qsFX{{<qDXe&tX27
zL%Cc=-L_FFmuAPt#`YgScJ%4-@zZ;ylqUg9K#5bo6n)`v_{y(-^{c;o$)%URd-BXA
zN~JPR4G&{vWCXLbvv6Gp^;#X_a2Pj!_A|KRipw!IHI0dhi5-S%{1?WwF&4Oje+`y^
zUj+%k27DjBABf2t5;L=N5_2QI8t@tcoTYgjfRcb80gwZb0gx$|%jJFho*O%GVBb$$
zT3Wl?J37~Qbabprr<;00p-|d1E!{A5=(<t>Yji^4oWt`xc)kzMb%kx$tF>Bv^325e
z(8R>Vp^=f{!=C4kLn)F^K}poU-01OYwc5;Wx7~L4zub9eeBIi01Jg6J@O=;S^YaVs
z?g;_r=X3btU;Q=4#>Q~{_17U14qrNWa_A`o<ad}(cfB#sdl7FF0{mhuTDzh2x{%Gk
z^ubH04BHZb8K{{cC4`7gPM(>aoIG=2-(C{cG%cP?rBcn!nHI~m(we442_+U5v~MA~
z&r7c7mP)14%+%zWGrsQ^IOn<G`gtf(>LPx%6K5L0NG_KnpS$tKJMX&t?wc~1OqUQG
zD_5>WwOR!r5e`R?NF*^cGlOq`_j||{iujX1{zGisuwliqW5*wL9Ow6RUH|@Bd6+MQ
zw>1HN0e;zomrx`q0XPF73Lp+3CZ!B{o@dR@%owvXGYm`0LYDllz+ywGhU$3ZdJRqD
zSBe_cUO*ci9VMUn^k?q4^Ugazn{G-suk==+P$*(#WCT*mU`dK0lgVJ$uAL~AiulwG
ze}aLH1Bs(Yj()dRuitDK`aisid%r5Yy}B2iJ-ATI!U%vP01g2-7`zSxI1aUIA6)V}
z7JRSqb1y&{aTc%6_zjc+3;~#U{`mt(Z@u-_Z)l9wnwrvBx3(WmO=(oCRk*%~csz!#
zu1>7&UyIXYr}34){d<g`9><0a>$PYk^0iv6{&#PbaKx`G0hWS8jmSLI)I1Jg7+8p1
zodj?Sz!+4!nH<!{?v*w*{beWw_nChD@t^Mbt1o@&u2eE5v)K$bZXAFW3ZYyo!M1If
zripAei@yFo)NLDI`^SI8;Uh=T-`|I9Hgi*@Qr#*cO@gyag#RB1@K$3UiUf1t`ObHq
z+`9Gd2U=TO(cadEjROOa637<{s8(yxG=`>h6M9$oA`}keU+(-ScJ11Yl|4OZZ)?4-
zSS&ptrA(bo4!qO$0Pj>xLp^K#_S<iNu&Jpjea$r=zLIke$FXtb$WavXdFZ;1R5FQV
zA^}s^F*QAnZ-4iDD3!{%`s(+BY1#)*pB}$I7L8s{Kqk({AGS<@HxE+)OaR&!zVL;6
zJ3G758#Zh>hx<Mp$HnmQFtmIgnx-L@OduXlK-UczhJhdb_z_fVReba#zXeUxt{Ofy
z{BR^1`7J`o*z0Xayu1XwdEij{kC9@rIQ7}je&)`Znd#GQ?d|CATZ68yE>tTO<nwuy
z%N0lf@pufK9i8ax>cr2sZ^!rU+lJ<*CahkwdXr;24+$Z<U+*8aOn^5RE`U)0r^m*|
z#y<JUPk!BVo%y!5HmqCMkJh#}RH_x^iv?6FWdJ}t9!FPa2iEki#_rvFaM#^i5s$^N
zX3gqNwiA%xb?gb23Gn8l4t467c>ek4kKK6VjbFD+quSEag8u$KWSW~%tyEDc6i}{I
zK?qSK=;}mY-x?e~d<6e`*H(l=A@uk4ZL%HvA;Dk!Ot4IVw+3aX<LA`&?c1OKvp@T@
zZ={kbuQi)R|C%*OCK4!>$|w}_s8q@eB<Sqy#K6D+hDU~R_dWL_5(;DO+O?Z($9ZVq
zzWuL>1j__?>ySs_BiOcW+m5e%`ETyZWHKU?&0_WHUPPl26bnV<aye8gD&7>2$I;Qz
zj*SBY7#khK)_d<oG!n-8b?Y|Sj{VTyefwTD36=@))?yZFCYZb9jyoRz<~P5wt*xyU
z*-Qq#y}by9L&)a~n46zRrBZ>E5|Ky*t*xyX7}$WZ)2DIIzkLVMXas$0)@&-3$`3ua
z_tlYLnE-D+rl8!?b6@=87azQ5>pc&4cXuP(+>DhyD`8m{^7(np&CR1+F29%r8#Z8k
zd>r4~c0Zb%o3U<f|E6-e{DWP)_q4y#n=cdKt%raLUY!Im|L1@Hg$K56yYI0TD^?(r
zX-4;oZkVQpx%nJs=jKo<m6Y~SG=lba<xM<&`ZWIi;fK-M+KRPn``=Y6mAC%<*`3K(
za`R<J(AxtXDi*<n5cH;-ZoWqXWXqN<SIa;KXJT>^x%nIzrC^L9olYYfjY8LTFvf7~
z*fBheAK{v7J_O(Q-}C(Q2k+bQ?9Pu}ddbCwUv}eV0=#{|p?m~X2u^Ok`KGN>N^H4S
zkpKjknw~~JUjStqD5c0WHz68{prfM$nx^5{v19o0Bah;P|LFs;>-F~?J3jbtJAVG`
zmP_A#$;(DFmkIFpf(I3;B!UZi%gs0611WLsmMvEUD(!A=ZVrV)9-2m>YZ{s}8N^~r
z0$<ZK96LUUXP()C%PzYV68PZY;Lx2rckcSVi!c6-Unow!On|o^JOncV7eapi^S9h1
zC2;MQYlE49AeYOjnILF!o5^GlkH(-e4UAD7I&uVrQe67(OW->0e;pYal?Ynaz7)#@
zczeQznh78Tm$%&V`K^G&M?b1aKnOvxP(VJHS4P(uvY9Mm@t7*J2f@LEhhUl}E;#=@
z2q~|7=-+=h{ae5J;hSH2qh$iTeX)cD0=N9>En9_@xc1sDSC5X401_yb%gE<*K>;j7
zYqkZ+L;{pD2r02||9%*{j&si02+wtI`r*SrazA{{hyK^nn=BLH?F}0$ZomZ>xb;tO
z-3kd@yJgGOqoboBl%QU#qfjV8V;Xc#M_XH~65A$#;2h8F*a6)zaQ^w{Vb61WZ~M`Y
zAI*K}gCF?2#toMJ0B?UdP&2_vA^6;Fx81sR>(;w}(9zzGcr=D^Bm~nkQLa>w%jHoh
z7C{J*&1A4@)hhJ%_G0_??KpYz6fV5rd?XU_zkT$vpZsp);>!ehXP|L9IKere`ODjH
z|L(W`^;`FKc6J~Zjlnbwn5Kzhsf5|tIplJA00b>9Dz4Dc(TPVMdkmA4lX&+f7sIlw
ze}3e#pIiYf6X2bM#_8ZBfcdX{`O6P}^IPAzud|~A(P&I*B2t2UK98yCDa_8z0#c%_
ztqp6}_M;`6#e+ZicjOBNocpd#Rz8>iIIz42c&DL30s#PD`SMpDEEY=D8*aGaIzow7
zDwRPgP$(1^bdj>zEZSOI;5utjtL?|(Lr1WA^QCY-cMMo2z&jC3Ng(dH<DY+Q+jZ~r
zx7_mIDIr>+Pz2F6l*?rxXn@h&)P&Zy77V!SK^eufJ9j=cF){H~V3`2#RB!;Np(>hs
z@4D-*$E($<f9tKc{Vt^>oXZyg5L7BPNI3(}IZ~+<R`vGcg%@6!{Da^Bz0VB}4!XcH
z0p7`IB$)~Ta@)3TkC)5k`d|O=zxiWIXn1Zu2SB1$17>F=48uS!moI+)=9_LD930%+
zxXAJ*@STkY2?hboKKkgR&wl39pZ*6zNG{uwh3ENjT^FDP`}ZH1{P@Q|cEj%7yT7;e
z0?Pz==R-o}6AS{Fdghs@_k8-(pZbS-tvcDWvImA~V*3+M9RBpDK6%5z7hd>|e2E~$
z@)Gdt0V$=NB7_J4V&A@f<d6R75C8r>SG{-h#Kc75XFq%VF59-Bky8GLddFn~{2D<@
zIYS8H0Q{3fC;gK{Cyya;AW12Ip(f!n0e;OOrJN^(_)t~O4uCViXyi9=)--~a@y^8m
Y1F4`rfN3>^-~a#s07*qoM6N<$f@plx0{{R3
new file mode 100644
--- /dev/null
+++ b/gui/src/icons/icons_license
@@ -0,0 +1,323 @@
+Icons license for: chat.png help_index.png terminal.png
+jabber_protocol.png
+
+by http://www.everaldo.com/ on 17.07.2011:
+
+The Crystal Project are released under LGPL. GNU General Public License.
+
+This License Agreement applies to any software library or other program
+which contains a notice placed by the copyright holder or other
+authorized party saying it may be distributed under the terms of this
+Lesser General Public License (also called "this License"). Each
+licensee is addressed as "you".
+
+A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+The "Library", below, refers to any such software library or work which
+has been distributed under these terms. A "work based on the Library"
+means either the Library or any derivative work under copyright law:
+that is to say, a work containing the Library or a portion of it, either
+verbatim or with modifications and/or translated straightforwardly into
+another language. (Hereinafter, translation is included without
+limitation in the term "modification".)
+
+"Source code" for a work means the preferred form of the work for making
+modifications to it. For a library, complete source code means all the
+source code for all modules it contains, plus any associated interface
+definition files, plus the scripts used to control compilation and
+installation of the library.
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of running
+a program using the Library is not restricted, and output from such a
+program is covered only if its contents constitute a work based on the
+Library (independent of the use of the Library in a tool for writing
+it). Whether that is true depends on what the Library does and what the
+program that uses the Library does.
+
+You may copy and distribute verbatim copies of the Library's complete
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the notices
+that refer to this License and to the absence of any warranty; and
+distribute a copy of this License along with the Library.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+You may modify your copy or copies of the Library or any portion of it,
+thus forming a work based on the Library, and copy and distribute such
+modifications or work under the terms of Section 1 above, provided that
+you also meet all of these conditions:
+
+The modified work must itself be a software library. You must cause the
+files modified to carry prominent notices stating that you changed the
+files and the date of any change. You must cause the whole of the work
+to be licensed at no charge to all third parties under the terms of this
+License. If a facility in the modified Library refers to a function or a
+table of data to be supplied by an application program that uses the
+facility, other than as an argument passed when the facility is invoked,
+then you must make a good faith effort to ensure that, in the event an
+application does not supply such function or table, the facility still
+operates, and performs whatever part of its purpose remains meaningful.
+(For example, a function in a library to compute square roots has a
+purpose that is entirely well-defined independent of the application.
+Therefore, Subsection 2d requires that any application-supplied function
+or table used by this function must be optional: if the application does
+not supply it, the square root function must still compute square
+roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library, and
+can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based on
+the Library, the distribution of the whole must be on the terms of this
+License, whose permissions for other licensees extend to the entire
+whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of a
+storage or distribution medium does not bring the other work under the
+scope of this License.
+
+You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so that
+they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in these
+notices.
+
+Once this change is made in a given copy, it is irreversible for that
+copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+This option is useful when you wish to copy part of the code of the
+Library into a program that is not a library.
+
+You may copy and distribute the Library (or a portion or derivative of
+it, under Section 2) in object code or executable form under the terms
+of Sections 1 and 2 above provided that you accompany it with the
+complete corresponding machine-readable source code, which must be
+distributed under the terms of Sections 1 and 2 above on a medium
+customarily used for software interchange.
+
+If distribution of object code is made by offering access to copy from a
+designated place, then offering equivalent access to copy the source
+code from the same place satisfies the requirement to distribute the
+source code, even though third parties are not compelled to copy the
+source along with the object code.
+
+A program that contains no derivative of any portion of the Library, but
+is designed to work with the Library by being compiled or linked with
+it, is called a "work that uses the Library". Such a work, in isolation,
+is not a derivative work of the Library, and therefore falls outside the
+scope of this License.
+
+However, linking a "work that uses the Library" with the Library creates
+an executable that is a derivative of the Library (because it contains
+portions of the Library), rather than a "work that uses the library".
+The executable is therefore covered by this License. Section 6 states
+terms for distribution of such executables. When a "work that uses the
+Library" uses material from a header file that is part of the Library,
+the object code for the work may be a derivative work of the Library
+even though the source code is not. Whether this is true is especially
+significant if the work can be linked without the Library, or if the
+work is itself a library. The threshold for this to be true is not
+precisely defined by law.
+
+If such an object file uses only numerical parameters, data structure
+layouts and accessors, and small macros and small inline functions (ten
+lines or less in length), then the use of the object file is
+unrestricted, regardless of whether it is legally a derivative work.
+(Executables containing this object code plus portions of the Library
+will still fall under Section 6.)
+
+Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6, whether
+or not they are linked directly with the Library itself.
+
+As an exception to the Sections above, you may also combine or link a
+"work that uses the Library" with the Library to produce a work
+containing portions of the Library, and distribute that work under terms
+of your choice, provided that the terms permit modification of the work
+for the customer's own use and reverse engineering for debugging such
+modifications.
+
+You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work during
+execution displays copyright notices, you must include the copyright
+notice for the Library among them, as well as a reference directing the
+user to the copy of this License. Also, you must do one of these things:
+
+Accompany the work with the complete corresponding machine-readable
+source code for the Library including whatever changes were used in the
+work (which must be distributed under Sections 1 and 2 above); and, if
+the work is an executable linked with the Library, with the complete
+machine-readable "work that uses the Library", as object code and/or
+source code, so that the user can modify the Library and then relink to
+produce a modified executable containing the modified Library. (It is
+understood that the user who changes the contents of definitions files
+in the Library will not necessarily be able to recompile the application
+to use the modified definitions.) . Use a suitable shared library
+mechanism for linking with the Library. A suitable mechanism is one that
+(1) uses at run time a copy of the library already present on the user's
+computer system, rather than copying library functions into the
+executable, and (2) will operate properly with a modified version of the
+library, if the user installs one, as long as the modified version is
+interface-compatible with the version that the work was made with.
+Accompany the work with a written offer, valid for at least three years,
+to give the same user the materials specified in Subsection 6a, above,
+for a charge no more than the cost of performing this distribution. If
+distribution of the work is made by offering access to copy from a
+designated place, offer equivalent access to copy the above specified
+materials from the same place. Verify that the user has already received
+a copy of these materials or that you have already sent this user a
+copy. For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception, the
+materials to be distributed need not include anything that is normally
+distributed (in either source or binary form) with the major components
+(compiler, kernel, and so on) of the operating system on which the
+executable runs, unless that component itself accompanies the
+executable.
+
+It may happen that this requirement contradicts the license restrictions
+of other proprietary libraries that do not normally accompany the
+operating system. Such a contradiction means you cannot use both them
+and the Library together in an executable that you distribute.
+
+You may place library facilities that are a work based on the Library
+side-by-side in a single library together with other library facilities
+not covered by this License, and distribute such a combined library,
+provided that the separate distribution of the work based on the Library
+and of the other library facilities is otherwise permitted, and provided
+that you do these two things:
+
+Accompany the combined library with a copy of the same work based on the
+Library, uncombined with any other library facilities. This must be
+distributed under the terms of the Sections above.
+
+Give prominent notice with the combined library of the fact that part of
+it is a work based on the Library, and explaining where to find the
+accompanying uncombined form of the same work.
+
+You may not copy, modify, sublicense, link with, or distribute the
+Library except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense, link with, or distribute the
+Library is void, and will automatically terminate your rights under this
+License. However, parties who have received copies, or rights, from you
+under this License will not have their licenses terminated so long as
+such parties remain in full compliance.
+
+You are not required to accept this License, since you have not signed
+it. However, nothing else grants you permission to modify or distribute
+the Library or its derivative works. These actions are prohibited by law
+if you do not accept this License. Therefore, by modifying or
+distributing the Library (or any work based on the Library), you
+indicate your acceptance of this License to do so, and all its terms and
+conditions for copying, distributing or modifying the Library or works
+based on it.
+
+Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot distribute
+so as to satisfy simultaneously your obligations under this License and
+any other pertinent obligations, then as a consequence you may not
+distribute the Library at all. For example, if a patent license would
+not permit royalty-free redistribution of the Library by all those who
+receive copies directly or indirectly through you, then the only way you
+could satisfy both it and this License would be to refrain entirely from
+distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply, and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is implemented
+by public license practices. Many people have made generous
+contributions to the wide range of software distributed through that
+system in reliance on consistent application of that system; it is up to
+the author/donor to decide if he or she is willing to distribute
+software through any other system and a licensee cannot impose that
+choice.
+
+This section is intended to make thoroughly clear what is believed to be
+a consequence of the rest of this License.
+
+If the distribution and/or use of the Library is restricted in certain
+countries either by patents or by copyrighted interfaces, the original
+copyright holder who places the Library under this License may add an
+explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+The Free Software Foundation may publish revised and/or new versions of
+the Lesser General Public License from time to time. Such new versions
+will be similar in spirit to the present version, but may differ in
+detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a license
+version number, you may choose any version ever published by the Free
+Software Foundation.
+
+If you wish to incorporate parts of the Library into other free programs
+whose distribution conditions are incompatible with these, write to the
+author to ask for permission. For software which is copyrighted by the
+Free Software Foundation, write to the Free Software Foundation; we
+sometimes make exceptions for this. Our decision will be guided by the
+two goals of preserving the free status of all derivatives of our free
+software and of promoting the sharing and reuse of software generally.
+
+No Warranty
+
+Because the library is licensed free of charge, there is no warranty for
+the library, to the extent permitted by applicable law. Except when
+otherwise stated in writing the copyright holders and/or other parties
+provide the library "as is" without warranty of any kind, either
+expressed or implied, including, but not limited to, the implied
+warranties of merchantability and fitness for a particular purpose. The
+entire risk as to the quality and performance of the library is with
+you. Should the library prove defective, you assume the cost of all
+necessary servicing, repair or correction.
+
+In no event unless required by applicable law or agreed to in writing
+will any copyright holder, or any other party who may modify and/or
+redistribute the library as permitted above, be liable to you for
+damages, including any general, special, incidental or consequential
+damages arising out of the use or inability to use the library
+(including but not limited to loss of data or data being rendered
+inaccurate or losses sustained by you or third parties or a failure of
+the library to operate with any other software), even if such holder or
+other party has been advised of the possibility of such damages.
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e9fc4a5d7c42135d794836c183ac877465c485d7
GIT binary patch
literal 11050
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
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..5953c2dc24b9e6d54335d4a7ef80b8b2f4f19d5a
GIT binary patch
literal 9816
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
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..9cc2a8b0892852068bd18c7660c0e254d261ba4f
GIT binary patch
literal 1903
zc$@)m2ax!QP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800004XF*Lt006JZ
zHwB960000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU(0ZBwbRCwBA
z{Qv(y!$1On0AgYoU;q$61MUET02*)y00a;tF^c$fD-{_S7!83;AZE13rtkm%KbL{T
z!~cK3ANX=(@;RW;ACNF1vjGAKrvv!(Y6Ten{|jPZWXuQJrza}J!=NB71jZ@~!VF?S
zKFsuUSD!Gv`|zFN!P9pP*Y3Ok+574Lzu(*b{d_m&>+RX6@Hqw`fEck`UegG)G#_Xw
ze~5=3gPW}ygQ|iE11}F70~;$d0}~S?&|QomZ!`P@8v74Ofbh5PzZpJ!`oXaG*lmX0
zM{YChJ8>K6hu<gu{diga_0IegK%;-7I|Lwr7*T_|+K_>fX+F?m{ls8Xh6o=627W$v
z24*HE24-ePAcoQ)2QV>$jRINx7li-*17au*<p28hm*M)IR}52^90NP#-|tTozg(YK
z3$*4N5dVeQ2@pWcXqNAHvQ(AtukvHCH&<rhU}pjPmI-Vjhz9wbi4jTz9m0SV3je|Q
zKLZ#-{U|KR&ER6K3XC>khU1r>TQKq)YW{kCd?!%q7c3+I0*D#e@`NBW{*n|222mky
zpd}0ti-0sEILH~m!OqA8v6qnnW+{^8Ao|~bIR78iAxd(>3~KVC42RD?)?nn**ZlS7
z1l$n-0R(mcyM)6DM{^bN^ax7^Awf=vg~*m7(TG$J!Lay;v*BV;$NYmhMqGp!5)v1m
zssCe>c>eptmFpl!00a;dpKeVeFh$EJg;+4Kvok||@*l%z|Nj4nTLzD7Acl!SEJxOh
zO0xi?Oi5Ol!OLEYftg#r0%*A?5VHXU5EC#g3w#{48Th!_!M=oB{10Ln$R}`%Q7lJd
z|ASyu$H3AA!V#dv?Bl4#z{AZg&LQLN29)9f2p~|5>RB2pfD_g4-+v*Bp}zTtOv4@V
z4=L6EgF6NzB#@#5Wce?k*`UPC3-qYAsssZwhqwjE0RRC6E{Y|9@dJ_sDf|k|%P5v2
zXD=l7A2>z}5wISZ{(oQ(fy6$4`2|hXObm)L!m#wm1rR_i;0ggO0l|NM|6}<6;|~KT
z2Mbbp3p9uU;y^~m|Bylmo*1FQ3=4L&X!!l-AH$cgzrYC?WIjmkx9`6|8bO9I0R#{z
z1U_B`7N5wD0BQd5^AA`vBCZiW{eu(&s6K~A576hof$SeZkAN`9!Ep0|)?T^&0_f0R
zUqBuJ2p}d<nZ4)OEwCgg8bGBTOffk4{v*XHEFJtob<{sFMwEzu{y?G&J#<0%_4}_3
z_n*9F`2FtuaZu3=5I{`-|9n}p>&Q)p`;XtjUCIo_Ow3GhHn<38VPaqbVm3A)W`$r@
zVBG)`hZWIGX!;<&hGHPQfBr#+e?MLw{QdFz1E2%G0t67#mm5>|{QvWHUhTx~4Bvhr
z;tIndK+M97s1sONnBa8-3sfG%Vl=#d_hp7lHy(fc@$%qOpyls@_!B??fl}f>VEMfN
z7q@ZHsmo79tbkdPpN|u%@?k=R05c=BZeW7@3{g^I)~f%JO3nFePch71d4l2Rt0S$y
z-<~}K6n+9qe*ggltBn2ttE=rFfAZ;XJ9Jk;QAUVC8CZTZGcm!_1tf@>;AsTJ28R~N
z0a$GQ4=I5dp1u6U&@yc|!^Yj0zWsQ%vkK^0P__IRh+l(>Vt@dGIpF`_Z%;o1CAa?L
zRASnF{E6P#D^J<@c{zZM4-qs6z!EAGv|WJNtN_^!vUusH^9)UscQM?$egE3`$D5jd
zf4F=RDD?=4Ujp$DkWzpELU%l<T;OBjQ&r)R@@QmY<+GKR6yy%^&}Aq}vO_q8nF&@C
zqZCe;Z@yqSe*PiDi3^XwjgtSrKVSRx{=$l%FAjiOMQ?!^)LeQ4#6Mv%1Q0-sI2x)P
zKrG0@qo~Lw>szg@t?sdXZZb6SF*1Dp_KTsme;31}XYav|`1tt;!`0g_Aw|~jZx8?e
zczNpg#~Vj~y*YIa6wgr0-vRL#^yV2r0I^_kz&~iK<=3At_df}VNa&<Tm_wRRK<6&m
zaGqiE!lMjt-@Ll^>)V?ve}8>`@%zWS=l}kE{rvU$(c4f9z60@RP%4Mg-;f(2$N(UK
zSnxDh|CstsG~wi6lW_pHj_y8u%P@WEafY*(AAS4u>e}k3XXmT}s`&u*)lX=9?>E#U
zWQ@0U3=ly09KayJ%b8%TE6cF!&@G15+b%PF`SkMit)tT>e*O6LDKsIyf%^6jH01t5
zX`=gk00D%vSsqugQsC$BKcK>b;rFkfudbipI`#UQwI`w3=Owft`2n?%Yyc2II75Jo
zgE@$Yi;dy=vpWmcFDP9N4enP^U&9g;#Q-3H@b!#Xfmj68T!6;yD`<-TMM@A80ssNT
pNTA=y4#mHr!Tp!oeM5i%0|32t1-lwDV{rfg002ovPDHLkV1n(Fe$W5_
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..afa477274e2bb7c27cb67bad87551e5910880b71
GIT binary patch
literal 494
zc%17D@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xa&H|6fVg?3oArNM~bhqvgP>?0v
z(btiIVPjv-@4(4GzCyA`kS_y6l_~>6Lo)-z&;LOBB?CjL0RzLU1O^7H84L{K`IF+0
zx-l>?rg*wIhE&{2`t$$4J+mc)LPLZDi?Xuv4CBd-j*K2xnF|>NxE-$6Fg)UQxHIG2
zfe#ES44Zfq8YB*~1SkhgW(>&LUs%=CFl!wL^ZWPHd3f&cH?FDsJN4nUpXog5{4uPO
z4>+#WFfL(NXgDC1ZfMk$V<o?5MYzL{r*>>@=j9t`)j56O7x>%#@U6O7+t%6n%_h>z
z{{H_DbjFMY=T@@cWV!Z*Ggg@6e}cfj-+c!oTB8|WiLx~?G-dKISn|6HbJRPh{Z9yZ
z{P!foS9@j$hK&xUTn>M}FlU_B*D-T4(0?q?7O{YlMS$C;W`Aw7*0F^jzspZ~!N8#~
zBiJ73Ox}0$Jj<O-|Ni3cmjj!6r{MJ=<0%IkZg-?yKD%9Ds{)fkLxPmF<Hs-GjHOo@
zPc+&4_uPSkca}G{xe3TCG#Cgo7@W9TQD^YM=x?hve~Pfj<@5VHSQrEx3VN5QSvD{v
gshCe>W|3g97rDFIe2w@bVB9cxy85}Sb4q9e07w(HNB{r;
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..fea4842cb2278d7d6efbc0daa3919598f2e179a3
GIT binary patch
literal 1895
zc$@)e2blPYP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F8000LrNkl<ZScS!x
zO^h5z6~}+?RrP$&?#_OBcfI~vJBGwcVmonA4nU$DkircK34|0PMLFcc2?-=54hSI*
zAmxhiB@%GVg;R)vf<+X-it}M%yoqh_I`*!;>zUcz>FJ*C=_(FAyV-HP>xc`l^`ugD
z*ZcqLU-e#9i}#-Yr^(1K3wc8XvBJj17&!)oaiKn5q1Y%eePADr*8{RwiqP|j6IwUh
zsL?%xdpu4(Cu<LJ?%D;~%@)lM6ZjYwj?U7Yy^B>tVSIT)uU%b+<Is4n!05ynUq5o1
z55iB9=G~?nis}Fl-g~yxlRYS0IQenjJT~b1&hQtO5{|0CBv6IgScTE?8r6DDi@peV
z?+pof&-i?UXgvnm9e(ijo@TY6m`V;#2};!x)zK=Ia+x5qyT<g+Q!Ezt1ae=5fI*-n
zPzDN6tQ4u#%M{Bcg2H_Wkjszc-v<)x8r*re>$@#eQE_6uBfw#CLD9NOrR<7@QvcGs
zi@Qe{>;r2J#_BF^c<$Cydn=H6@7fbB$E%>n;iJn}`RKq^-W)qey-|7K48mTQdZ~ur
zUYj8eP=sIeBmUO=fTb%pIRDqnunNbg=4sm&)~Ft7Y&Q1YdFj)ho5Vl$)h~1G_)&94
zPFDZ8@~2CmT)eWj8@M1KpjL6-;hi5&2@h}1{5@|MffEDYsQ~Z@!f685QM|*WqQ+nw
zK66cA&6B6x)+}WUMe_RbpT#8(9X~LXngCy<$f<MgxQ8bZPNSUaJ9kQuQx10~&9Z%c
zpOI!MZ~o*X{@gf^3_!Qs7=v2n#?_lR=jjG<;k}nHT}=CqG|e7Jz<S3a)PD(23vm4`
z!Fi_{>2#K4(@C20;fX8T1G-5U^_u6uLibh|V+`JVmX}u0Ih~yyn>lu%J^%K#^3`V^
ztU%@t_>37~o{aglm(Hh2I-mG>Hi?tT)o+GF1ENk$6vjkhM06`cRY5^au12R7_8Z5h
z?JFmK@I-h!ymEio9Rz&O&->JmkTQv5su!nINiUg-vtGI1OQ-K0kVbv_Q6IPN5F<m&
zAtLlQ(^A;qwEyJ&;#Z!2YT>ar7B==IK*XF+5Hd<6l;dt(?rz4#IEm>c>Davk`n^8=
zj>{{sfY*F;dORp(v2(GHSmbiB<gUv@r;gSaemB$Koj`(01Vlg|;xM5bhIG0iVHSq>
z4v2dRUK|-2na^;UBg?XFk2>+q4k5R=MRz6U`km|STbMFOelv65qGo-F^8wHSMj+lu
zX|J!-n5#4KtNKf|pI0BXBU(qqY~}q1z2SP}J>KD6&uwalBlX8Ucas+3dPuh!(OkPp
zp;3|fpH63={_Kt!BH$vB1Zd?1k`YJR?s0u>i6>utZ1T*L!SjvD2Gv51F~%9srl?WF
zk{?9Qcs6~Trn$pyZX@q>S($C|;mt)ltqvO-n{?U{-L;63sHEfHt7pyMZ*G&Ybb%7k
z1nS_baC@cATk(17M{3mLI`#Dm)zLDQQiZyXP#!#j&?6xtq(exY#B@$}xx0Lqa3!SM
zib*#5_|Q;pd7>LVW@~dg`>koW{Q4c;Cg7_cVqh7t&?ct65ku65I_M~96-*IK0SLeV
z>J6qZXlgM%i%l&W1(?WUx&h_h7`1GgAT1D>0(QorRb}ebq#XUmA%FFa>tbC8@e}zD
zrUg_%ra>&I1I@ssf=v~JVlqJ!MZG~YMfwJf1W6Rrw@7Tzo`J;RyWrL{`gan1CnF0i
z1zSV{CELt*k<B(Tll0R3uowl(;4|<7qTmgDmU9A5@y_5;a0X2ck}AGy$a(@jL3?0h
zk8cSy1ql_gim54cGjqIi_8cq!SQP+k<G`Lce1c^DGE^KoDo9n(GT3n?s9J)u!4?9n
zRg5U=Ek+bc1Ti*es)BQ#5*0Q#H&|P0VmhFypn;%O$-#enj+G0m+h?Zr*8Jszw=X}u
z-f0`Pl3~Q7u;rrp<hLC@mx5cJzVE|Yt$Hx)`kBVzG1M9)5TvTi9h~F6*WMcf2N1JQ
z$sz{<kODEd`2H6mJ)@MLQ3?eMB8Ygr2-v|9?STx^ca2|o^f1mlOxbYoz(Fql;UcTk
z%i=;$($0AHk!ShWrA6$}bSzK=EhsMeJPCLHv%ZO6R3IBnMhCJCVyP8O+2Vc5{=;*;
zfA)gkc(|!_K{P)_b45K$HW;`iu^Etfz)y!6Riu=kg1MHTxu_sxu>Z(Bi?1!xe!RJB
zF!iY)Vvp`1p}Uh<`(YO|u1I+YiGg|J+5gCXuARNc>J!U*{WuI1*r~ScAYu0)k;3ZB
zUChKli5)QYV1!Rzy~66(ZtMvTpd;TevAqn#)bc&Cn+-^>z8E4EV228|jT(z@eZ24>
zZ~%4do^2I&xkIWdFMRifVKsI%r65DM;nk;?Wc0_Se}6Foo1W2c?@(bUiJbxt0M#lQ
h=+L|ETJb;Fe*x2YI^BO|KdS%$002ovPDHLkV1lFuqBj5l
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..88c6eb1d5eb0279b63fc845f25d3a2ba3d811e2e
GIT binary patch
literal 1567
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
Ruzvsm002ovPDHLkV1mrp2BH7}
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..058efcf4ba174495d8d89d1916c3ccebf393a2af
GIT binary patch
literal 1468
zc$@*e1w;CYP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800004XF*Lt007q5
z)K6G40000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU%PDw;TRCwCN
zmwRkeWfZ{AcYE9J(Z{y#5w?Ue!AaNzvxPtviOz^b6N8xjXJS&Oe@tNdhd~+tOycW5
zOiYXmOVDUyP?Ud$gc!0YasB~eTPL)GiS4$Iy<cr_+uM6T&vzePU)ws++2r(l+}rQ`
z&iT%F&R0Syh5z%zv#-w1&WBp$_3bB$v3cYx&!+>}N+@!!zvcc7D~w{e$0UcZJIgN|
z!l7e5>pnEVk(##CP;cHzYm8u_GjHNlElS>o0JsX<8b~EMMJo(ItBt^mu^OD-f@0Ya
z0AiQV(K>TtoNo=<uqoOQ546Brr-{@2c=DXxJjIkV2=jjm;DTcfq>(>G9fs5+Wse&z
zFjua5faH7(Rf}3(F~~PXz%qIsI<DeWR6A0cuCIhMa$}~Ksg;9D@NOQ0y@fbrbn%=3
zj=<3-4x}#A9tlij0p1852f7GLqG0q$ll-3&7<@4(xQVY$+u?pIappapHGLsKDflZ9
zK#zl9P5@o-`85|D_i_%yV_+sgIc0OKJV$o(oV=UNi%=Mk0GWsbEj0qQ8`M-oQXNe<
z@wi~5fQ5q=2f<upK<a~ot#W@{fH1DiBt(IPWJSQtDb~?i69Vv%ct=2qpf6%5ajI-s
zwRLc-4JIpb&4OIwfUsJirDAIXbT>C{{ke-)8C5hzNM@g;&!hGF7{NGC420Q2w>-u5
zgu&i(5l&peCqlNEN(NxdmOKw%wr|-s_zo@RvMc8@m8XnJQlF_C6M;-gAkLU>gcmKB
zgW$M&3EKX^ClOXNk^%HBsW`-ca<;5`^hGG(QmmzGDPOJ6*1;_!(-P3@v0wnUw<E~6
z>3M*K*3`xLd&d_2j+?N=_L?U4oM4|Qt=?DT1VU=ez-oQA213vZ9ymK#;$VImb?xA@
z#05LMW50{dt<Q{q{X<@Hs7g7}ibXWZI-0PMWO<hG7FnJrOA>_rg^|I91Kxgkp`QgR
zzd~?EN1%RSDO&P<{`}(Gi7j9tJob(0uFeEYff6VP6NM4?V$)DR9ANq69tyiV4DqX+
z5TVF8S;ev&3nn6=yID|0Wi_~nnnfrBVq(%1k|Yoj70+8E?r@6YTPR-UWt4>#0Wdp0
z%N5DZkk0_nr4mtEz?MkrnP+3d@_;0((WAhqP(sueamSupQL&z;R|Ft=v;)fdgwo_T
z6Gk874@GpHV2xaW_Fn|BxpAfs#gnc$qZp-G-$bg&K3c#OkgO1?Fq${wY8wvO!h&qO
zi=!SC=7G7D3R6}9Vu22J!(j{4BxNZuaeW>VbBTAO82T}o#wR{jz*w1BvmB>bzl%rf
zxeSY$0y2r4jmZSc@knHOM`;&`ew?M%lxO!q1=k^OHfk=_77Swlo(TTHj(}gR_uq#7
zw_jTL?5Rz4!?ij@vUf_k5q2{+X?Ft18NdZcU**cUeR4igOUH-^i=LvOcg{I{2b|t8
z*hVzB`nuz7-@S6{;}0CW?(bm`DO;tgwP+Bz1IWN{;|B$hXSt{^uruI+C+}j;X2HZ1
z|Aq25%7h+NKZ)<V4i9{Ewxn^=2^KC97ql1&mL9+Z=itm2Pr&85zQ95KUgy)!@F=Sh
zz?M}GT4G;^e~g`MIeY^loKq?U^Mo<?`(=7D67XWujV+V&D3?%rS;|D2L5ZaWRaA$V
z?JettC{+U!Q*|l$iZl<9^#CyI#!*-T8Pt+TXpR4R%Mibn_L6G?kYN#uVVwP6%!f7n
zku49%>-lq;0uepgvVZcMcMTxc-GRMsSgsoD0(j7m0`V)n_93>9YFjn7*46wU0R{lz
WQ-?g>7HstZ0000<MNUMnLSTZnY^yy0
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..f6357ee4d9aab6ab05fa4ba7fa8715595482567e
GIT binary patch
literal 358
zc%17D@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b
z3=G_YAk0{w5<d|r$X?><>&kwejh{zL(}4fnL!i)SPZ!4!i_=FZ8|Jkb2)ND<Ji?lB
zLar&vzoAFuC(oS&&mWqUe9>@R_JCuzo*19QV-xSBJ#LFSrszjX)&H)qwn_ex&+&k{
zV$PlaqRQ(VtS#?3f4nWmbNIj}oi(qy9A+)sEwNzLD(M2oceC|wHf_tD7_?~0A&J8#
zz7oj+UW!YXysw_MjB!V+`A(*F>$0CKn_Z8xUi(!~_M^!Uozs&l=Sd#__;g~|B8AhN
zWUrUX9(a0O;e0W}nynVk>rSh%+>YYNew!_tWU;EN_?+s#<cgx6@0N-!9*gdN75S}Z
z_;DS7AB*Di?(*6KwuKeD586(9?3nfFeEnnd;+=DZ@}dicfZk{DboFyt=akR{0ELZ_
A761SM
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..a7230e4fc22daeb0d5d71faedee86e1eafe65771
GIT binary patch
literal 7757
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
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..fcebab0bf03520ebbc1df2ff759fea1c720ca4dd
GIT binary patch
literal 2035
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
RtN#E1002ovPDHLkV1i_e(pdli
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..366c2cf3e4729324aece1a645a0ff297b13372d3
GIT binary patch
literal 1604
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
Cum5}i
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..63b3bd031ed91915dd2ddf38e4bd5ac5d812c890
GIT binary patch
literal 1871
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
JPDHLkV1mfBh8O?<
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..b56a0bb79fc0403afca890a53945c9feba7a2092
GIT binary patch
literal 1866
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
Eg7rj$G5`Po
new file mode 100644
--- /dev/null
+++ b/gui/src/m-editor/file-editor-interface.h
@@ -0,0 +1,78 @@
+/* OctaveGUI - A graphical user interface for Octave
+ * Copyright (C) 2011 Jacob Dawid (jacob.dawid@googlemail.com)
+ *
+ * This program 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.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef FILEEDITORINTERFACE_H
+#define FILEEDITORINTERFACE_H
+
+#include <QDockWidget>
+#include <QMenu>
+#include <QToolBar>
+
+class QTerminal;
+class main_window;
+
+class file_editor_interface : public QDockWidget
+{
+  Q_OBJECT
+
+  public:
+    file_editor_interface (QTerminal *terminal, main_window *mainWindow)
+      : QDockWidget ((QWidget*)mainWindow) // QDockWidget constructor is explicit, hence the cast.
+    {
+      setObjectName ("FileEditor");
+      _terminal = terminal;
+      _main_window = mainWindow;
+
+      connect (this, SIGNAL (visibilityChanged (bool)), this,
+               SLOT (handle_visibility_changed (bool)));
+    }
+
+    virtual ~file_editor_interface () { }
+
+    virtual QMenu *debug_menu () = 0;
+    virtual QToolBar *toolbar () = 0;
+
+    virtual void handle_entered_debug_mode () = 0;
+    virtual void handle_quit_debug_mode () = 0;
+
+  public slots:
+    virtual void request_new_file () = 0;
+    virtual void request_open_file () = 0;
+    virtual void request_open_file (QString fileName) = 0;
+
+  signals:
+      void active_changed (bool active);
+
+  protected:
+    QTerminal* _terminal;
+    main_window* _main_window;
+
+    void closeEvent (QCloseEvent *event)
+    {
+      emit active_changed (false);
+      QDockWidget::closeEvent (event);
+    }
+
+  protected slots:
+    void handle_visibility_changed (bool visible)
+    {
+      if (visible)
+        emit active_changed (true);
+    }
+};
+
+#endif // FILEEDITORINTERFACE_H
new file mode 100644
--- /dev/null
+++ b/gui/src/m-editor/file-editor-tab.cc
@@ -0,0 +1,816 @@
+/* OctaveGUI - A graphical user interface for Octave
+ * Copyright (C) 2011 Jacob Dawid (jacob.dawid@googlemail.com)
+ *
+ * This program 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.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "file-editor-tab.h"
+#include "file-editor.h"
+#include "find-dialog.h"
+#include "octave-link.h"
+
+
+#include <Qsci/qsciapis.h>
+// Not available in the Debian repos yet!
+// #include <Qsci/qscilexeroctave.h>
+#include "lexer-octave-gui.h"
+#include <Qsci/qscilexercpp.h>
+#include <Qsci/qscilexerbash.h>
+#include <Qsci/qscilexerperl.h>
+#include <Qsci/qscilexerbatch.h>
+#include <Qsci/qscilexerdiff.h>
+#include "resource-manager.h"
+#include <QMessageBox>
+#include <QVBoxLayout>
+
+file_editor_tab::file_editor_tab(file_editor *fileEditor)
+  : QWidget ((QWidget*)fileEditor), octave_event_observer ()
+{
+  QSettings *settings = resource_manager::get_settings ();
+
+  // FIXME -- what should happen if settings is 0?
+
+  _file_editor = fileEditor;
+  _file_name = "";
+  _edit_area = new QsciScintilla (this);
+
+  // symbols
+  _edit_area->setMarginType (1, QsciScintilla::SymbolMargin);
+  _edit_area->setMarginSensitivity (1, true);
+  _edit_area->markerDefine (QsciScintilla::RightTriangle, bookmark);
+  _edit_area->markerDefine (QPixmap (":/actions/icons/redled.png"),
+                            breakpoint);
+  _edit_area->markerDefine (QPixmap (":/actions/icons/arrow_right.png"),
+                            debugger_position);
+
+  connect (_edit_area, SIGNAL (marginClicked (int, int,
+                                              Qt::KeyboardModifiers)),
+           this, SLOT (handle_margin_clicked (int, int,
+                                              Qt::KeyboardModifiers)));
+
+  // line numbers
+  _edit_area->setMarginsForegroundColor(QColor(96,96,96));
+  _edit_area->setMarginsBackgroundColor(QColor(232,232,220));
+  if (settings->value ("editor/showLineNumbers",true).toBool ())
+    {
+      QFont marginFont( settings->value ("editor/fontName","Courier").toString () ,
+                        settings->value ("editor/fontSize",10).toInt () );
+      _edit_area->setMarginsFont( marginFont );
+      QFontMetrics metrics(marginFont);
+      _edit_area->setMarginType (2, QsciScintilla::TextMargin);
+      _edit_area->setMarginWidth(2, metrics.width("9999"));
+      _edit_area->setMarginLineNumbers (2, true);
+    }
+
+  // code folding
+  _edit_area->setMarginType (3, QsciScintilla::SymbolMargin);
+  _edit_area->setFolding (QsciScintilla::BoxedTreeFoldStyle , 3);
+
+  // other features
+  if (settings->value ("editor/highlightCurrentLine",true).toBool ())
+    {
+      _edit_area->setCaretLineVisible(true);
+      _edit_area->setCaretLineBackgroundColor(QColor(245,245,245));
+    }
+  _edit_area->setBraceMatching (QsciScintilla::StrictBraceMatch);
+  _edit_area->setAutoIndent (true);
+  _edit_area->setIndentationWidth (2);
+  _edit_area->setIndentationsUseTabs (false);
+  if (settings->value ("editor/codeCompletion",true).toBool ())
+    {
+      _edit_area->autoCompleteFromAll ();
+      _edit_area->setAutoCompletionSource(QsciScintilla::AcsAll);
+      _edit_area->setAutoCompletionThreshold (1);
+    }
+  _edit_area->setUtf8 (true);
+
+  QVBoxLayout *layout = new QVBoxLayout ();
+  layout->addWidget (_edit_area);
+  layout->setMargin (0);
+  setLayout (layout);
+
+  // connect modified signal
+  connect (_edit_area, SIGNAL (modificationChanged (bool)),
+           this, SLOT (update_window_title (bool)));
+  connect (_edit_area, SIGNAL (copyAvailable (bool)),
+           this, SLOT (handle_copy_available (bool)));
+  connect (&_file_system_watcher, SIGNAL (fileChanged (QString)),
+           this, SLOT (file_has_changed (QString)));
+
+  _file_name = "";
+  update_window_title (false);
+}
+
+bool
+file_editor_tab::copy_available ()
+{
+  return _copy_available;
+}
+
+void
+file_editor_tab::event_accepted (octave_event *e)
+{
+  if (dynamic_cast<octave_run_file_event*> (e))
+    {
+      // File was run successfully.
+    }
+
+  if (octave_add_breakpoint_event *abe
+      = dynamic_cast<octave_add_breakpoint_event*> (e))
+    {
+      // TODO: Check file.
+      _edit_area->markerAdd (abe->get_line (), breakpoint);
+    }
+
+  if (octave_remove_breakpoint_event *rbe
+      = dynamic_cast<octave_remove_breakpoint_event*> (e))
+    {
+      // TODO: Check file.
+      _edit_area->markerDelete (rbe->get_line (), breakpoint);
+    }
+
+  if (octave_remove_all_breakpoints_event *rabe
+      = dynamic_cast<octave_remove_all_breakpoints_event*> (e))
+    {
+      Q_UNUSED (rabe);
+      _edit_area->markerDeleteAll (breakpoint);
+    }
+
+  delete e;
+}
+
+void
+file_editor_tab::event_reject (octave_event *e)
+{
+  if (dynamic_cast<octave_run_file_event*> (e))
+    {
+      // Running file failed.
+    }
+  delete e;
+}
+
+void
+file_editor_tab::closeEvent (QCloseEvent *event)
+{
+  if (_file_editor->get_main_window ()->is_closing ())
+    {
+      // close whole application: save file or not if modified
+      check_file_modified ("Closing Octave", 0); // no cancel possible
+      event->accept ();
+    }
+  else
+    {
+      // ignore close event if file is not saved and user cancels
+      // closing this window
+      if (check_file_modified ("Close File",
+                               QMessageBox::Cancel) == QMessageBox::Cancel)
+        {
+          event->ignore ();
+        }
+      else
+        {
+          event->accept();
+        }
+    }
+}
+
+void
+file_editor_tab::set_file_name (QString fileName)
+{
+  _file_name = fileName;
+  update_lexer ();
+  update_tracked_file ();
+}
+
+void
+file_editor_tab::handle_margin_clicked(int margin, int line,
+                                       Qt::KeyboardModifiers state)
+{
+  Q_UNUSED (state);
+  if (margin == 1)
+    {
+      unsigned int mask = _edit_area->markersAtLine (line);
+
+      if (state & Qt::ControlModifier)
+        {
+          if (mask && (1 << bookmark))
+            _edit_area->markerDelete(line,bookmark);
+          else
+            _edit_area->markerAdd(line,bookmark);
+        }
+      else
+        {
+          if (mask && (1 << breakpoint))
+            {
+              request_remove_breakpoint (line);
+            }
+          else
+            {
+              request_add_breakpoint (line);
+            }
+        }
+    }
+}
+
+void
+file_editor_tab::update_lexer ()
+{
+  QsciLexer *lexer =  _edit_area->lexer ();
+  delete lexer;
+
+  if (_file_name.endsWith (".m") || _file_name.endsWith (".M"))
+    {
+      lexer = new lexer_octave_gui ();
+
+      // The API info that is used for auto completion
+      // TODO: Where to store a file with API info (raw or prepared?)?
+      // TODO: Also provide infos on octave-forge functions?
+      // TODO: Also provide infos on function parameters?
+      // By now, use the keywords-list from syntax highlighting
+
+      QsciAPIs *lexer_api = new QsciAPIs (lexer);
+
+      QString keyword;
+      QStringList keywordList;
+
+       // get whole string with all keywords
+      keyword = lexer->keywords (1);
+      // split into single strings
+      keywordList = keyword.split (QRegExp ("\\s+"));
+
+      int i;
+      for (i = 0; i < keywordList.size (); i++)
+        {
+           // add single strings to the API
+          lexer_api->add (keywordList.at (i));
+        }
+      // prepare API info ... this make take some time
+      lexer_api->prepare ();
+    }
+  else if (_file_name.endsWith (".c")
+        || _file_name.endsWith (".cc")
+        || _file_name.endsWith (".cpp")
+        || _file_name.endsWith (".cxx")
+        || _file_name.endsWith (".c++")
+        || _file_name.endsWith (".h")
+        || _file_name.endsWith (".hh")
+        || _file_name.endsWith (".hpp")
+        || _file_name.endsWith (".h++"))
+    {
+      lexer = new QsciLexerCPP ();
+    }
+  else if (_file_name.endsWith (".pl"))
+    {
+      lexer = new QsciLexerPerl ();
+    }
+  else if (_file_name.endsWith (".bat"))
+    {
+      lexer = new QsciLexerBatch ();
+    }
+  else if (_file_name.endsWith (".diff"))
+    {
+      lexer = new QsciLexerDiff ();
+    }
+  else // Default to bash lexer.
+    {
+      lexer = new QsciLexerBash ();
+    }
+
+  QSettings *settings = resource_manager::get_settings ();
+
+  // FIXME -- what should happen if settings is 0?
+
+  // Editor font (default or from settings)
+  lexer->setDefaultFont (QFont (
+                                settings->value ("editor/fontName",
+                                                 "Courier").toString (),
+                                settings->value ("editor/fontSize",
+                                                 10).toInt ()));
+
+  // TODO: Autoindent not working as it should
+  lexer->setAutoIndentStyle (QsciScintilla::AiMaintain ||
+                             QsciScintilla::AiOpening  ||
+                             QsciScintilla::AiClosing);
+
+  _edit_area->setLexer (lexer);
+}
+
+void
+file_editor_tab::request_add_breakpoint (int line)
+{
+  QFileInfo file_info (_file_name);
+  QString path = file_info.absolutePath ();
+  QString function_name = file_info.fileName ();
+
+  // We have to cut off the suffix, because octave appends it.
+  function_name.chop (file_info.suffix ().length () + 1);
+
+  octave_link::instance ()->post_event
+      (new octave_add_breakpoint_event (*this,
+                                        path.toStdString (),
+                                        function_name.toStdString (),
+                                        line));
+}
+
+void
+file_editor_tab::request_remove_breakpoint (int line)
+{
+  QFileInfo file_info (_file_name);
+  QString path = file_info.absolutePath ();
+  QString function_name = file_info.fileName ();
+
+  // We have to cut off the suffix, because octave appends it.
+  function_name.chop (file_info.suffix ().length () + 1);
+
+  octave_link::instance ()->post_event
+      (new octave_remove_breakpoint_event (*this,
+                                           path.toStdString (),
+                                           function_name.toStdString (),
+                                           line));
+}
+
+void
+file_editor_tab::comment_selected_text ()
+{
+  do_comment_selected_text (true);
+}
+
+void
+file_editor_tab::uncomment_selected_text ()
+{
+  do_comment_selected_text (false);
+}
+
+void
+file_editor_tab::do_comment_selected_text (bool comment)
+{
+  if ( _edit_area->hasSelectedText() )
+    {
+      int lineFrom, lineTo, colFrom, colTo, i;
+      _edit_area->getSelection (&lineFrom,&colFrom,&lineTo,&colTo);
+      if ( colTo == 0 )  // the beginning of last line is not selected
+        lineTo--;        // stop at line above
+      _edit_area->beginUndoAction ();
+      for ( i=lineFrom; i<=lineTo; i++ )
+        {
+          if ( comment )
+            _edit_area->insertAt("%",i,0);
+          else
+            {
+              QString line(_edit_area->text(i));
+              if ( line.startsWith("%") )
+                {
+                  _edit_area->setSelection(i,0,i,1);
+                  _edit_area->removeSelectedText();
+                }
+            }
+        }
+      _edit_area->endUndoAction ();
+    }
+}
+
+void
+file_editor_tab::find ()
+{
+  find_dialog dialog (_edit_area);
+  dialog.exec ();
+}
+
+void
+file_editor_tab::update_window_title (bool modified)
+{
+  QString title(_file_name);
+  if ( !_long_title )
+    {
+      QFileInfo file(_file_name);
+      title = file.fileName();
+    }
+
+  if ( modified )
+    {
+      emit file_name_changed (title.prepend("* "));
+    }
+  else
+    emit file_name_changed (title);
+}
+
+void
+file_editor_tab::handle_copy_available(bool enableCopy)
+{
+  _copy_available = enableCopy;
+  emit editor_state_changed ();
+}
+
+void
+file_editor_tab::update_tracked_file ()
+{
+  QStringList trackedFiles = _file_system_watcher.files ();
+  if (!trackedFiles.isEmpty ())
+    _file_system_watcher.removePaths (trackedFiles);
+
+  if (_file_name != UNNAMED_FILE)
+    _file_system_watcher.addPath (_file_name);
+}
+
+int
+file_editor_tab::check_file_modified (QString msg, int cancelButton)
+{
+  int decision = QMessageBox::Yes;
+  if (_edit_area->isModified ())
+    {
+      // file is modified but not saved, aks user what to do
+      decision = QMessageBox::warning (this,
+                                       msg,
+                                       tr ("The file %1\n"
+                                           "has been modified. Do you want to save the changes?").
+                                       arg (_file_name),
+                                       QMessageBox::Save,
+                                       QMessageBox::Discard, cancelButton );
+      if (decision == QMessageBox::Save)
+        {
+          save_file ();
+          if (_edit_area->isModified ())
+            {
+              // If the user attempted to save the file, but it's still
+              // modified, then probably something went wrong, so return
+              // cancel for cancel this operation or try to save files
+              // as if cancel not possible
+              if ( cancelButton )
+                return (QMessageBox::Cancel);
+              else
+                save_file_as ();
+            }
+        }
+    }
+  return (decision);
+}
+
+void
+file_editor_tab::remove_bookmark ()
+{
+  _edit_area->markerDeleteAll (bookmark);
+}
+
+void
+file_editor_tab::toggle_bookmark ()
+{
+  int line, cur;
+  _edit_area->getCursorPosition (&line,&cur);
+  if ( _edit_area->markersAtLine (line) && (1 << bookmark) )
+    _edit_area->markerDelete (line, bookmark);
+  else
+    _edit_area->markerAdd (line, bookmark);
+}
+
+void
+file_editor_tab::next_bookmark()
+{
+  int line, cur, nextline;
+  _edit_area->getCursorPosition (&line, &cur);
+  if ( _edit_area->markersAtLine (line) && (1 << bookmark) )
+    line++; // we have a breakpoint here, so start search from next line
+  nextline = _edit_area->markerFindNext (line, (1 << bookmark));
+  _edit_area->setCursorPosition (nextline, 0);
+}
+
+void
+file_editor_tab::previous_bookmark ()
+{
+  int line, cur, prevline;
+  _edit_area->getCursorPosition (&line, &cur);
+  if ( _edit_area->markersAtLine (line) && (1 << bookmark) )
+    line--; // we have a breakpoint here, so start search from prev line
+  prevline = _edit_area->markerFindPrevious (line, (1 << bookmark));
+  _edit_area->setCursorPosition (prevline, 0);
+}
+
+void
+file_editor_tab::remove_all_breakpoints ()
+{
+  QFileInfo file_info (_file_name);
+  QString path = file_info.absolutePath ();
+  QString function_name = file_info.fileName ();
+
+  // We have to cut off the suffix, because octave appends it.
+  function_name.chop (file_info.suffix ().length () + 1);
+
+  octave_link::instance ()->post_event
+      (new octave_remove_all_breakpoints_event (*this,
+                                                path.toStdString (),
+                                                function_name.toStdString ()));
+}
+
+void
+file_editor_tab::toggle_breakpoint ()
+{
+  int line, cur;
+  _edit_area->getCursorPosition (&line, &cur);
+  if ( _edit_area->markersAtLine (line) && (1 << breakpoint) )
+    request_remove_breakpoint (line);
+  else
+    request_add_breakpoint (line);
+}
+
+void
+file_editor_tab::next_breakpoint ()
+{
+  int line, cur, nextline;
+  _edit_area->getCursorPosition (&line, &cur);
+  if ( _edit_area->markersAtLine (line) && (1 << breakpoint) )
+    line++; // we have a breakpoint here, so start search from next line
+  nextline = _edit_area->markerFindNext (line, (1 << breakpoint));
+  _edit_area->setCursorPosition (nextline, 0);
+}
+
+void
+file_editor_tab::previous_breakpoint ()
+{
+  int line, cur, prevline;
+  _edit_area->getCursorPosition (&line, &cur);
+  if ( _edit_area->markersAtLine (line) && (1 << breakpoint) )
+    line--; // we have a breakpoint here, so start search from prev line
+  prevline = _edit_area->markerFindPrevious (line, (1 << breakpoint));
+  _edit_area->setCursorPosition (prevline, 0);
+}
+
+void
+file_editor_tab::cut ()
+{
+  _edit_area->cut ();
+}
+
+void
+file_editor_tab::copy ()
+{
+  _edit_area->copy ();
+}
+
+void
+file_editor_tab::paste ()
+{
+  _edit_area->paste ();
+}
+
+void
+file_editor_tab::undo ()
+{
+  _edit_area->undo ();
+}
+
+void
+file_editor_tab::redo ()
+{
+  _edit_area->redo ();
+}
+
+void
+file_editor_tab::set_debugger_position (int line)
+{
+  _edit_area->markerDeleteAll (debugger_position);
+  if (line > 0)
+    {
+      _edit_area->markerAdd (line, debugger_position);
+    }
+}
+
+void
+file_editor_tab::set_modified (bool modified)
+{
+  _edit_area->setModified (modified);
+}
+
+bool
+file_editor_tab::open_file ()
+{
+  QString openFileName;
+  QFileDialog fileDialog(this);
+  fileDialog.setNameFilter(SAVE_FILE_FILTER);
+  fileDialog.setAcceptMode(QFileDialog::AcceptOpen);
+  fileDialog.setViewMode(QFileDialog::Detail);
+  if (fileDialog.exec () == QDialog::Accepted)
+    {
+      openFileName = fileDialog.selectedFiles().at(0);
+      if (openFileName.isEmpty ())
+        return false;
+
+      load_file(openFileName);
+      return true;
+    }
+  else
+    {
+      return false;
+    }
+}
+
+void
+file_editor_tab::load_file (QString fileName)
+{
+  if (!_file_editor->isVisible ())
+    {
+      _file_editor->show ();
+    }
+
+  QFile file (fileName);
+  if (!file.open (QFile::ReadOnly))
+    {
+      QMessageBox::warning (this, tr ("Octave Editor"),
+                            tr ("Could not open file %1 for read:\n%2.").arg (fileName).
+                            arg (file.errorString ()));
+      return;
+    }
+
+  QTextStream in (&file);
+  QApplication::setOverrideCursor (Qt::WaitCursor);
+  _edit_area->setText (in.readAll ());
+  QApplication::restoreOverrideCursor ();
+
+  set_file_name (fileName);
+  update_tracked_file ();
+
+
+  update_window_title (false); // window title (no modification)
+  _edit_area->setModified (false); // loaded file is not modified yet
+}
+
+void
+file_editor_tab::new_file ()
+{
+  if (!_file_editor->isVisible ())
+    {
+      _file_editor->show ();
+    }
+
+  set_file_name (UNNAMED_FILE);
+  update_window_title (false); // window title (no modification)
+  _edit_area->setText ("");
+  _edit_area->setModified (false); // new file is not modified yet
+}
+
+bool file_editor_tab::save_file()
+{
+  return save_file (_file_name);
+}
+
+bool
+file_editor_tab::save_file (QString saveFileName)
+{
+  // it is a new file with the name "<unnamed>" -> call saveFielAs
+  if (saveFileName == UNNAMED_FILE || saveFileName.isEmpty ())
+    {
+      return save_file_as();
+    }
+
+  QStringList watched_files = _file_system_watcher.files();
+  if (!watched_files.isEmpty ())
+    _file_system_watcher.removePaths(watched_files);
+
+  // open the file for writing
+  QFile file (saveFileName);
+  if (!file.open (QFile::WriteOnly))
+    {
+      QMessageBox::warning (this, tr ("Octave Editor"),
+                            tr ("Could not open file %1 for write:\n%2.").
+                            arg (saveFileName).arg (file.errorString ()));
+      _file_system_watcher.addPaths (watched_files);
+      return false;
+    }
+
+  // save the contents into the file
+  QTextStream out (&file);
+  QApplication::setOverrideCursor (Qt::WaitCursor);
+  out << _edit_area->text ();
+  QApplication::restoreOverrideCursor ();
+
+  // save file name for later use
+  _file_name = saveFileName;
+  // set the window title to actual file name (not modified)
+  update_window_title (false);
+   // files is save -> not modified
+  _edit_area->setModified (false);
+  file.close();
+
+  if (!watched_files.isEmpty ())
+    _file_system_watcher.addPaths (watched_files);
+  return true;
+}
+
+bool
+file_editor_tab::save_file_as ()
+{
+  QString saveFileName(_file_name);
+  QFileDialog fileDialog(this);
+  if (saveFileName == UNNAMED_FILE || saveFileName.isEmpty ())
+    {
+      QString directory = QString::fromStdString
+          (octave_link::instance ()->get_last_working_directory ());
+
+      if (directory.isEmpty ())
+        {
+          directory = QDir::homePath ();
+        }
+
+      fileDialog.setDirectory (directory);
+    }
+  else
+    {
+      fileDialog.selectFile (saveFileName);
+    }
+  fileDialog.setNameFilter (SAVE_FILE_FILTER);
+  fileDialog.setDefaultSuffix ("m");
+  fileDialog.setAcceptMode (QFileDialog::AcceptSave);
+  fileDialog.setViewMode (QFileDialog::Detail);
+
+  if (fileDialog.exec ())
+    {
+      saveFileName = fileDialog.selectedFiles ().at (0);
+      if (saveFileName.isEmpty ())
+        return false;
+
+      return save_file (saveFileName);
+    }
+
+  return false;
+}
+
+void
+file_editor_tab::run_file ()
+{
+  if (_edit_area->isModified ())
+    save_file(_file_name);
+
+  QFileInfo file_info (_file_name);
+  QString path = file_info.absolutePath ();
+  //QString current_path = QString::fromStdString
+      (octave_link::instance ()->get_last_working_directory ());
+  QString function_name = file_info.fileName ();
+
+  // We have to cut off the suffix, because octave appends it.
+  function_name.chop (file_info.suffix ().length () + 1);
+  _file_editor->terminal ()->sendText (QString ("cd \'%1\'\n%2\n")
+    .arg(path).arg (function_name));
+  // TODO: Sending a run event crashes for long scripts. Find out why.
+  //  octave_link::instance ()
+  //      ->post_event (new octave_run_file_event (*this, _file_name.toStdString ()));
+}
+
+void
+file_editor_tab::file_has_changed (QString fileName)
+{
+  Q_UNUSED (fileName);
+  if (QFile::exists (_file_name))
+    {
+      // Prevent popping up multiple message boxes when the file has
+      // been changed multiple times.
+      static bool alreadyAsking = false;
+      if (!alreadyAsking)
+        {
+          alreadyAsking = true;
+
+          int decision =
+          QMessageBox::warning (this, tr ("Octave Editor"),
+                                tr ("It seems that \'%1\' has been modified by another application. Do you want to reload it?").
+                                arg (_file_name), QMessageBox::Yes,
+                                QMessageBox::No);
+
+          if (decision == QMessageBox::Yes)
+            {
+              load_file (_file_name);
+            }
+
+          alreadyAsking = false;
+        }
+    }
+  else
+    {
+      int decision =
+      QMessageBox::warning (this, tr ("Octave Editor"),
+                            tr ("It seems that \'%1\' has been deleted or renamed. Do you want to save it now?").
+                            arg (_file_name), QMessageBox::Save,
+                            QMessageBox::Close);
+      if (decision == QMessageBox::Save)
+        {
+          if (!save_file_as ())
+            {
+              set_file_name (UNNAMED_FILE);
+              update_window_title (true); // window title (no modification)
+              set_modified (true);
+              update_tracked_file ();
+            }
+        }
+      else
+        {
+          emit close_request ();
+        }
+    }
+}
new file mode 100644
--- /dev/null
+++ b/gui/src/m-editor/file-editor-tab.h
@@ -0,0 +1,102 @@
+/* OctaveGUI - A graphical user interface for Octave
+ * Copyright (C) 2011 Jacob Dawid (jacob.dawid@googlemail.com)
+ *
+ * This program 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.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef FILEEDITORTAB_H
+#define FILEEDITORTAB_H
+
+#include <Qsci/qsciscintilla.h>
+#include <QWidget>
+#include <QCloseEvent>
+#include <QFileSystemWatcher>
+#include "octave-event-observer.h"
+
+class file_editor;
+class file_editor_tab : public QWidget, public octave_event_observer
+{
+  Q_OBJECT
+public:
+  file_editor_tab (file_editor *fileEditor);
+  bool copy_available ();
+
+  void event_accepted (octave_event *e);
+  void event_reject (octave_event *e);
+
+public slots:
+  void update_window_title(bool modified);
+  void handle_copy_available(bool enableCopy);
+  void handle_margin_clicked (int line, int margin, Qt::KeyboardModifiers state);
+  void comment_selected_text ();
+  void uncomment_selected_text ();
+  void find ();
+  void remove_bookmark ();
+  void toggle_bookmark ();
+  void next_bookmark ();
+  void previous_bookmark ();
+  void remove_all_breakpoints ();
+  void toggle_breakpoint ();
+  void next_breakpoint ();
+  void previous_breakpoint ();
+  void cut ();
+  void copy ();
+  void paste ();
+  void undo ();
+  void redo ();
+  void set_debugger_position (int line);
+
+  void set_modified (bool modified = true);
+
+  bool open_file ();
+  void load_file (QString fileName);
+  void new_file ();
+  bool save_file ();
+  bool save_file(QString saveFileName);
+  bool save_file_as();
+  void run_file ();
+
+  void file_has_changed (QString fileName);
+
+signals:
+  void file_name_changed (QString fileName);
+  void editor_state_changed ();
+  void close_request ();
+
+protected:
+  void closeEvent (QCloseEvent *event);
+  void set_file_name (QString fileName);
+
+private:
+  void update_lexer ();
+  void request_add_breakpoint (int line);
+  void request_remove_breakpoint (int line);
+
+  void update_tracked_file ();
+  int check_file_modified (QString msg, int cancelButton);
+  void do_comment_selected_text (bool comment);
+
+  file_editor *         _file_editor;
+  QsciScintilla *       _edit_area;
+
+  QString               _file_name;
+  QString               _file_name_short;
+
+  bool                  _long_title;
+  bool                  _copy_available;
+
+  QFileSystemWatcher    _file_system_watcher;
+};
+
+#endif // FILEEDITORTAB_H
new file mode 100644
--- /dev/null
+++ b/gui/src/m-editor/file-editor.cc
@@ -0,0 +1,558 @@
+/* OctaveGUI - A graphical user interface for Octave
+ * Copyright (C) 2011 Jacob Dawid (jacob.dawid@googlemail.com)
+ *
+ * This program 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.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "file-editor.h"
+#include <QVBoxLayout>
+#include <QApplication>
+#include <QFile>
+#include <QFont>
+#include <QFileDialog>
+#include <QMessageBox>
+#include <QStyle>
+#include <QTextStream>
+
+file_editor::file_editor (QTerminal *terminal, main_window *m)
+  : file_editor_interface(terminal, m)
+{
+  construct ();
+
+  _terminal = terminal;
+  _main_window = m;
+  setVisible (false);
+}
+
+file_editor::~file_editor ()
+{
+}
+
+QTerminal *
+file_editor::terminal ()
+{
+  return _terminal;
+}
+
+main_window *
+file_editor::get_main_window ()
+{
+  return _main_window;
+}
+
+QMenu *
+file_editor::debug_menu ()
+{
+  return _debug_menu;
+}
+
+QToolBar *
+file_editor::toolbar ()
+{
+  return _tool_bar;
+}
+
+void
+file_editor::handle_entered_debug_mode ()
+{
+  _run_action->setEnabled (false);
+}
+
+void
+file_editor::handle_quit_debug_mode ()
+{
+  _run_action->setEnabled (true);
+}
+
+void
+file_editor::request_new_file ()
+{
+  file_editor_tab *fileEditorTab = new file_editor_tab (this);
+  if (fileEditorTab)
+    {
+      add_file_editor_tab (fileEditorTab);
+      fileEditorTab->new_file ();
+    }
+}
+
+void
+file_editor::request_open_file ()
+{
+  file_editor_tab *fileEditorTab = new file_editor_tab (this);
+  if (fileEditorTab)
+    {
+      add_file_editor_tab (fileEditorTab);
+      if (!fileEditorTab->open_file ())
+        {
+          // If no file was loaded, remove the tab again.
+          _tab_widget->removeTab (_tab_widget->indexOf (fileEditorTab));
+        }
+    }
+}
+
+void
+file_editor::request_open_file (QString fileName)
+{
+  if (!isVisible ())
+    {
+      show ();
+    }
+
+  file_editor_tab *fileEditorTab = new file_editor_tab (this);
+  if (fileEditorTab)
+    {
+      add_file_editor_tab (fileEditorTab);
+      fileEditorTab->load_file (fileName);
+    }
+}
+
+void
+file_editor::request_undo ()
+{
+  file_editor_tab *_active_file_editor_tab = active_editor_tab ();
+  if (_active_file_editor_tab)
+    _active_file_editor_tab->undo ();
+}
+
+void
+file_editor::request_redo ()
+{
+  file_editor_tab *_active_file_editor_tab = active_editor_tab ();
+  if (_active_file_editor_tab)
+    _active_file_editor_tab->redo ();
+}
+
+void
+file_editor::request_copy ()
+{
+  file_editor_tab *_active_file_editor_tab = active_editor_tab ();
+  if (_active_file_editor_tab)
+    _active_file_editor_tab->copy ();
+}
+
+void
+file_editor::request_cut ()
+{
+  file_editor_tab *_active_file_editor_tab = active_editor_tab ();
+  if (_active_file_editor_tab)
+    _active_file_editor_tab->cut ();
+}
+
+void
+file_editor::request_paste ()
+{
+  file_editor_tab *_active_file_editor_tab = active_editor_tab ();
+  if (_active_file_editor_tab)
+    _active_file_editor_tab->paste ();
+}
+
+void
+file_editor::request_save_file ()
+{
+  file_editor_tab *_active_file_editor_tab = active_editor_tab ();
+  if (_active_file_editor_tab)
+    _active_file_editor_tab->save_file ();
+}
+
+void
+file_editor::request_save_file_as ()
+{
+  file_editor_tab *_active_file_editor_tab = active_editor_tab ();
+  if (_active_file_editor_tab)
+    _active_file_editor_tab->save_file_as ();
+}
+
+void
+file_editor::request_run_file ()
+{
+  file_editor_tab *_active_file_editor_tab = active_editor_tab ();
+  if (_active_file_editor_tab)
+    _active_file_editor_tab->run_file ();
+}
+
+void
+file_editor::request_toggle_bookmark ()
+{
+  file_editor_tab *_active_file_editor_tab = active_editor_tab ();
+  if (_active_file_editor_tab)
+    _active_file_editor_tab->toggle_bookmark ();
+}
+
+void
+file_editor::request_next_bookmark ()
+{
+  file_editor_tab *_active_file_editor_tab = active_editor_tab ();
+  if (_active_file_editor_tab)
+    _active_file_editor_tab->next_bookmark ();
+}
+
+void
+file_editor::request_previous_bookmark ()
+{
+  file_editor_tab *_active_file_editor_tab = active_editor_tab ();
+  if (_active_file_editor_tab)
+    _active_file_editor_tab->previous_bookmark ();
+}
+
+void
+file_editor::request_remove_bookmark ()
+{
+  file_editor_tab *_active_file_editor_tab = active_editor_tab ();
+  if (_active_file_editor_tab)
+    _active_file_editor_tab->remove_bookmark ();
+}
+
+void
+file_editor::request_toggle_breakpoint ()
+{
+  file_editor_tab *_active_file_editor_tab = active_editor_tab ();
+  if (_active_file_editor_tab)
+    _active_file_editor_tab->toggle_breakpoint ();
+}
+
+void
+file_editor::request_next_breakpoint ()
+{
+  file_editor_tab *_active_file_editor_tab = active_editor_tab ();
+  if (_active_file_editor_tab)
+    _active_file_editor_tab->next_breakpoint ();
+}
+
+void
+file_editor::request_previous_breakpoint ()
+{
+  file_editor_tab *_active_file_editor_tab = active_editor_tab ();
+  if (_active_file_editor_tab)
+    _active_file_editor_tab->previous_breakpoint ();
+}
+
+void
+file_editor::request_remove_breakpoint ()
+{
+  file_editor_tab *_active_file_editor_tab = active_editor_tab ();
+  if (_active_file_editor_tab)
+    _active_file_editor_tab->remove_all_breakpoints ();
+}
+
+void
+file_editor::request_comment_selected_text ()
+{
+  file_editor_tab *_active_file_editor_tab = active_editor_tab ();
+  if (_active_file_editor_tab)
+    _active_file_editor_tab->comment_selected_text ();
+}
+
+void
+file_editor::request_uncomment_selected_text ()
+{
+  file_editor_tab *_active_file_editor_tab = active_editor_tab ();
+  if (_active_file_editor_tab)
+    _active_file_editor_tab->uncomment_selected_text ();
+}
+
+void
+file_editor::request_find ()
+{
+  file_editor_tab *_active_file_editor_tab = active_editor_tab ();
+  if (_active_file_editor_tab)
+    _active_file_editor_tab->find ();
+}
+
+void
+file_editor::handle_file_name_changed (QString fileName)
+{
+  QObject *senderObject = sender ();
+  file_editor_tab *fileEditorTab
+    = dynamic_cast<file_editor_tab*> (senderObject);
+  if (fileEditorTab)
+    {
+      for(int i = 0; i < _tab_widget->count (); i++)
+        {
+          if (_tab_widget->widget (i) == fileEditorTab)
+            {
+              _tab_widget->setTabText (i, fileName);
+            }
+        }
+    }
+}
+
+void
+file_editor::handle_tab_close_request (int index)
+{
+  file_editor_tab *fileEditorTab
+    = dynamic_cast <file_editor_tab*> (_tab_widget->widget (index));
+  if (fileEditorTab)
+    if (fileEditorTab->close ())
+      {
+        _tab_widget->removeTab (index);
+        delete fileEditorTab;
+      }
+}
+
+void
+file_editor::handle_tab_close_request ()
+{
+  file_editor_tab *fileEditorTab = dynamic_cast <file_editor_tab*> (sender ());
+  if (fileEditorTab)
+    if (fileEditorTab->close ())
+      {
+        _tab_widget->removeTab (_tab_widget->indexOf (fileEditorTab));
+        delete fileEditorTab;
+      }
+}
+
+void
+file_editor::active_tab_changed (int index)
+{
+  Q_UNUSED (index);
+  handle_editor_state_changed ();
+}
+
+void
+file_editor::handle_editor_state_changed ()
+{
+  file_editor_tab *f = active_editor_tab ();
+  if (f)
+    {
+      bool copy_available = f->copy_available ();
+      _copy_action->setEnabled (copy_available);
+      _cut_action->setEnabled (copy_available);
+      setFocusProxy (f);
+    }
+}
+
+void
+file_editor::construct ()
+{
+  QWidget *widget = new QWidget (this);
+  QStyle *style = QApplication::style ();
+
+  _menu_bar = new QMenuBar (widget);
+  _tool_bar = new QToolBar (widget);
+  _tab_widget = new QTabWidget (widget);
+  _tab_widget->setTabsClosable (true);
+
+  QAction *new_action = new QAction (QIcon(":/actions/icons/filenew.png"),
+        tr("&New File"), _tool_bar);
+
+  QAction *open_action = new QAction (QIcon(":/actions/icons/fileopen.png"),
+        tr("&Open File"), _tool_bar);
+
+  QAction *save_action = new QAction (QIcon(":/actions/icons/filesave.png"),
+        tr("&Save File"), _tool_bar);
+
+  QAction *save_as_action
+    = new QAction (QIcon(":/actions/icons/filesaveas.png"),
+                   tr("Save File &As"), _tool_bar);
+
+  QAction *undo_action = new QAction (QIcon(":/actions/icons/undo.png"),
+        tr("&Undo"), _tool_bar);
+
+  QAction *redo_action = new QAction (QIcon(":/actions/icons/redo.png"),
+        tr("&Redo"), _tool_bar);
+
+  _copy_action = new QAction (QIcon(":/actions/icons/editcopy.png"),
+                              tr ("&Copy"), _tool_bar);
+
+  _cut_action  = new QAction (QIcon(":/actions/icons/editcut.png"),
+                              tr ("Cu&t"), _tool_bar);
+
+  QAction *paste_action
+      = new QAction (QIcon (":/actions/icons/editpaste.png"),
+                     tr("Paste"), _tool_bar);
+  QAction *next_bookmark_action       = new QAction (tr ("&Next Bookmark"),_tool_bar);
+  QAction *previous_bookmark_action   = new QAction (tr ("Pre&vious Bookmark"),_tool_bar);
+  QAction *toggle_bookmark_action     = new QAction (tr ("Toggle &Bookmark"),_tool_bar);
+  QAction *remove_bookmark_action     = new QAction (tr ("&Remove All Bookmarks"),_tool_bar);
+
+  QAction *next_breakpoint_action
+      = new QAction (QIcon (":/actions/icons/bp_next.png"),
+                     tr ("&Next breakpoint"), _tool_bar);
+  QAction *previous_breakpoint_action
+      = new QAction (QIcon (":/actions/icons/bp_prev.png"),
+                     tr ("Pre&vious breakpoint"), _tool_bar);
+  QAction *toggle_breakpoint_action
+      = new QAction (QIcon (":/actions/icons/bp_toggle.png"),
+                     tr ("Toggle &breakpoint"), _tool_bar);
+  QAction *remove_all_breakpoints_action
+      = new QAction (QIcon (":/actions/icons/bp_rm_all.png"),
+                     tr ("&Remove All breakpoints"), _tool_bar);
+
+  QAction *comment_selection_action   = new QAction (tr ("&Comment Selected Text"),_tool_bar);
+  QAction *uncomment_selection_action = new QAction (tr ("&Uncomment Selected Text"),_tool_bar);
+
+  QAction *find_action = new QAction (QIcon(":/actions/icons/find.png"),
+                                      tr ("&Find and Replace"), _tool_bar);
+
+  _run_action = new QAction (QIcon(":/actions/icons/artsbuilderexecute.png"),
+        tr("Save File And Run"), _tool_bar);
+
+  // some actions are disabled from the beginning
+  _copy_action->setEnabled(false);
+  _cut_action->setEnabled(false);
+  _run_action->setShortcut                      (Qt::ControlModifier+ Qt::Key_R);
+  _run_action->setShortcutContext               (Qt::WindowShortcut);
+  next_bookmark_action->setShortcut             (Qt::Key_F2);
+  next_bookmark_action->setShortcutContext      (Qt::WindowShortcut);
+  previous_bookmark_action->setShortcut         (Qt::SHIFT + Qt::Key_F2);
+  previous_bookmark_action->setShortcutContext  (Qt::WindowShortcut);
+  toggle_bookmark_action->setShortcut           (Qt::Key_F7);
+  toggle_bookmark_action->setShortcutContext    (Qt::WindowShortcut);
+  comment_selection_action->setShortcut         (Qt::ControlModifier + Qt::Key_7);
+  comment_selection_action->setShortcutContext  (Qt::WindowShortcut);
+  uncomment_selection_action->setShortcut       (Qt::ControlModifier + Qt::Key_8);
+  uncomment_selection_action->setShortcutContext(Qt::WindowShortcut);
+  find_action->setShortcut                      (Qt::ControlModifier+Qt::Key_F);
+  find_action->setShortcutContext               (Qt::WindowShortcut);
+
+  // toolbar
+  _tool_bar->addAction (new_action);
+  _tool_bar->addAction (open_action);
+  _tool_bar->addAction (save_action);
+  _tool_bar->addAction (save_as_action);
+  _tool_bar->addSeparator ();
+  _tool_bar->addAction (undo_action);
+  _tool_bar->addAction (redo_action);
+  _tool_bar->addAction (_copy_action);
+  _tool_bar->addAction (_cut_action);
+  _tool_bar->addAction (paste_action);
+  _tool_bar->addSeparator ();
+  _tool_bar->addAction (find_action);
+  _tool_bar->addAction (_run_action);
+  _tool_bar->addSeparator ();
+  _tool_bar->addAction (toggle_breakpoint_action);
+  _tool_bar->addAction (next_breakpoint_action);
+  _tool_bar->addAction (previous_breakpoint_action);
+  _tool_bar->addAction (remove_all_breakpoints_action);
+
+  // menu bar
+  QMenu *fileMenu = new QMenu (tr ("&File"), _menu_bar);
+  fileMenu->addAction (new_action);
+  fileMenu->addAction (open_action);
+  fileMenu->addAction (save_action);
+  fileMenu->addAction (save_as_action);
+  fileMenu->addSeparator ();
+  _menu_bar->addMenu (fileMenu);
+
+  QMenu *editMenu = new QMenu (tr ("&Edit"), _menu_bar);
+  editMenu->addAction (undo_action);
+  editMenu->addAction (redo_action);
+  editMenu->addSeparator ();
+  editMenu->addAction (_copy_action);
+  editMenu->addAction (_cut_action);
+  editMenu->addAction (paste_action);
+  editMenu->addSeparator ();
+  editMenu->addAction (find_action);
+  editMenu->addSeparator ();
+  editMenu->addAction (comment_selection_action);
+  editMenu->addAction (uncomment_selection_action);
+  editMenu->addSeparator ();
+  editMenu->addAction (toggle_bookmark_action);
+  editMenu->addAction (next_bookmark_action);
+  editMenu->addAction (previous_bookmark_action);
+  editMenu->addAction (remove_bookmark_action);
+  _menu_bar->addMenu (editMenu);
+
+  _debug_menu = new QMenu (tr ("&Debug"), _menu_bar);
+  _debug_menu->addAction (toggle_breakpoint_action);
+  _debug_menu->addAction (next_breakpoint_action);
+  _debug_menu->addAction (previous_breakpoint_action);
+  _debug_menu->addAction (remove_all_breakpoints_action);
+  _debug_menu->addSeparator ();
+  // The other debug actions will be added by the main window.
+  _menu_bar->addMenu (_debug_menu);
+
+  QMenu *_run_menu = new QMenu (tr ("&Run"), _menu_bar);
+  _run_menu->addAction (_run_action);
+  _menu_bar->addMenu (_run_menu);
+
+  QVBoxLayout *layout = new QVBoxLayout ();
+  layout->addWidget (_menu_bar);
+  layout->addWidget (_tool_bar);
+  layout->addWidget (_tab_widget);
+  layout->setMargin (0);
+  widget->setLayout (layout);
+  setWidget (widget);
+
+  connect (new_action,
+           SIGNAL (triggered ()), this, SLOT (request_new_file ()));
+  connect (open_action,              
+           SIGNAL (triggered ()), this, SLOT (request_open_file ()));
+  connect (undo_action,
+           SIGNAL (triggered ()), this, SLOT (request_undo ()));
+  connect (redo_action,
+           SIGNAL (triggered ()), this, SLOT (request_redo ()));
+  connect (_copy_action,
+           SIGNAL (triggered ()), this, SLOT (request_copy ()));
+  connect (_cut_action,
+           SIGNAL (triggered ()), this, SLOT (request_cut ()));
+  connect (paste_action,
+           SIGNAL (triggered ()), this, SLOT (request_paste ()));
+  connect (save_action,
+           SIGNAL (triggered ()), this, SLOT (request_save_file ()));
+  connect (save_as_action,
+           SIGNAL (triggered ()), this, SLOT (request_save_file_as ()));
+  connect (_run_action,
+           SIGNAL (triggered ()), this, SLOT (request_run_file ()));
+  connect (toggle_bookmark_action,
+           SIGNAL (triggered ()), this, SLOT (request_toggle_bookmark ()));
+  connect (next_bookmark_action,
+           SIGNAL (triggered ()), this, SLOT (request_next_bookmark ()));
+  connect (previous_bookmark_action,
+           SIGNAL (triggered ()), this, SLOT (request_previous_bookmark ()));
+  connect (remove_bookmark_action,
+           SIGNAL (triggered ()), this, SLOT (request_remove_bookmark ()));
+  connect (toggle_breakpoint_action,
+           SIGNAL (triggered ()), this, SLOT (request_toggle_breakpoint ()));
+  connect (next_breakpoint_action,
+           SIGNAL (triggered ()), this, SLOT (request_next_breakpoint ()));
+  connect (previous_breakpoint_action,
+           SIGNAL (triggered ()), this, SLOT (request_previous_breakpoint ()));
+  connect (remove_all_breakpoints_action,
+           SIGNAL (triggered ()), this, SLOT (request_remove_breakpoint ()));
+  connect (comment_selection_action,
+           SIGNAL (triggered ()), this, SLOT (request_comment_selected_text ()));
+  connect (uncomment_selection_action,
+           SIGNAL (triggered ()), this, SLOT (request_uncomment_selected_text ()));
+  connect (find_action,
+           SIGNAL (triggered ()), this, SLOT (request_find ()));
+  connect (_tab_widget,
+           SIGNAL (tabCloseRequested (int)), this, SLOT (handle_tab_close_request (int)));
+  connect (_tab_widget,
+           SIGNAL (currentChanged(int)), this, SLOT (active_tab_changed (int)));
+
+  resize (500, 400);
+  setWindowIcon (QIcon::fromTheme ("accessories-text-editor",
+                                   style->standardIcon (QStyle::SP_FileIcon)));
+  setWindowTitle ("Octave Editor");
+}
+
+void
+file_editor::add_file_editor_tab (file_editor_tab *f)
+{
+  _tab_widget->addTab (f, "");
+  connect (f, SIGNAL (file_name_changed(QString)),
+           this, SLOT(handle_file_name_changed(QString)));
+  connect (f, SIGNAL (editor_state_changed ()),
+           this, SLOT (handle_editor_state_changed ()));
+  connect (f, SIGNAL (close_request ()),
+           this, SLOT (handle_tab_close_request ()));
+  _tab_widget->setCurrentWidget (f);
+}
+
+file_editor_tab *
+file_editor::active_editor_tab ()
+{
+  return dynamic_cast<file_editor_tab*> (_tab_widget->currentWidget ());
+}
new file mode 100644
--- /dev/null
+++ b/gui/src/m-editor/file-editor.h
@@ -0,0 +1,107 @@
+/* OctaveGUI - A graphical user interface for Octave
+ * Copyright (C) 2011 Jacob Dawid (jacob.dawid@googlemail.com)
+ *
+ * This program 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.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef FILEEDITORMDISUBWINDOW_H
+#define FILEEDITORMDISUBWINDOW_H
+
+#include <QToolBar>
+#include <QAction>
+#include <QMenuBar>
+#include <QStatusBar>
+#include <QCloseEvent>
+#include <QTabWidget>
+
+#include "main-window.h"
+#include "file-editor-interface.h"
+#include "file-editor-tab.h"
+
+const char UNNAMED_FILE[]     = "<unnamed>";
+const char SAVE_FILE_FILTER[] = "Octave Files (*.m);;All Files (*.*)";
+enum editor_markers
+  {
+    bookmark,
+    breakpoint,
+    debugger_position
+  };
+
+class file_editor : public file_editor_interface
+{
+Q_OBJECT
+
+public:
+  file_editor (QTerminal *terminal, main_window *m);
+  ~file_editor ();
+  void loadFile (QString fileName);
+
+  QTerminal *       terminal ();
+  main_window *     get_main_window ();
+
+  QMenu *           debug_menu ();
+  QToolBar *        toolbar ();
+
+  void handle_entered_debug_mode ();
+  void handle_quit_debug_mode ();
+
+public slots:
+  void request_new_file ();
+  void request_open_file ();
+  void request_open_file (QString fileName);
+
+  void request_undo ();
+  void request_redo ();
+  void request_copy ();
+  void request_cut ();
+  void request_paste ();
+  void request_save_file ();
+  void request_save_file_as ();
+  void request_run_file ();
+  void request_toggle_bookmark ();
+  void request_next_bookmark ();
+  void request_previous_bookmark ();
+  void request_remove_bookmark ();
+
+  void request_toggle_breakpoint ();
+  void request_next_breakpoint ();
+  void request_previous_breakpoint ();
+  void request_remove_breakpoint ();
+
+  void request_comment_selected_text ();
+  void request_uncomment_selected_text ();
+  void request_find ();
+
+  void handle_file_name_changed (QString fileName);
+  void handle_tab_close_request (int index);
+  void handle_tab_close_request ();
+  void active_tab_changed (int index);
+  void handle_editor_state_changed ();
+
+private:
+  void construct ();
+  void add_file_editor_tab(file_editor_tab *f);
+  file_editor_tab *active_editor_tab();
+
+  QMenuBar *        _menu_bar;
+  QToolBar *        _tool_bar;
+  QMenu *           _debug_menu;
+  QAction *         _copy_action;
+  QAction *         _cut_action;
+  QAction *         _run_action;
+  QTabWidget *      _tab_widget;
+  int               _marker_breakpoint;
+};
+
+#endif // FILEEDITORMDISUBWINDOW_H
new file mode 100644
--- /dev/null
+++ b/gui/src/m-editor/find-dialog.cc
@@ -0,0 +1,195 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui>
+#include <QIcon>
+#include "find-dialog.h"
+
+find_dialog::find_dialog (QsciScintilla* edit_area, QWidget *parent)
+  : QDialog (parent)
+{
+  setWindowTitle ("Find and Replace");
+  setWindowIcon (QIcon(":/actions/icons/logo.png"));
+
+  _search_label = new QLabel (tr ("Find &what:"));
+  _search_line_edit = new QLineEdit;
+  _search_label->setBuddy (_search_line_edit);
+  _replace_label = new QLabel (tr ("Re&place with:"));
+  _replace_line_edit = new QLineEdit;
+  _replace_label->setBuddy (_replace_line_edit);
+
+  _case_check_box = new QCheckBox (tr ("Match &case"));
+  _from_start_check_box = new QCheckBox (tr ("Search from &start"));
+  _wrap_check_box = new QCheckBox (tr ("&Wrap while searching"));
+  _wrap_check_box->setChecked(true);
+  _find_next_button = new QPushButton (tr ("&Find Next"));
+  _find_next_button->setDefault (true);
+  _replace_button = new QPushButton (tr ("&Replace"));
+  _replace_all_button = new QPushButton (tr ("Replace &All"));
+
+  _more_button = new QPushButton (tr ("&More"));
+  _more_button->setCheckable (true);
+  _more_button->setAutoDefault (false);
+
+  _button_box = new QDialogButtonBox (Qt::Vertical);
+  _button_box->addButton (_find_next_button, QDialogButtonBox::ActionRole);
+  _button_box->addButton (_replace_button, QDialogButtonBox::ActionRole);
+  _button_box->addButton (_replace_all_button, QDialogButtonBox::ActionRole);
+  _button_box->addButton (_more_button, QDialogButtonBox::ActionRole);
+
+  _extension = new QWidget (this);
+  _whole_words_check_box = new QCheckBox (tr ("&Whole words"));
+  _regex_check_box = new QCheckBox (tr ("Regular E&xpressions"));
+  _backward_check_box = new QCheckBox (tr ("Search &backward"));
+  _search_selection_check_box = new QCheckBox (tr ("Search se&lection"));
+  _search_selection_check_box->setCheckable (false); // TODO: Not implemented.
+  _search_selection_check_box->setEnabled (false);
+
+  _edit_area = edit_area;
+  connect (_find_next_button,   SIGNAL (clicked ()),
+           this,                SLOT (search_next ()));
+  connect (_more_button,        SIGNAL (toggled (bool)),
+           _extension,          SLOT (setVisible (bool)));
+  connect (_replace_button,     SIGNAL (clicked ()),
+           this,                SLOT (replace ()));
+  connect (_replace_all_button, SIGNAL (clicked ()),
+           this,                SLOT (replace_all ()));
+
+  QVBoxLayout *extension_layout = new QVBoxLayout ();
+  extension_layout->setMargin (0);
+  extension_layout->addWidget (_whole_words_check_box);
+  extension_layout->addWidget (_backward_check_box);
+  extension_layout->addWidget (_search_selection_check_box);
+  _extension->setLayout (extension_layout);
+
+  QGridLayout *top_left_layout = new QGridLayout;
+  top_left_layout->addWidget (_search_label, 1, 1);
+  top_left_layout->addWidget (_search_line_edit, 1, 2);
+  top_left_layout->addWidget (_replace_label, 2, 1);
+  top_left_layout->addWidget (_replace_line_edit, 2, 2);
+
+  QVBoxLayout *left_layout = new QVBoxLayout;
+  left_layout->addLayout (top_left_layout);
+  left_layout->insertStretch (1, 5);
+  left_layout->addWidget (_case_check_box);
+  left_layout->addWidget (_from_start_check_box);
+  left_layout->addWidget (_wrap_check_box);
+  left_layout->addWidget (_regex_check_box);
+
+  QGridLayout *main_layout = new QGridLayout;
+  main_layout->setSizeConstraint (QLayout::SetFixedSize);
+  main_layout->addLayout (left_layout, 0, 0);
+  main_layout->addWidget (_button_box, 0, 1);
+  main_layout->addWidget (_extension, 1, 0, 1, 2);
+  setLayout (main_layout);
+
+  _extension->hide ();
+}
+
+void
+find_dialog::search_next ()
+{
+  int line = -1, col = -1;
+
+  _find_result_available = false;
+  if (_from_start_check_box->isChecked ())
+    {
+      line = 1;
+      col  = 1;
+    }
+
+  if (_edit_area)
+    {
+      _find_result_available = _edit_area->findFirst (_search_line_edit->text (),
+                                      _regex_check_box->isChecked (),
+                                      _case_check_box->isChecked (),
+                                      _whole_words_check_box->isChecked (),
+                                      _wrap_check_box->isChecked (),
+                                      !_backward_check_box->isChecked (),
+                                      line,col,
+                                      true,
+                                      true
+                                      );
+    }
+}
+
+
+void
+find_dialog::replace ()
+{
+  if (_edit_area)
+    {
+      _edit_area->replace (_replace_line_edit->text ());
+      _edit_area->findNext();
+    }
+}
+
+void
+find_dialog::replace_all ()
+{
+  int count = 0;
+
+  // check whether find & replace srings are different (avoid endless loop!)
+  int strDiff;
+  Qt::CaseSensitivity cs;
+  if (_case_check_box->isChecked())
+    {
+      cs = Qt::CaseSensitive;
+    }
+  else
+    {
+      cs = Qt::CaseInsensitive;
+    }
+  strDiff = QString::compare(_search_line_edit->text(),_replace_line_edit->text(),cs);
+
+  // replace all if strings are different
+  if (_edit_area && strDiff )
+    {
+      search_next ();  // find first occurence
+      while (_find_result_available)   // while search string is found
+        {
+          _edit_area->replace (_replace_line_edit->text ());   // replace
+          count++;                                             // inc counter
+          _find_result_available = _edit_area->findNext();                     // and find next
+        }
+    }
+  // TODO: Show number of replaced strings
+}
new file mode 100644
--- /dev/null
+++ b/gui/src/m-editor/find-dialog.h
@@ -0,0 +1,89 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial Usage
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef FIND_DIALOG_H
+#define FIND_DIALOG_H
+
+#include <QDialog>
+#include <Qsci/qsciscintilla.h>
+
+class QCheckBox;
+class QDialogButtonBox;
+class QGroupBox;
+class QLabel;
+class QLineEdit;
+class QPushButton;
+
+class find_dialog : public QDialog
+{
+  Q_OBJECT
+public:
+  find_dialog (QsciScintilla* edit_area, QWidget *parent = 0);
+
+private slots:
+  void search_next ();
+  void replace ();
+  void replace_all ();
+
+private:
+  QLabel            *_search_label;
+  QLineEdit         *_search_line_edit;
+  QLabel            *_replace_label;
+  QLineEdit         *_replace_line_edit;
+  QCheckBox         *_case_check_box;
+  QCheckBox         *_from_start_check_box;
+  QCheckBox         *_wrap_check_box;
+  QCheckBox         *_whole_words_check_box;
+  QCheckBox         *_regex_check_box;
+  QCheckBox         *_search_selection_check_box;
+  QCheckBox         *_backward_check_box;
+  QDialogButtonBox  *_button_box;
+  QPushButton       *_find_next_button;
+  QPushButton       *_replace_button;
+  QPushButton       *_replace_all_button;
+  QPushButton       *_more_button;
+  QWidget           *_extension;
+  QsciScintilla     *_edit_area;
+  bool               _find_result_available;
+};
+
+#endif // FIND_DIALOG_H
+
new file mode 100644
--- /dev/null
+++ b/gui/src/m-editor/lexer-octave-gui.cc
@@ -0,0 +1,141 @@
+/* OctaveGUI - A graphical user interface for Octave
+ * Copyright (C) 2011 Jacob Dawid (jacob.dawid@googlemail.com)
+ *
+ * This program 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.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "lexer-octave-gui.h"
+#include <qcolor.h>
+#include <qfont.h>
+
+// -----------------------------------------------------
+// Some basic functions
+// -----------------------------------------------------
+lexer_octave_gui::lexer_octave_gui(QObject *parent)
+    : QsciLexer(parent)  // inherit from base lexer
+{
+}
+
+lexer_octave_gui::~lexer_octave_gui()
+{
+}
+
+const char *lexer_octave_gui::language() const
+{
+  return "Octave";  // return the name of the language
+}
+
+const char *lexer_octave_gui::lexer() const
+{
+  return "octave";  // return the name of the lexer
+}
+
+// -----------------------------------------------------
+// The colors for syntax highlighting
+// -----------------------------------------------------
+QColor lexer_octave_gui::defaultColor(int style) const
+{
+    switch (style)
+      {
+        case Default:  // black
+          return QColor(0x00,0x00,0x00);
+        case Operator: // red
+          return QColor(0xef,0x00,0x00);
+        case Comment:  // gray
+          return QColor(0x7f,0x7f,0x7f);
+        case Command:  // blue-green
+          return QColor(0x00,0x7f,0x7f);
+        case Number:   // orange
+          return QColor(0x7f,0x7f,0x00);
+        case Keyword:  // blue
+          return QColor(0x00,0x00,0xbf);
+        case SingleQuotedString: // green
+          return QColor(0x00,0x7f,0x00);
+        case DoubleQuotedString: // green-yellow
+          return QColor(0x4f,0x7f,0x00);
+      }
+    return QsciLexer::defaultColor(style);
+}
+
+
+// -----------------------------------------------------
+// The font decorations for highlighting
+// -----------------------------------------------------
+QFont lexer_octave_gui::defaultFont(int style) const
+{
+    QFont f;
+
+    switch (style)
+      {
+        case Comment: // default but italic
+          f = QsciLexer::defaultFont(style);
+          f.setItalic(true);
+          break;
+        case Keyword: // default
+          f = QsciLexer::defaultFont(style);
+          break;
+        case Operator:  // default
+          f = QsciLexer::defaultFont(style);
+          break;
+        default:        // default
+          f = QsciLexer::defaultFont(style);
+          break;
+      }
+    return f;   // return the selected font
+}
+
+
+// -----------------------------------------------------
+// Style names
+// -----------------------------------------------------
+QString lexer_octave_gui::description(int style) const
+{
+    switch (style)
+      {
+        case Default:
+          return tr("Default");
+        case Comment:
+          return tr("Comment");
+        case Command:
+          return tr("Command");
+        case Number:
+          return tr("Number");
+        case Keyword:
+          return tr("Keyword");
+        case SingleQuotedString:
+          return tr("Single-quoted string");
+        case Operator:
+          return tr("Operator");
+        case Identifier:
+          return tr("Identifier");
+        case DoubleQuotedString:
+          return tr("Double-quoted string");
+      }
+    return QString();
+}
+
+
+// -----------------------------------------------------
+// The set of keywords for highlighting
+// TODO: How to define a second set?
+// -----------------------------------------------------
+const char *lexer_octave_gui::keywords(int set) const
+{
+    if (set == 1)
+      {
+        return resource_manager::octave_keywords ();
+      }
+    return 0;
+}
+
new file mode 100644
--- /dev/null
+++ b/gui/src/m-editor/lexer-octave-gui.h
@@ -0,0 +1,60 @@
+/* OctaveGUI - A graphical user interface for Octave
+ * Copyright (C) 2011 Jacob Dawid (jacob.dawid@googlemail.com)
+ *
+ * This program 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.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef LEXEROCTAVE_H
+#define LEXEROCTAVE_H
+
+#include "resource-manager.h"
+#include <QObject>
+#include <Qsci/qsciglobal.h>
+#include <Qsci/qscilexer.h>
+
+
+class lexer_octave_gui : public QsciLexer
+{
+    Q_OBJECT
+
+public:
+    // the used styles
+    enum
+      {
+        Default = 0,
+        Comment = 1,
+        Command = 2,
+        Number = 3,
+        Keyword = 4,
+        SingleQuotedString = 5,
+        Operator = 6,
+        Identifier = 7,
+        DoubleQuotedString = 8
+      };
+
+    lexer_octave_gui (QObject *parent = 0);
+    virtual ~lexer_octave_gui ();
+    const char *language () const;
+    const char *lexer () const;
+    QColor defaultColor (int style) const;
+    QFont defaultFont (int style) const;
+    const char *keywords (int set) const;
+    QString description (int style) const;
+
+private:
+    lexer_octave_gui (const lexer_octave_gui &);
+    lexer_octave_gui &operator= (const lexer_octave_gui &);
+};
+
+#endif
new file mode 100644
--- /dev/null
+++ b/gui/src/main-window.cc
@@ -0,0 +1,865 @@
+/* OctaveGUI - A graphical user interface for Octave
+ * Copyright (C) 2011 Jacob Dawid (jacob.dawid@googlemail.com)
+ *
+ * This program 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.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <QMenuBar>
+#include <QMenu>
+#include <QAction>
+#include <QSettings>
+#include <QStyle>
+#include <QToolBar>
+#include <QDesktopServices>
+#include <QFileDialog>
+#include <QMessageBox>
+#include <QIcon>
+
+#include "main-window.h"
+#include "file-editor.h"
+#include "settings-dialog.h"
+
+main_window::main_window (QWidget * parent)
+  : QMainWindow (parent), octave_event_observer ()
+{
+  // We have to set up all our windows, before we finally launch octave.
+  construct ();
+  octave_link::instance ()->launch_octave();
+}
+
+main_window::~main_window ()
+{
+}
+
+void
+main_window::event_accepted (octave_event *e)
+{
+  if (dynamic_cast<octave_clear_history_event*> (e))
+    {
+      // After clearing the history, we need to reset the model.
+      _history_dock_widget->reset_model ();
+    }
+  delete e;
+}
+
+void
+main_window::event_reject (octave_event *e)
+{
+  delete e;
+}
+
+void
+main_window::new_file ()
+{
+  _file_editor->request_new_file ();
+  focus_editor ();
+}
+
+void
+main_window::open_file ()
+{
+  _file_editor->request_open_file ();
+  focus_editor ();
+}
+
+void
+main_window::open_file (QString file_name)
+{
+  _file_editor->request_open_file (file_name);
+  focus_editor ();
+}
+
+void
+main_window::report_status_message (QString statusMessage)
+{
+  _status_bar->showMessage (statusMessage, 1000);
+}
+
+void
+main_window::handle_save_workspace_request ()
+{
+  QString selectedFile =
+      QFileDialog::getSaveFileName (this, tr ("Save Workspace"),
+                                    resource_manager::get_home_path ());
+  if (!selectedFile.isEmpty ())
+    {
+      octave_link::instance ()
+          ->post_event (new octave_save_workspace_event (*this,
+          selectedFile.toStdString()));
+    }
+}
+
+void
+main_window::handle_load_workspace_request ()
+{
+  QString selectedFile =
+      QFileDialog::getOpenFileName (this, tr ("Load Workspace"),
+                                    resource_manager::get_home_path ());
+  if (!selectedFile.isEmpty ())
+    {
+      octave_link::instance ()
+          ->post_event (new octave_load_workspace_event (*this,
+            selectedFile.toStdString()));
+    }
+}
+
+void
+main_window::handle_clear_workspace_request ()
+{
+  octave_link::instance ()
+      ->post_event (new octave_clear_workspace_event (*this));
+}
+
+void
+main_window::handle_clear_history_request()
+{
+  octave_link::instance ()
+      ->post_event (new octave_clear_history_event (*this));
+}
+
+void
+main_window::handle_command_double_clicked (QString command)
+{
+  _terminal->sendText (command);
+  _terminal->setFocus ();
+}
+
+void
+main_window::open_bug_tracker_page ()
+{
+  QDesktopServices::openUrl (QUrl ("http://bugs.octave.org"));
+}
+
+void
+main_window::open_agora_page ()
+{
+  QDesktopServices::openUrl (QUrl ("http://agora.octave.org/"));
+}
+
+void
+main_window::open_octave_forge_page ()
+{
+  QDesktopServices::openUrl (QUrl ("http://octave.sourceforge.net/"));
+}
+
+void
+main_window::process_settings_dialog_request ()
+{
+  settings_dialog *settingsDialog = new settings_dialog (this);
+  settingsDialog->exec ();
+  delete settingsDialog;
+  emit settings_changed ();
+}
+
+void
+main_window::notice_settings ()
+{
+  // Set terminal font:
+  QSettings *settings = resource_manager::get_settings ();
+
+  // FIXME -- what should happen if settings is 0?
+
+  QFont font = QFont();
+  font.setFamily(settings->value("terminal/fontName").toString());
+  font.setPointSize(settings->value("terminal/fontSize").toInt ());
+  _terminal->setTerminalFont(font);
+
+  QString cursorType = settings->value ("terminal/cursorType").toString ();
+  bool cursorBlinking = settings->value ("terminal/cursorBlinking").toBool ();
+  if (cursorType == "ibeam")
+    _terminal->setCursorType(QTerminalInterface::IBeamCursor, cursorBlinking);
+  else if (cursorType == "block")
+    _terminal->setCursorType(QTerminalInterface::BlockCursor, cursorBlinking);
+  else if (cursorType == "underline")
+    _terminal->setCursorType(QTerminalInterface::UnderlineCursor,
+                             cursorBlinking);
+
+  resource_manager::update_network_settings ();
+}
+
+void
+main_window::prepare_for_quit ()
+{
+  write_settings ();
+}
+
+void
+main_window::reset_windows ()
+{
+  // TODO: Implement.
+}
+
+void
+main_window::current_working_directory_has_changed (QString directory)
+{
+  if (_current_directory_combo_box->count () > 31)
+    {
+      _current_directory_combo_box->removeItem (0);
+    }
+  _current_directory_combo_box->addItem (directory);
+  int index = _current_directory_combo_box->findText (directory);
+  _current_directory_combo_box->setCurrentIndex (index);
+
+  _files_dock_widget->set_current_directory (directory);
+}
+
+void
+main_window::change_current_working_directory ()
+{
+  QString selectedDirectory =
+      QFileDialog::getExistingDirectory(this, tr ("Set working direcotry"));
+
+  if (!selectedDirectory.isEmpty ())
+    {
+      octave_link::instance ()
+          ->post_event (new octave_change_directory_event (*this,
+                        selectedDirectory.toStdString ()));
+    }
+}
+
+void
+main_window::set_current_working_directory (QString directory)
+{
+  octave_link::instance ()
+      ->post_event (new octave_change_directory_event (*this,
+                    directory.toStdString ()));
+}
+
+void
+main_window::current_working_directory_up ()
+{
+  set_current_working_directory ("..");
+}
+
+void
+main_window::focus_command_window ()
+{
+  if (!_terminal_dock_widget->isVisible ())
+    {
+      _terminal_dock_widget->setVisible (true);
+    }
+
+  _terminal_dock_widget->setFocus ();
+  _terminal_dock_widget->activateWindow ();
+  _terminal_dock_widget->raise ();
+
+  _terminal->setFocus ();
+  _terminal->activateWindow ();
+  _terminal->raise ();
+}
+
+void
+main_window::focus_command_history ()
+{
+  if (!_history_dock_widget->isVisible ())
+    {
+      _history_dock_widget->setVisible (true);
+    }
+
+  _history_dock_widget->setFocus ();
+  _history_dock_widget->activateWindow ();
+  _history_dock_widget->raise ();
+}
+
+void
+main_window::focus_current_directory ()
+{
+  if (!_files_dock_widget->isVisible ())
+    {
+      _files_dock_widget->setVisible (true);
+    }
+
+  _files_dock_widget->setFocus ();
+  _files_dock_widget->activateWindow ();
+  _files_dock_widget->raise ();
+}
+
+void
+main_window::focus_workspace ()
+{
+  if (!_workspace_view->isVisible ())
+    {
+      _workspace_view->setVisible (true);
+    }
+
+  _workspace_view->setFocus ();
+  _workspace_view->activateWindow ();
+  _workspace_view->raise ();
+}
+
+void
+main_window::focus_editor ()
+{
+  if (!_file_editor->isVisible ())
+    {
+      _file_editor->setVisible (true);
+    }
+
+  _file_editor->setFocus ();
+  _file_editor->activateWindow ();
+  _file_editor->raise ();
+}
+
+void
+main_window::focus_documentation ()
+{
+  if (!_documentation_dock_widget->isVisible ())
+    {
+      _documentation_dock_widget->setVisible (true);
+    }
+
+  _documentation_dock_widget->setFocus ();
+  _documentation_dock_widget->activateWindow ();
+  _documentation_dock_widget->raise ();
+}
+
+void
+main_window::handle_entered_debug_mode ()
+{
+  setWindowTitle ("Octave (Debugging)");
+  _debug_continue->setEnabled (true);
+  _debug_step_into->setEnabled (true);
+  _debug_step_over->setEnabled (true);
+  _debug_step_out->setEnabled (true);
+  _debug_quit->setEnabled (true);
+  _file_editor->handle_entered_debug_mode ();
+}
+
+void
+main_window::handle_quit_debug_mode ()
+{
+  setWindowTitle ("Octave");
+  _debug_continue->setEnabled (false);
+  _debug_step_into->setEnabled (false);
+  _debug_step_over->setEnabled (false);
+  _debug_step_out->setEnabled (false);
+  _debug_quit->setEnabled (false);
+  _file_editor->handle_quit_debug_mode ();
+}
+
+void
+main_window::debug_continue ()
+{
+  octave_link::instance ()
+      ->post_event (new octave_debug_continue_event (*this));
+}
+
+void
+main_window::debug_step_into ()
+{
+  octave_link::instance ()
+      ->post_event (new octave_debug_step_into_event (*this));
+}
+
+void
+main_window::debug_step_over ()
+{
+  octave_link::instance ()
+      ->post_event (new octave_debug_step_over_event (*this));
+}
+
+void
+main_window::debug_step_out ()
+{
+  octave_link::instance ()
+      ->post_event (new octave_debug_step_out_event (*this));
+}
+
+void
+main_window::debug_quit ()
+{
+  octave_link::instance ()
+      ->post_event (new octave_debug_quit_event (*this));
+}
+
+void
+main_window::show_about_octave ()
+{
+  QString message =
+      "GNU Octave\n"
+      "Copyright (C) 2009 John W. Eaton and others.\n"
+      "This is free software; see the source code for copying conditions."
+      "There is ABSOLUTELY NO WARRANTY; not even for MERCHANTABILITY or"
+      "FITNESS FOR A PARTICULAR PURPOSE.  For details, type `warranty'.\n"
+      "\n"
+      "Additional information about Octave is available at http://www.octave.org.\n"
+      "\n"
+      "Please contribute if you find this software useful."
+      "For more information, visit http://www.octave.org/help-wanted.html\n"
+      "\n"
+      "Report bugs to <bug@octave.org> (but first, please read"
+      "http://www.octave.org/bugs.html to learn how to write a helpful report).\n"
+      "\n"
+      "For information about changes from previous versions, type `news'.\n";
+
+  QMessageBox::about (this, tr ("About Octave"), message);
+}
+
+void
+main_window::closeEvent (QCloseEvent * closeEvent)
+{
+  closeEvent->ignore ();
+  octave_link::instance ()->post_event (new octave_exit_event (*this));
+ }
+
+void
+main_window::read_settings ()
+{
+  QSettings *settings = resource_manager::get_settings ();
+
+  // FIXME -- what should happen if settings is 0?
+
+  restoreGeometry (settings->value ("MainWindow/geometry").toByteArray ());
+  restoreState (settings->value ("MainWindow/windowState").toByteArray ());
+  emit settings_changed ();
+}
+
+void
+main_window::write_settings ()
+{
+  QSettings *settings = resource_manager::get_settings ();
+
+  // FIXME -- what should happen if settings is 0?
+
+  settings->setValue ("MainWindow/geometry", saveGeometry ());
+  settings->setValue ("MainWindow/windowState", saveState ());
+  settings->sync ();
+}
+
+void
+main_window::construct ()
+{
+  _closing = false;   // flag for editor files when closed
+  setWindowIcon (QIcon(":/actions/icons/logo.png"));
+
+  // Setup dockable widgets and the status bar.
+  _workspace_view           = new workspace_view (this);
+  _workspace_view->setStatusTip (tr ("View the variables in the active workspace."));
+  _history_dock_widget      = new history_dock_widget (this);
+  _history_dock_widget->setStatusTip (tr ("Browse and search the command history."));
+  _files_dock_widget        = new files_dock_widget (this);
+  _files_dock_widget->setStatusTip (tr ("Browse your files."));
+  _documentation_dock_widget= new documentation_dock_widget (this);
+  _documentation_dock_widget->setStatusTip (tr ("See the documentation for help."));
+  _status_bar               = new QStatusBar (this);
+
+  _current_directory_combo_box = new QComboBox (this);
+  _current_directory_combo_box->setFixedWidth (300);
+  _current_directory_combo_box->setEditable (true);
+  _current_directory_combo_box->setInsertPolicy (QComboBox::InsertAtTop);
+  _current_directory_combo_box->setMaxVisibleItems (14);
+
+  _current_directory_tool_button = new QToolButton (this);
+  _current_directory_tool_button->setIcon (QIcon(":/actions/icons/search.png"));
+
+  _current_directory_up_tool_button = new QToolButton (this);
+  _current_directory_up_tool_button->setIcon (QIcon(":/actions/icons/up.png"));
+
+  // Octave Terminal subwindow.
+  _terminal = new QTerminal (this);
+  _terminal->setObjectName ("OctaveTerminal");
+  _terminal->setFocusPolicy (Qt::StrongFocus);
+  _terminal_dock_widget = new terminal_dock_widget (_terminal, this);
+  _terminal_dock_widget->setWindowIcon (QIcon(":/actions/icons/terminal.png"));
+
+  QWidget *dummyWidget = new QWidget ();
+  dummyWidget->setObjectName ("CentralDummyWidget");
+  dummyWidget->resize (10, 10);
+  dummyWidget->setSizePolicy (QSizePolicy::Minimum, QSizePolicy::Minimum);
+  dummyWidget->hide ();
+  setCentralWidget (dummyWidget);
+
+  _file_editor = new file_editor (_terminal, this);
+
+  QMenu *file_menu = menuBar ()->addMenu (tr ("&File"));
+
+  QMenu *new_menu = file_menu->addMenu(tr ("New"));
+
+  QAction *new_script_action
+      = new_menu->addAction (QIcon(":/actions/icons/filenew.png"), tr ("Script"));
+  new_script_action->setShortcut (Qt::ControlModifier + Qt::Key_N);
+
+  QAction *new_function_action = new_menu->addAction (tr ("Function"));
+  new_function_action->setEnabled (false); // TODO: Make this work.
+  QAction *new_class_action = new_menu->addAction (tr ("Class"));
+  new_class_action->setEnabled (false); // TODO: Make this work.
+  QAction *new_enumeration_action = new_menu->addAction (tr ("Enumeration"));
+  new_enumeration_action->setEnabled (false); // TODO: Make this work.
+  QAction *new_figure_action = new_menu->addAction (tr ("Figure"));
+  new_figure_action->setEnabled (false); // TODO: Make this work.
+  QAction *new_variable_action = new_menu->addAction (tr ("Variable"));
+  new_variable_action->setEnabled (false); // TODO: Make this work.
+  QAction *new_model_action = new_menu->addAction (tr ("Model"));
+  new_model_action->setEnabled (false); // TODO: Make this work.
+  QAction *new_gui_action = new_menu->addAction (tr ("GUI"));
+  new_gui_action->setEnabled (false); // TODO: Make this work.
+
+  QAction *open_action
+      = file_menu->addAction (QIcon(":/actions/icons/fileopen.png"), tr ("Open..."));
+  open_action->setShortcut (Qt::ControlModifier + Qt::Key_O);
+
+  QAction *close_command_window_action
+      = file_menu->addAction (tr ("Close Command Window"));
+  close_command_window_action->setShortcut (Qt::ControlModifier + Qt::Key_W);
+  close_command_window_action->setEnabled (false); // TODO: Make this work.
+
+  file_menu->addSeparator ();
+  QAction *import_data_action
+      = file_menu->addAction (tr ("Import Data..."));
+  import_data_action->setEnabled (false); // TODO: Make this work.
+
+  QAction *save_workspace_action
+      = file_menu->addAction (tr ("Save Workspace..."));
+  save_workspace_action->setShortcut (Qt::ControlModifier + Qt::Key_S);
+  file_menu->addSeparator ();
+
+  QAction *preferences_action
+      = file_menu->addAction (QIcon(":/actions/icons/configure.png"),
+                              tr ("Preferences..."));
+  file_menu->addSeparator ();
+  QAction *page_setup_action
+      = file_menu->addAction (tr ("Page Setup..."));
+  page_setup_action->setEnabled (false); // TODO: Make this work.
+  QAction *print_action
+      = file_menu->addAction (tr ("Print"));
+  print_action->setShortcut (Qt::ControlModifier + Qt::Key_P);
+  print_action->setEnabled (false); // TODO: Make this work.
+  QAction *print_selection_action
+      = file_menu->addAction (tr ("Print Selection..."));
+  print_selection_action->setEnabled (false); // TODO: Make this work.
+
+  file_menu->addSeparator ();
+  QAction *exit_action = file_menu->addAction (tr ("Exit"));
+  exit_action->setShortcut (Qt::ControlModifier + Qt::Key_Q);
+
+
+  QMenu *edit_menu = menuBar ()->addMenu (tr ("&Edit"));
+  QAction *undo_action
+      = edit_menu->addAction (QIcon(":/actions/icons/undo.png"), tr ("Undo"));
+  undo_action->setShortcut (QKeySequence::Undo);
+
+  QAction *redo_action
+      = edit_menu->addAction (QIcon(":/actions/icons/redo.png"), tr ("Redo"));
+  redo_action->setShortcut (QKeySequence::Redo);
+  edit_menu->addSeparator ();
+
+  QAction *cut_action
+      = edit_menu->addAction (QIcon(":/actions/icons/editcut.png"), tr ("Cut"));
+  cut_action->setShortcut (Qt::ControlModifier + Qt::ShiftModifier + Qt::Key_X);
+
+  QAction *copy_action
+      = edit_menu->addAction (QIcon(":/actions/icons/editcopy.png"), tr ("Copy"));
+  copy_action->setShortcut (Qt::ControlModifier + Qt::ShiftModifier + Qt::Key_C);
+
+  QAction *paste_action
+      = edit_menu->addAction (QIcon(":/actions/icons/editpaste.png"), tr ("Paste"));
+  paste_action->setShortcut (Qt::ControlModifier + Qt::ShiftModifier + Qt::Key_V);
+
+  QAction *paste_to_workspace_action
+      = edit_menu->addAction (tr ("Paste To Workspace..."));
+  paste_to_workspace_action->setEnabled (false); // TODO: Make this work.
+  edit_menu->addSeparator ();
+
+  QAction *select_all_action
+      = edit_menu->addAction (tr ("Select All"));
+  select_all_action->setEnabled (false); // TODO: Make this work.
+  QAction *delete_action
+      = edit_menu->addAction (tr ("Delete"));
+  delete_action->setShortcut (Qt::Key_Delete);
+  delete_action->setEnabled (false); // TODO: Make this work.
+  edit_menu->addSeparator ();
+
+  QAction *find_action
+      = edit_menu->addAction (tr ("Find..."));
+  find_action->setEnabled (false); // TODO: Make this work.
+  QAction *find_files_action
+      = edit_menu->addAction (tr ("Find Files..."));
+  find_files_action->setShortcut (Qt::ControlModifier + Qt::ShiftModifier
+                                  + Qt::Key_F);
+  find_files_action->setEnabled (false); // TODO: Make this work.
+  edit_menu->addSeparator ();
+
+  QAction *clear_command_window_action
+      = edit_menu->addAction (tr ("Clear Command Window"));
+  clear_command_window_action->setEnabled (false); // TODO: Make this work.
+  QAction *clear_command_history
+      = edit_menu->addAction(tr ("Clear Command History"));
+  QAction * clear_workspace_action
+      = edit_menu->addAction (tr ("Clear Workspace"));
+
+  _debug_menu = menuBar ()->addMenu (tr ("De&bug"));
+
+  _debug_step_over = _debug_menu->addAction (QIcon (":/actions/icons/db_step.png"), tr ("Step"));
+  _debug_step_over->setEnabled (false);
+  _file_editor->debug_menu ()->addAction (_debug_step_over);
+  _file_editor->toolbar ()->addAction (_debug_step_over);
+  _debug_step_over->setShortcut (Qt::Key_F10);
+
+  _debug_step_into = _debug_menu->addAction (QIcon (":/actions/icons/db_step_in.png"), tr ("Step in"));
+  _debug_step_into->setEnabled (false);
+  _file_editor->debug_menu ()->addAction (_debug_step_into);
+  _file_editor->toolbar ()->addAction (_debug_step_into);
+  _debug_step_into->setShortcut (Qt::Key_F11);
+
+  _debug_step_out = _debug_menu->addAction (QIcon (":/actions/icons/db_step_out.png"), tr ("Step out"));
+  _debug_step_out->setEnabled (false);
+  _file_editor->debug_menu ()->addAction (_debug_step_out);
+  _file_editor->toolbar ()->addAction (_debug_step_out);
+  _debug_step_out->setShortcut (Qt::ShiftModifier + Qt::Key_F11);
+
+  _debug_continue = _debug_menu->addAction (QIcon (":/actions/icons/db_cont.png"), tr ("Continue"));
+  _debug_continue->setEnabled (false);
+  _file_editor->debug_menu ()->addAction (_debug_continue);
+  _file_editor->toolbar ()->addAction (_debug_continue);
+  _debug_continue->setShortcut (Qt::Key_F5);
+
+  _debug_menu->addSeparator ();
+  _file_editor->debug_menu ()->addSeparator ();
+
+  _debug_quit = _debug_menu->addAction (QIcon (":/actions/icons/db_stop.png"), tr ("Exit Debug Mode"));
+  _debug_quit->setEnabled (false);
+  _file_editor->debug_menu ()->addAction (_debug_quit);
+  _file_editor->toolbar ()->addAction (_debug_quit);
+  _debug_quit->setShortcut (Qt::ShiftModifier + Qt::Key_F5);
+
+  //QMenu *parallelMenu = menuBar ()->addMenu (tr ("&Parallel"));
+
+  QMenu *   desktop_menu = menuBar ()->addMenu (tr ("&Desktop"));
+  QAction * load_workspace_action       = desktop_menu->addAction (tr ("Load workspace"));
+
+
+  // Window menu
+  QMenu *   window_menu = menuBar ()->addMenu (tr ("&Window"));
+  QAction * show_command_window_action
+    = window_menu->addAction (tr ("Show Command Window"));
+  show_command_window_action->setCheckable (true);
+  show_command_window_action->setShortcut (Qt::ControlModifier
+                                           + Qt::ShiftModifier + Qt::Key_0);
+
+  QAction * show_history_action
+    = window_menu->addAction (tr ("Show Command History"));
+  show_history_action->setCheckable (true);
+  show_history_action->setShortcut (Qt::ControlModifier
+                                    + Qt::ShiftModifier + Qt::Key_1);
+  QAction * show_file_browser_action
+    = window_menu->addAction (tr ("Show Current Directory"));
+  show_file_browser_action->setCheckable (true);
+  show_file_browser_action->setShortcut (Qt::ControlModifier
+                                         + Qt::ShiftModifier + Qt::Key_2);
+
+  QAction * show_workspace_action
+    = window_menu->addAction (tr ("Show Workspace"));
+  show_workspace_action->setCheckable (true);
+  show_workspace_action->setShortcut (Qt::ControlModifier
+                                      + Qt::ShiftModifier + Qt::Key_3);
+
+  QAction * show_editor_action = window_menu->addAction (tr ("Show Editor"));
+  show_editor_action->setCheckable (true);
+  show_editor_action->setShortcut (Qt::ControlModifier + Qt::ShiftModifier
+                                   + Qt::Key_4);
+
+  QAction * show_documentation_action = window_menu->addAction (tr ("Show Documentation"));
+  show_documentation_action->setCheckable (true);
+  show_documentation_action->setShortcut (Qt::ControlModifier + Qt::ShiftModifier
+                                   + Qt::Key_5);
+  window_menu->addSeparator ();
+
+  QAction * command_window_action
+    = window_menu->addAction (tr ("Command Window"));
+  command_window_action->setShortcut (Qt::ControlModifier + Qt::Key_0);
+
+  QAction * history_action
+    = window_menu->addAction (tr ("Command History"));
+  history_action->setShortcut (Qt::ControlModifier + Qt::Key_1);
+
+  QAction * file_browser_action
+    = window_menu->addAction (tr ("Current Directory"));
+  file_browser_action->setShortcut (Qt::ControlModifier + Qt::Key_2);
+
+  QAction * workspace_action
+    = window_menu->addAction (tr ("Workspace"));
+  workspace_action->setShortcut (Qt::ControlModifier + Qt::Key_3);
+
+  QAction * editor_action
+    = window_menu->addAction (tr ("Editor"));
+  editor_action->setShortcut (Qt::ControlModifier + Qt::Key_4);
+
+  QAction * documentation_action
+    = window_menu->addAction (tr ("Documentation"));
+  documentation_action->setShortcut (Qt::ControlModifier + Qt::Key_5);
+
+  window_menu->addSeparator ();
+  QAction * reset_windows_action
+    = window_menu->addAction (tr ("Reset Windows"));
+  reset_windows_action->setEnabled (false); // TODO: Make this work.
+
+  // Help menu
+  QMenu *   help_menu = menuBar ()->addMenu (tr ("&Help"));
+  QAction * report_bug_action
+    = help_menu->addAction (tr ("Report Bug"));
+  QAction * agora_action
+    = help_menu->addAction (tr ("Visit Agora"));
+  QAction * octave_forge_action
+    = help_menu->addAction (tr ("Visit Octave Forge"));
+  help_menu->addSeparator ();
+
+  QAction * about_octave_action
+    = help_menu->addAction (tr ("About Octave"));
+
+  // Toolbars
+  QToolBar *main_tool_bar = addToolBar ("Main");
+            main_tool_bar->addAction (new_script_action);
+            main_tool_bar->addAction (open_action);
+            main_tool_bar->addSeparator ();
+            main_tool_bar->addAction (cut_action);
+            main_tool_bar->addAction (copy_action);
+            main_tool_bar->addAction (paste_action);
+            main_tool_bar->addAction (undo_action);
+            main_tool_bar->addAction (redo_action);
+            main_tool_bar->addSeparator ();
+            main_tool_bar->addWidget (new QLabel (tr ("Current Directory:")));
+            main_tool_bar->addWidget (_current_directory_combo_box);
+            main_tool_bar->addWidget (_current_directory_tool_button);
+            main_tool_bar->addWidget (_current_directory_up_tool_button);
+
+  connect (qApp,                        SIGNAL (aboutToQuit ()),
+           this,                        SLOT   (prepare_for_quit ()));
+  connect (preferences_action,          SIGNAL (triggered ()),
+           this,                        SLOT   (process_settings_dialog_request ()));
+  connect (exit_action,                 SIGNAL (triggered ()),
+           this,                        SLOT   (close ()));
+  connect (new_script_action,           SIGNAL (triggered ()),
+           this,                        SLOT   (new_file ()));
+  connect (open_action,                 SIGNAL (triggered ()),
+           this,                        SLOT   (open_file ()));
+  connect (report_bug_action,           SIGNAL (triggered ()),
+           this,                        SLOT   (open_bug_tracker_page ()));
+  connect (agora_action,                SIGNAL (triggered ()),
+           this,                        SLOT   (open_agora_page ()));
+  connect (octave_forge_action,         SIGNAL (triggered ()),
+           this,                        SLOT   (open_octave_forge_page ()));
+  connect (about_octave_action,         SIGNAL (triggered ()),
+           this,                        SLOT   (show_about_octave ()));
+  connect (show_command_window_action,  SIGNAL (toggled (bool)),
+           _terminal_dock_widget,       SLOT   (setVisible (bool)));
+  connect (_terminal_dock_widget,       SIGNAL (active_changed (bool)),
+           show_command_window_action,  SLOT   (setChecked (bool)));
+  connect (show_workspace_action,       SIGNAL (toggled (bool)),
+           _workspace_view,             SLOT   (setVisible (bool)));
+  connect (_workspace_view,             SIGNAL (active_changed (bool)),
+           show_workspace_action,       SLOT   (setChecked (bool)));
+  connect (show_history_action,         SIGNAL (toggled (bool)),
+           _history_dock_widget,        SLOT   (setVisible (bool)));
+  connect (_history_dock_widget,        SIGNAL (active_changed (bool)),
+           show_history_action,         SLOT   (setChecked (bool)));
+  connect (show_file_browser_action,    SIGNAL (toggled (bool)),
+           _files_dock_widget,          SLOT   (setVisible (bool)));
+  connect (_files_dock_widget,          SIGNAL (active_changed (bool)),
+           show_file_browser_action,    SLOT   (setChecked (bool)));
+  connect (show_editor_action,          SIGNAL (toggled (bool)),
+           _file_editor,                SLOT   (setVisible (bool)));
+  connect (_file_editor,                SIGNAL (active_changed (bool)),
+           show_editor_action,          SLOT   (setChecked (bool)));
+  connect (show_documentation_action,   SIGNAL (toggled (bool)),
+           _documentation_dock_widget,  SLOT   (setVisible (bool)));
+  connect (_documentation_dock_widget,  SIGNAL (active_changed (bool)),
+           show_documentation_action,   SLOT   (setChecked (bool)));
+
+  connect (command_window_action,       SIGNAL (triggered ()),
+           this,                        SLOT (focus_command_window ()));
+  connect (workspace_action,            SIGNAL (triggered ()),
+           this,                        SLOT (focus_workspace ()));
+  connect (history_action,              SIGNAL (triggered ()),
+           this,                        SLOT (focus_command_history ()));
+  connect (file_browser_action,         SIGNAL (triggered ()),
+           this,                        SLOT (focus_current_directory ()));
+  connect (editor_action,               SIGNAL (triggered ()),
+           this,                        SLOT (focus_editor ()));
+  connect (documentation_action,        SIGNAL (triggered ()),
+           this,                        SLOT (focus_documentation ()));
+
+  connect (reset_windows_action,        SIGNAL (triggered ()),
+           this,                        SLOT   (reset_windows ()));
+  connect (this,                        SIGNAL (settings_changed ()),
+           _files_dock_widget,          SLOT   (notice_settings ()));
+  connect (this,                        SIGNAL (settings_changed ()),
+           this,                        SLOT   (notice_settings ()));
+  connect (_files_dock_widget,          SIGNAL (open_file (QString)),
+           this,                        SLOT   (open_file (QString)));
+  connect (_files_dock_widget,          SIGNAL (displayed_directory_changed(QString)),
+           this,                        SLOT   (set_current_working_directory(QString)));
+  connect (_history_dock_widget,        SIGNAL (information (QString)),
+           this,                        SLOT   (report_status_message (QString)));
+  connect (_history_dock_widget,        SIGNAL (command_double_clicked (QString)),
+           this,                        SLOT   (handle_command_double_clicked (QString)));
+  connect (save_workspace_action,       SIGNAL (triggered ()),
+           this,                        SLOT   (handle_save_workspace_request ()));
+  connect (load_workspace_action,       SIGNAL (triggered ()),
+           this,                        SLOT   (handle_load_workspace_request ()));
+  connect (clear_workspace_action,      SIGNAL (triggered ()),
+           this,                        SLOT   (handle_clear_workspace_request ()));
+  connect (_current_directory_tool_button, SIGNAL (clicked ()),
+           this,                        SLOT   (change_current_working_directory ()));
+  connect (_current_directory_up_tool_button, SIGNAL (clicked ()),
+           this,                        SLOT   (current_working_directory_up()));
+  connect (copy_action,                 SIGNAL (triggered()),
+           _terminal,                   SLOT   (copyClipboard ()));
+  connect (paste_action,                SIGNAL (triggered()),
+           _terminal,                   SLOT   (pasteClipboard ()));
+  connect (_current_directory_combo_box, SIGNAL (activated (QString)),
+           this,                        SLOT (set_current_working_directory (QString)));
+  connect (_debug_continue,             SIGNAL (triggered ()),
+           this,                        SLOT (debug_continue ()));
+  connect (_debug_step_into,            SIGNAL (triggered ()),
+           this,                        SLOT (debug_step_into ()));
+  connect (_debug_step_over,            SIGNAL (triggered ()),
+           this,                        SLOT (debug_step_over ()));
+  connect (_debug_step_out,             SIGNAL (triggered ()),
+           this,                        SLOT (debug_step_out ()));
+  connect (_debug_quit,                 SIGNAL (triggered ()),
+           this,                        SLOT (debug_quit ()));
+
+  connect (clear_command_history,       SIGNAL (triggered ()),
+           this,                        SLOT (handle_clear_history_request ()));
+
+  setWindowTitle ("Octave");
+  setDockOptions(QMainWindow::AnimatedDocks | QMainWindow::AllowNestedDocks | QMainWindow::AllowTabbedDocks);
+  addDockWidget (Qt::LeftDockWidgetArea, _workspace_view);
+  addDockWidget (Qt::LeftDockWidgetArea, _history_dock_widget);
+  addDockWidget (Qt::RightDockWidgetArea, _files_dock_widget);
+  addDockWidget (Qt::RightDockWidgetArea, _file_editor);
+  addDockWidget (Qt::BottomDockWidgetArea, _terminal_dock_widget);
+  addDockWidget (Qt::RightDockWidgetArea, _documentation_dock_widget);
+  setStatusBar (_status_bar);
+  read_settings ();
+
+  _octave_qt_event_listener = new octave_qt_event_listener ();
+  octave_link::instance ()->register_event_listener (_octave_qt_event_listener);
+
+  connect (_octave_qt_event_listener,
+           SIGNAL (current_directory_has_changed_signal (QString)),
+           this,
+           SLOT (current_working_directory_has_changed (QString)));
+
+  connect (_octave_qt_event_listener,
+           SIGNAL (entered_debug_mode_signal ()),
+           this,
+           SLOT(handle_entered_debug_mode ()));
+
+  connect (_octave_qt_event_listener,
+           SIGNAL (quit_debug_mode_signal ()),
+           this,
+           SLOT (handle_quit_debug_mode ()));
+}
+
new file mode 100644
--- /dev/null
+++ b/gui/src/main-window.h
@@ -0,0 +1,156 @@
+/* OctaveGUI - A graphical user interface for Octave
+ * Copyright (C) 2011 Jacob Dawid (jacob.dawid@googlemail.com)
+ *
+ * This program 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.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef MAINWINDOW_H
+#define MAINWINDOW_H
+
+// Qt includes
+#include <QtGui/QMainWindow>
+#include <QThread>
+#include <QTabWidget>
+#include <QMdiArea>
+#include <QStatusBar>
+#include <QToolBar>
+#include <QQueue>
+#include <QMdiSubWindow>
+#include <QCloseEvent>
+#include <QToolButton>
+#include <QComboBox>
+
+// Editor includes
+#include "file-editor-interface.h"
+
+// QTerminal includes
+#include "QTerminal.h"
+
+// Own includes
+#include "resource-manager.h"
+#include "octave-link.h"
+#include "workspace-view.h"
+#include "history-dockwidget.h"
+#include "files-dockwidget.h"
+#include "terminal-dockwidget.h"
+#include "documentation-dockwidget.h"
+#include "octave-qt-event-listener.h"
+#include "octave-event-observer.h"
+
+/**
+  * \class MainWindow
+  *
+  * Represents the main window.
+  */
+class main_window
+    : public QMainWindow, public octave_event_observer
+{
+Q_OBJECT public:
+  main_window (QWidget * parent = 0);
+  ~main_window ();
+
+  void event_accepted (octave_event *e);
+  void event_reject (octave_event *e);
+
+  QTerminal *get_terminal_view () { return _terminal; }
+  history_dock_widget *get_history_dock_widget ()
+  {
+    return _history_dock_widget;
+  }
+  files_dock_widget *get_files_dock_widget ()
+  {
+    return _files_dock_widget;
+  }
+  bool is_closing () { return _closing; }
+
+signals:
+  void settings_changed ();
+
+public slots:
+  void report_status_message (QString statusMessage);
+  void handle_save_workspace_request ();
+  void handle_load_workspace_request ();
+  void handle_clear_workspace_request ();
+  void handle_clear_history_request ();
+  void handle_command_double_clicked (QString command);
+  void new_file ();
+  void open_file ();
+  void open_file (QString file_name);
+  void open_bug_tracker_page ();
+  void open_agora_page ();
+  void open_octave_forge_page ();
+  void process_settings_dialog_request ();
+  void show_about_octave ();
+  void notice_settings ();
+  void prepare_for_quit ();
+  void reset_windows ();
+  void current_working_directory_has_changed (QString directory);
+  void change_current_working_directory ();
+  void set_current_working_directory (QString directory);
+  void current_working_directory_up ();
+
+  void focus_command_window ();
+  void focus_command_history ();
+  void focus_current_directory ();
+  void focus_workspace ();
+  void focus_editor ();
+  void focus_documentation ();
+
+  void handle_entered_debug_mode ();
+  void handle_quit_debug_mode ();
+  void debug_continue ();
+  void debug_step_into ();
+  void debug_step_over ();
+  void debug_step_out ();
+  void debug_quit ();
+
+protected:
+  void closeEvent (QCloseEvent * closeEvent);
+  void read_settings ();
+  void write_settings ();
+
+private:
+  void construct ();
+  void establish_octave_link ();
+
+  QTerminal *               _terminal;
+  file_editor_interface *   _file_editor;
+  QMenu *                   _debug_menu;
+
+  QAction *                 _debug_continue;
+  QAction *                 _debug_step_into;
+  QAction *                 _debug_step_over;
+  QAction *                 _debug_step_out;
+  QAction *                 _debug_quit;
+
+  // Dock widgets.
+  workspace_view *          _workspace_view;
+  history_dock_widget *     _history_dock_widget;
+  files_dock_widget *       _files_dock_widget;
+  terminal_dock_widget *    _terminal_dock_widget;
+  documentation_dock_widget*_documentation_dock_widget;
+
+  // Toolbars.
+  QStatusBar *              _status_bar;
+  QComboBox *               _current_directory_combo_box;
+  QToolButton *             _current_directory_tool_button;
+  QToolButton *             _current_directory_up_tool_button;
+
+  octave_qt_event_listener *_octave_qt_event_listener;
+
+  // Flag for closing whole application
+  bool                      _closing;
+};
+
+#endif // MAINWINDOW_H
new file mode 100644
--- /dev/null
+++ b/gui/src/msvc-debug.pri
@@ -0,0 +1,24 @@
+# OctaveGUI - A graphical user interface for Octave
+# Copyright (C) 2011 Jacob Dawid (jacob.dawid@googlemail.com)
+#
+# This program 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.
+#
+# This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+
+win32-msvc* {
+	CONFIG += release warn_off
+	QMAKE_CXXFLAGS += -MP
+	QMAKE_CXXFLAGS_RELEASE += -Zi
+	QMAKE_CXXFLAGS_RELEASE -= -O2
+	QMAKE_LFLAGS_RELEASE += -debug
+	QMAKE_CLEAN += $(DESTDIR)$(QMAKE_TARGET).pdb
+}
new file mode 100644
--- /dev/null
+++ b/gui/src/msvc.pri
@@ -0,0 +1,11 @@
+CONFIG += release
+
+QMAKE_CXXFLAGS += -MP
+LIBDIR_SUFFIX = release
+
+msvc-debug {
+	QMAKE_CXXFLAGS_RELEASE += -Zi
+	QMAKE_CXXFLAGS_RELEASE -= -O2
+	QMAKE_LFLAGS_RELEASE += -debug
+	QMAKE_CLEAN += $(DESTDIR)$(QMAKE_TARGET).pdb
+}
new file mode 100644
--- /dev/null
+++ b/gui/src/octave-adapter/octave-event-listener.h
@@ -0,0 +1,36 @@
+/* OctaveGUI - A graphical user interface for Octave
+ * Copyright (C) 2011 Jacob Dawid (jacob.dawid@googlemail.com)
+ *
+ * This program 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.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef OCTAVEEVENTLISTENER_H
+#define OCTAVEEVENTLISTENER_H
+
+#include <string>
+
+class octave_event_listener
+{
+  public:
+    octave_event_listener () { }
+    virtual ~octave_event_listener () { }
+
+    virtual void current_directory_has_changed (std::string directory) = 0;
+    virtual void about_to_exit () = 0;
+
+    virtual void entered_debug_mode () = 0;
+    virtual void quit_debug_mode () = 0;
+};
+
+#endif // OCTAVEEVENTLISTENER_H
new file mode 100644
--- /dev/null
+++ b/gui/src/octave-adapter/octave-event-observer.h
@@ -0,0 +1,48 @@
+/* OctaveGUI - A graphical user interface for Octave
+ * Copyright (C) 2011 Jacob Dawid (jacob.dawid@googlemail.com)
+ *
+ * This program 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.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef OCTAVEEVENTOBSERVER_H
+#define OCTAVEEVENTOBSERVER_H
+
+class octave_event;
+
+/**
+  * \class octave_event_observer
+  * \brief Implements the observer part for the observer pattern.
+  */
+class octave_event_observer
+{
+  public:
+    octave_event_observer () { }
+    virtual ~octave_event_observer () { }
+
+    /**
+      * This will be called when an event has been accepted. Operations
+      * in this routine will be processed in the octave thread.
+      */
+    virtual void event_accepted (octave_event *e) = 0;
+
+    /**
+      * This will be called when an event has been rejected. Operations
+      * in this routine will be processed in the octave thread.
+      */
+    virtual void event_reject (octave_event *e) = 0;
+};
+
+#include "octave-event.h"
+
+#endif // OCTAVEEVENTOBSERVER_H
new file mode 100644
--- /dev/null
+++ b/gui/src/octave-adapter/octave-event.cc
@@ -0,0 +1,170 @@
+/* OctaveGUI - A graphical user interface for Octave
+ * Copyright (C) 2011 John P. Swensen, Jacob Dawid (jacob.dawid@googlemail.com)
+ *
+ * This program 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.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <string>
+
+#include "cmd-hist.h"
+#include "oct-env.h"
+
+#include "debug.h"
+#include "oct-obj.h"
+#include "parse.h"
+#include "symtab.h"
+#include "toplev.h"
+
+#include "octave-event.h"
+
+#include <readline/readline.h>
+
+void
+octave_event::call_octave_function (std::string name)
+{
+  call_octave_function (name, octave_value_list ());
+}
+
+void
+octave_event::call_octave_function (std::string name,
+                                    const octave_value_list& args,
+                                    int nargout)
+{
+  try
+    {
+      feval (name, args, nargout);
+    } catch (...) { } // Ignore exceptions. Crashes without that.
+}
+
+void
+octave_event::finish_readline_event () const
+{
+  rl_line_buffer[0] = '\0';
+  rl_point = rl_end = 0;
+  rl_done = 1;
+  //rl_forced_update_display ();
+}
+
+bool
+octave_clear_history_event::perform ()
+{
+  int i;
+  while ((i = command_history::length ()) > 0) {
+    command_history::remove (i - 1);
+  }
+  return true;
+}
+
+bool
+octave_debug_step_into_event::perform ()
+{
+  octave_value_list args;
+  args.append (octave_value ("in"));
+  call_octave_function ("dbstep", args);
+  finish_readline_event ();
+  return true;
+}
+
+bool
+octave_debug_step_out_event::perform ()
+{
+  octave_value_list args;
+  args.append (octave_value ("out"));
+  call_octave_function ("dbstep", args);
+  finish_readline_event ();
+  return true;
+}
+
+
+bool
+octave_exit_event::perform ()
+{
+  clean_up_and_exit (0);
+  return true;
+}
+
+bool
+octave_run_file_event::perform ()
+{
+  octave_value_list args;
+  args.append (octave_value (_file));
+  call_octave_function ("run", args);
+  finish_readline_event ();
+  return true;
+}
+
+bool
+octave_change_directory_event::perform ()
+{
+  return octave_env::chdir (_directory);
+}
+
+bool
+octave_load_workspace_event::perform ()
+{
+  octave_value_list args;
+  args.append (octave_value (_file));
+  call_octave_function ("load", args);
+  return true;
+}
+
+bool
+octave_save_workspace_event::perform ()
+{
+  octave_value_list args;
+  args.append (octave_value (_file));
+  call_octave_function ("save", args);
+  return true;
+}
+
+bool
+octave_add_breakpoint_event::perform ()
+{
+  bp_table::intmap intmap;
+  intmap[0] = _line + 1;
+
+  std::string previous_directory = octave_env::get_current_directory ();
+  octave_env::chdir (_path);
+  intmap = bp_table::add_breakpoint (_function_name, intmap);
+  octave_env::chdir (previous_directory);
+  return intmap.size () > 0;
+}
+
+bool
+octave_remove_breakpoint_event::perform ()
+{
+  bp_table::intmap intmap;
+  intmap[0] = _line;
+
+  std::string previous_directory = octave_env::get_current_directory ();
+  octave_env::chdir (_path);
+  bp_table::remove_breakpoint (_function_name, intmap);
+  octave_env::chdir (previous_directory);
+  return true; // TODO: Check result.
+}
+
+bool
+octave_remove_all_breakpoints_event::perform ()
+{
+  bp_table::intmap intmap;
+  std::string previous_directory = octave_env::get_current_directory ();
+  octave_env::chdir (_path);
+  intmap = bp_table::remove_all_breakpoints_in_file (_function_name, true);
+  octave_env::chdir (previous_directory);
+  return intmap.size() > 0;
+}
new file mode 100644
--- /dev/null
+++ b/gui/src/octave-adapter/octave-event.h
@@ -0,0 +1,377 @@
+/* OctaveGUI - A graphical user interface for Octave
+ * Copyright (C) 2011 Jacob Dawid (jacob.dawid@googlemail.com)
+ *
+ * This program 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.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef OCTAVEEVENT_H
+#define OCTAVEEVENT_H
+
+#include <string>
+
+class octave_value_list;
+
+#include "octave-event-observer.h"
+
+/**
+  * \class octave_event
+  * \brief Base class for an octave event.
+  * In order to make communication with octave threadsafe, comunication is
+  * implemented via events. An application may create events and post them,
+  * however there is no guarantee events will be processed in a given time.
+  *
+  * In order to create an event, there must be an event observer. The event
+  * observer will be given the opportunity to react on the event as soon as
+  * it has been processed in the octave thread. Accepting and ignoring takes
+  * places in the octave thread.
+  */
+class octave_event
+{
+  public:
+    octave_event (octave_event_observer& o)
+      : _octave_event_observer (o)
+    { }
+
+    virtual ~octave_event ()
+    { }
+
+    /** Performs what is necessary to make this event happen. This
+      * code is thread-safe since it will be executed in the octave
+      * thread. However, you should take care to keep this code as
+      * short as possible. */
+    virtual bool perform () = 0;
+
+    /**
+      * Accepts this event. This allows the event observer to react properly
+      * onto the event.
+      */
+    void accept ()
+    { _octave_event_observer.event_accepted (this); }
+
+    /**
+      * Rejects this event. This allows the event observer to react properly
+      * onto the event.
+      */
+    void reject ()
+    { _octave_event_observer.event_reject (this); }
+
+  protected:
+    void call_octave_function (std::string name);
+
+    void call_octave_function (std::string name,
+                               const octave_value_list& args,
+                               int nargout = 0);
+
+    void finish_readline_event () const;
+
+  private:
+    octave_event_observer& _octave_event_observer;
+};
+
+class octave_update_history_event : public octave_event
+{
+  public:
+    /** Creates a new octave_exit_event. */
+    octave_update_history_event (octave_event_observer& o)
+      : octave_event (o)
+    { }
+
+    bool perform ()
+    { return true; /* Always grant. */ }
+};
+
+class octave_update_workspace_event : public octave_event
+{
+  public:
+    /** Creates a new octave_exit_event. */
+    octave_update_workspace_event (octave_event_observer& o)
+      : octave_event (o)
+    { }
+
+    bool perform ()
+    { return true; /* Always grant. */ }
+};
+
+/** Implements an octave exit event. */
+class octave_exit_event : public octave_event
+{
+  public:
+    /** Creates a new octave_exit_event. */
+    octave_exit_event (octave_event_observer& o)
+      : octave_event (o)
+    { }
+
+    bool perform ();
+};
+
+/** Implements an octave run file event. */
+class octave_run_file_event : public octave_event
+{
+  public:
+    /** Creates a new octave_run_file_event. */
+    octave_run_file_event (octave_event_observer& o,
+                           std::string file)
+      : octave_event (o)
+    { _file = file; }
+
+    bool perform ();
+
+  private:
+    std::string _file;
+};
+
+/** Implements a change directory event. */
+class octave_change_directory_event : public octave_event
+{
+  public:
+    /** Creates a new octave_change_directory_event. */
+    octave_change_directory_event (octave_event_observer& o,
+                                   std::string directory)
+      : octave_event (o)
+    { _directory = directory; }
+
+    bool perform ();
+
+  private:
+    std::string _directory;
+};
+
+/** Implements a clear workspace event. */
+class octave_clear_workspace_event : public octave_event
+{
+  public:
+    /** Creates a new octave_run_file_event. */
+    octave_clear_workspace_event (octave_event_observer& o)
+      : octave_event (o)
+    { }
+
+    bool perform ()
+    {
+      call_octave_function ("clear");
+      return true;
+    }
+};
+
+/** Implements a load workspace event. */
+class octave_load_workspace_event : public octave_event
+{
+  public:
+    /** Creates a new octave_change_directory_event. */
+    octave_load_workspace_event (octave_event_observer& o,
+                                 std::string file)
+      : octave_event (o)
+    { _file = file; }
+
+    bool perform ();
+
+  private:
+    std::string _file;
+};
+
+/** Implements a save workspace event. */
+class octave_save_workspace_event : public octave_event
+{
+  public:
+    /** Creates a new octave_change_directory_event. */
+    octave_save_workspace_event (octave_event_observer& o,
+                                 std::string file)
+      : octave_event (o)
+    { _file = file; }
+
+    bool perform ();
+
+  private:
+    std::string _file;
+};
+
+class octave_clear_history_event : public octave_event
+{
+  public:
+    /** Creates a new octave_clear_history_event. */
+    octave_clear_history_event (octave_event_observer& o)
+      : octave_event (o)
+    { }
+
+  bool perform ();
+};
+
+class octave_add_breakpoint_event : public octave_event
+{
+  public:
+    octave_add_breakpoint_event (octave_event_observer& o,
+                                 std::string path,
+                                 std::string function_name,
+                                 int line)
+      : octave_event (o)
+    {
+      _path = path;
+      _function_name = function_name;
+      _line = line;
+    }
+
+    bool perform ();
+
+    std::string get_path ()
+    {
+      return _path;
+    }
+
+    std::string get_function_name ()
+    {
+      return _function_name;
+    }
+
+    int get_line ()
+    {
+      return _line;
+    }
+
+  private:
+    std::string _path;
+    std::string _function_name;
+    int _line;
+};
+
+class octave_remove_breakpoint_event : public octave_event
+{
+  public:
+    octave_remove_breakpoint_event (octave_event_observer& o,
+                                    std::string path,
+                                    std::string function_name,
+                                    int line)
+      : octave_event (o)
+    {
+      _path = path;
+      _function_name = function_name;
+      _line = line;
+    }
+
+    bool perform ();
+
+    std::string get_path ()
+    {
+      return _path;
+    }
+
+    std::string get_function_name ()
+    {
+      return _function_name;
+    }
+
+    int get_line ()
+    {
+      return _line;
+    }
+
+  private:
+    std::string _path;
+    std::string _function_name;
+    int _line;
+};
+
+class octave_remove_all_breakpoints_event : public octave_event
+{
+  public:
+    octave_remove_all_breakpoints_event (octave_event_observer& o,
+                                         std::string path,
+                                         std::string function_name)
+      : octave_event (o)
+    {
+      _path = path;
+      _function_name = function_name;
+    }
+
+    bool perform ();
+
+    std::string get_path ()
+    {
+      return _path;
+    }
+
+    std::string get_function_name ()
+    {
+      return _function_name;
+    }
+
+  private:
+    std::string _path;
+    std::string _function_name;
+};
+
+class octave_debug_step_into_event : public octave_event
+{
+  public:
+    /** Creates a new octave_debug_step_into_event. */
+    octave_debug_step_into_event (octave_event_observer& o)
+      : octave_event (o) { }
+
+    bool perform ();
+};
+
+class octave_debug_step_over_event : public octave_event
+{
+  public:
+    /** Creates a new octave_debug_step_over_event. */
+    octave_debug_step_over_event (octave_event_observer& o)
+      : octave_event (o) { }
+
+    bool perform ()
+    {
+      call_octave_function ("dbnext");
+      finish_readline_event ();
+      return true;
+    }
+};
+
+class octave_debug_step_out_event : public octave_event
+{
+  public:
+    /** Creates a new octave_debug_step_out_event. */
+    octave_debug_step_out_event (octave_event_observer& o)
+      : octave_event (o) { }
+
+    bool perform ();
+};
+
+class octave_debug_continue_event : public octave_event
+{
+  public:
+    /** Creates a new octave_debug_step_out_event. */
+    octave_debug_continue_event (octave_event_observer& o)
+      : octave_event (o) { }
+
+    bool perform ()
+    {
+      call_octave_function ("dbcont");
+      finish_readline_event ();
+      return true;
+    }
+};
+
+class octave_debug_quit_event : public octave_event
+{
+  public:
+    /** Creates a new octave_debug_step_out_event. */
+    octave_debug_quit_event (octave_event_observer& o)
+      : octave_event (o) { }
+
+    bool perform ()
+    {
+      call_octave_function ("dbquit");
+      finish_readline_event ();
+      return true;
+    }
+};
+
+#endif // OCTAVEEVENT_H
new file mode 100644
--- /dev/null
+++ b/gui/src/octave-adapter/octave-link.cc
@@ -0,0 +1,161 @@
+/* OctaveGUI - A graphical user interface for Octave
+ * Copyright (C) 2011 John P. Swensen, Jacob Dawid (jacob.dawid@googlemail.com)
+ *
+ * This program 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.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "cmd-edit.h"
+#include "oct-env.h"
+#include "oct-mutex.h"
+#include "symtab.h"
+#include "toplev.h"
+
+#include "octave-link.h"
+
+int octave_readline_hook ()
+{
+  octave_link::instance ()->entered_readline_hook ();
+  octave_link::instance ()->generate_events ();
+  octave_link::instance ()->process_events ();
+  octave_link::instance ()->finished_readline_hook ();
+  return 0;
+}
+
+void octave_exit_hook (int status)
+{
+  (void) status;
+  octave_link::instance ()->about_to_exit ();
+}
+
+octave_link octave_link::_singleton;
+
+octave_link::octave_link ()
+{
+  _event_queue_mutex = new octave_mutex ();
+  _last_working_directory = "";
+  _debugging_mode_active = false;
+}
+
+octave_link::~octave_link ()
+{
+}
+
+void
+octave_link::launch_octave ()
+{
+  // Create both threads.
+  _octave_main_thread = new octave_main_thread ();
+  command_editor::add_event_hook (octave_readline_hook);
+  octave_exit = octave_exit_hook;
+
+  // Start the first one.
+  _octave_main_thread->start ();
+}
+
+void
+octave_link::register_event_listener (octave_event_listener *oel)
+{ _octave_event_listener = oel; }
+
+void
+octave_link::generate_events ()
+{
+  std::string current_working_directory = octave_env::get_current_directory ();
+  if (current_working_directory != _last_working_directory)
+    {
+      _last_working_directory = current_working_directory;
+      if (_octave_event_listener)
+        _octave_event_listener
+            ->current_directory_has_changed (_last_working_directory);
+    }
+
+  if (_debugging_mode_active != Vdebugging)
+    {
+      _debugging_mode_active = Vdebugging;
+      if (_octave_event_listener)
+        {
+          if (_debugging_mode_active)
+            _octave_event_listener->entered_debug_mode ();
+          else
+            _octave_event_listener->quit_debug_mode ();
+        }
+    }
+}
+
+void
+octave_link::process_events ()
+{
+  _event_queue_mutex->lock ();
+
+  while (_event_queue.size () > 0)
+    {
+      octave_event * e = _event_queue.front ();
+      _event_queue.pop ();
+      if (e->perform ())
+        e->accept ();
+      else
+        e->reject ();
+    }
+  _event_queue_mutex->unlock ();
+}
+
+void
+octave_link::post_event (octave_event *e)
+{
+  if (e)
+    {
+      _event_queue_mutex->lock ();
+      _event_queue.push (e);
+      _event_queue_mutex->unlock ();
+    }
+}
+
+void
+octave_link::event_accepted (octave_event *e)
+{ delete e; }
+
+void
+octave_link::event_reject (octave_event *e)
+{ delete e; }
+
+void
+octave_link::about_to_exit ()
+{
+  _event_queue_mutex->lock ();
+  while (!_event_queue.empty ())
+    _event_queue.pop ();
+
+  _event_queue_mutex->unlock ();
+
+  if (_octave_event_listener)
+    _octave_event_listener->about_to_exit ();
+}
+
+void
+octave_link::entered_readline_hook ()
+{ }
+
+void
+octave_link::finished_readline_hook ()
+{
+}
+
+std::string
+octave_link::get_last_working_directory ()
+{
+  return _last_working_directory;
+}
new file mode 100644
--- /dev/null
+++ b/gui/src/octave-adapter/octave-link.h
@@ -0,0 +1,88 @@
+/* OctaveGUI - A graphical user interface for Octave
+ * Copyright (C) 2011 John P. Swensen, Jacob Dawid (jacob.dawid@googlemail.com)
+ *
+ * This program 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.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef OCTAVELINK_H
+#define OCTAVELINK_H
+
+#include <queue>
+#include <string>
+
+class octave_mutex;
+
+#include "octave-main-thread.h"
+#include "octave-event.h"
+#include "octave-event-observer.h"
+#include "octave-event-listener.h"
+
+/**
+  * \class OctaveLink
+  * \brief Provides threadsafe access to octave.
+  * \author Jacob Dawid
+  * This class is a wrapper around octave and provides threadsafety by
+  * buffering access operations to octave and executing them in the readline
+  * event hook, which lives in the octave thread.
+  */
+class octave_link : public octave_event_observer
+{
+public:
+  /** Provides a way to access the unique octave_link object. */
+  static octave_link * instance () { return &_singleton; }
+
+  /** Starts octave. */
+  void launch_octave ();
+  void register_event_listener (octave_event_listener *oel);
+
+  void generate_events ();
+  void process_events ();
+  void post_event (octave_event *e);
+  void event_accepted (octave_event *e);
+  void event_reject (octave_event *e);
+
+  void about_to_exit ();
+
+  void entered_readline_hook ();
+  void finished_readline_hook ();
+
+  std::string get_last_working_directory ();
+
+private:
+  /** Singleton. */
+  octave_link ();
+  ~octave_link ();
+
+  octave_event_listener *_octave_event_listener;
+
+  /** Thread running octave_main. */
+  octave_main_thread *_octave_main_thread;
+
+  /** Semaphore to lock access to the event queue. */
+  octave_mutex *_event_queue_mutex;
+
+  /** Buffer for queueing events until they will be processed. */
+  std::queue <octave_event *> _event_queue;
+
+  /** Stores the last known current working directory of octave. */
+  std::string _last_working_directory;
+  bool _debugging_mode_active;
+
+  /** Semaphore to lock access to the performance information. */
+  octave_mutex *_performance_information_mutex;
+
+  /** Unique instance. Singelton! */
+  static octave_link _singleton;
+};
+#endif // OCTAVELINK_H
new file mode 100644
--- /dev/null
+++ b/gui/src/octave-adapter/octave-main-thread.cc
@@ -0,0 +1,39 @@
+/* OctaveGUI - A graphical user interface for Octave
+ * Copyright (C) 2011 Jacob Dawid (jacob.dawid@googlemail.com)
+ *
+ * This program 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.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <string>
+
+#include "octave.h"
+
+#include "octave-main-thread.h"
+#include "octave-link.h"
+
+octave_main_thread::octave_main_thread () : QThread ()
+{
+}
+
+void
+octave_main_thread::run ()
+{
+  setlocale (LC_ALL, "en_US.UTF-8");
+  emit ready ();
+  octave_execute_interpreter ();
+}
new file mode 100644
--- /dev/null
+++ b/gui/src/octave-adapter/octave-main-thread.h
@@ -0,0 +1,45 @@
+/* OctaveGUI - A graphical user interface for Octave
+ * Copyright (C) 2011 Jacob Dawid (jacob.dawid@googlemail.com)
+ *
+ * This program 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.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef OCTAVEMAINTHREAD_H
+#define OCTAVEMAINTHREAD_H
+
+#include <QThread>
+
+/**
+  * \class octave_main
+  * \brief This class represents a thread just running octave_main.
+  * \author Jacob Dawid
+  */
+class octave_main_thread : public QThread
+{
+  Q_OBJECT
+public:
+  /** Creates a new thread running octave_main. */
+  octave_main_thread ();
+
+signals:
+  /** This signal will be emitted when the thread is about to actually
+    * run octave_main. */
+  void ready();
+
+protected:
+  /** Runs octave_main. */
+  void run ();
+};
+
+#endif // OCTAVEMAINTHREAD_H
new file mode 100644
--- /dev/null
+++ b/gui/src/octave-gui.cc
@@ -0,0 +1,108 @@
+/* OctaveGUI - A graphical user interface for Octave
+ * Copyright (C) 2011 Jacob Dawid (jacob.dawid@googlemail.com)
+ *
+ * This program 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.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <QtGui/QApplication>
+#include <QTranslator>
+#include <QSettings>
+
+#include <iostream>
+
+#include <syswait.h>
+
+#include "welcome-wizard.h"
+#include "resource-manager.h"
+#include "main-window.h"
+#include "octave-gui.h"
+
+// Dissociate from the controlling terminal, if any.
+
+static void
+dissociate_terminal (void)
+{
+#if ! defined (Q_OS_WIN32) || defined (Q_OS_CYGWIN)
+
+  pid_t pid = fork ();
+
+  if (pid < 0)
+    {
+      std::cerr << "fork failed!" << std::endl;;
+      exit (1);
+    }
+  else if (pid == 0)
+    {
+      // Child.
+
+      if (setsid () < 0)
+        {
+          std::cerr << "setsid error" << std::endl;
+          exit (1);
+        }
+    }
+  else
+    {
+      // Parent
+
+      int status;
+
+      waitpid (pid, &status, 0);
+
+      exit (WIFEXITED (status) ? WEXITSTATUS (status) : 127);
+    }
+
+#endif
+}
+
+int
+octave_start_gui (int argc, char *argv[])
+{
+  dissociate_terminal ();
+
+  QApplication application (argc, argv);
+
+  while (true)
+    {
+      if (resource_manager::is_first_run ())
+        {
+          welcome_wizard welcomeWizard;
+          welcomeWizard.exec ();
+          resource_manager::reload_settings ();
+        }
+      else
+        {
+          QSettings *settings = resource_manager::get_settings ();
+
+          // FIXME -- what should happen if settings is 0?
+
+          QString language = settings->value ("language").toString ();
+
+          QString translatorFile = resource_manager::find_translator_file (language);
+          QTranslator translator;
+          translator.load (translatorFile);
+          application.installTranslator (&translator);
+
+          resource_manager::update_network_settings ();
+
+          main_window w;
+          w.show ();
+          return application.exec ();
+        }
+    }
+}
new file mode 100644
--- /dev/null
+++ b/gui/src/octave-gui.h
@@ -0,0 +1,28 @@
+/*
+
+Copyright (C) 2012 John W. Eaton
+
+This file is part of Octave.
+
+Octave is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3 of the License, or (at your
+option) any later version.
+
+Octave is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with Octave; see the file COPYING.  If not, see
+<http://www.gnu.org/licenses/>.
+
+*/
+
+#if !defined (octave_octave_gui_h)
+#define octave_octave_gui_h 1
+
+extern int octave_start_gui (int argc, char **argv);
+
+#endif
new file mode 100644
--- /dev/null
+++ b/gui/src/octave-qt-event-listener.cc
@@ -0,0 +1,46 @@
+/* OctaveGUI - A graphical user interface for Octave
+ * Copyright (C) 2012 Jacob Dawid (jacob.dawid@googlemail.com)
+ *
+ * This program 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.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "octave-qt-event-listener.h"
+#include <QApplication>
+
+octave_qt_event_listener::octave_qt_event_listener (QObject *parent)
+  : QObject (parent), octave_event_listener ()
+{
+}
+
+void
+octave_qt_event_listener::current_directory_has_changed (std::string directory)
+{
+  emit current_directory_has_changed_signal
+      (QString::fromStdString (directory));
+}
+
+void
+octave_qt_event_listener::about_to_exit ()
+{
+  qApp->quit ();
+}
+
+void
+octave_qt_event_listener::entered_debug_mode ()
+{ emit entered_debug_mode_signal (); }
+
+void
+octave_qt_event_listener::quit_debug_mode ()
+{ emit quit_debug_mode_signal (); }
+
new file mode 100644
--- /dev/null
+++ b/gui/src/octave-qt-event-listener.h
@@ -0,0 +1,44 @@
+/* OctaveGUI - A graphical user interface for Octave
+ * Copyright (C) 2012 Jacob Dawid (jacob.dawid@googlemail.com)
+ *
+ * This program 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.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef OCTAVEQTEVENTLISTENER_H
+#define OCTAVEQTEVENTLISTENER_H
+
+#include <QObject>
+#include <QString>
+#include "octave-event-listener.h"
+
+class octave_qt_event_listener
+    : public QObject, public octave_event_listener
+{
+    Q_OBJECT
+  public:
+    octave_qt_event_listener (QObject *parent = 0);
+
+    void current_directory_has_changed (std::string directory);
+    void about_to_exit ();
+
+    void entered_debug_mode ();
+    void quit_debug_mode ();
+
+  signals:
+    void current_directory_has_changed_signal (QString directory);
+    void entered_debug_mode_signal ();
+    void quit_debug_mode_signal ();
+};
+
+#endif // OCTAVEQTEVENTLISTENER_H
new file mode 100644
--- /dev/null
+++ b/gui/src/qtinfo/parser.cc
@@ -0,0 +1,578 @@
+/* Copyright (C) 2009 P.L. Lucas
+ * Copyright (C) 2012 Jacob Dawid <jacob.dawid@gmail.com>
+ *
+ * This program 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 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "parser.h"
+#include <QFileInfo>
+#include <QDir>
+#include <QFile>
+#include <QUrl>
+#include <QRegExp>
+#include <QProcess>
+#include <QBuffer>
+
+parser::parser(QObject *parent)
+  : QObject(parent)
+{
+  _compressors_map.insert ("bz2",  "bzip2 -dc \"%1\"");
+  _compressors_map.insert ("gz",   "gzip -dc \"%1\"");
+  _compressors_map.insert ("lzma", "lzma -dc \"%1\"");
+  _compressors_map.insert ("xz",   "xz -dc \"%1\"");
+  _compressors_map.insert ("Z",    "gunzip -c \"%1\"");
+}
+
+void
+parser::set_info_path (QString infoPath)
+{
+  this->_info_path = infoPath;
+
+  _info_files.clear ();
+
+  QFileInfo info (infoPath);
+
+  QString path = info.absolutePath ();
+  QString fileName = info.fileName ();
+
+  QDir infoDir (path);
+  QStringList filter;
+  filter.append (fileName + "*");
+
+  _info_files = infoDir.entryInfoList (filter, QDir::Files);
+  parse_info_map ();
+}
+
+QString
+parser::get_info_path ()
+{
+  return _info_path;
+}
+
+QIODevice *
+parser::open_file (QFileInfo & file_info)
+{
+  QIODevice *iodevice=NULL;
+  if ( _compressors_map.contains(file_info.suffix ()))
+    {
+      QProcess gzip;
+      gzip.start (_compressors_map.value (file_info.suffix ()).arg (file_info.absoluteFilePath ()));
+
+      if (!gzip.waitForFinished ())
+        return NULL;
+
+      QByteArray result = gzip.readAll ();
+
+      QBuffer *io = new QBuffer (this);
+      io->setData (result);
+
+      if (!io->open (QIODevice::ReadOnly | QIODevice::Text))
+        return NULL;
+
+      iodevice = io;
+    }
+  else
+    {
+      QFile *io = new QFile (file_info.absoluteFilePath ());
+      if (!io->open (QIODevice::ReadOnly | QIODevice::Text))
+        return NULL;
+      iodevice = io;
+    }
+
+  return iodevice;
+}
+
+int
+parser::is_ref (QString node)
+{
+  if (_ref_map.contains (node))
+    {
+      node_position ref = _ref_map [node];
+
+      return ref.pos-_node_map [ref._node_name].pos;
+    }
+  return -1;
+}
+
+QString
+parser::search_node (QString node)
+{
+  QFileInfo file_info;
+  QString ref;
+
+  if (_ref_map.contains (node))
+    {
+      ref = node;
+      node = _ref_map [ref]._node_name;
+    }
+
+  if (_node_map.contains (node))
+    {
+      int pos = _node_map [node].pos;
+      int realPos;
+
+      real_position (pos, file_info, realPos);
+
+      QIODevice *io = open_file (file_info);
+      if (io == NULL)
+        {
+          return QString ();
+        }
+
+      seek (io, realPos);
+
+      QString text = get_next_node (io);
+      if (!text.isEmpty())
+        {
+          return text;
+        }
+
+      io->close ();
+      delete io;
+    }
+
+  return QString ();
+}
+
+QString
+parser::search_node (QString node, QIODevice *io)
+{
+  while (!io->atEnd ())
+    {
+      QString text = get_next_node (io);
+      if(node == get_node_name (text))
+        {
+          return text;
+        }
+    }
+
+  return QString ();
+}
+
+QString
+parser::get_next_node (QIODevice *io)
+{
+  QString text;
+  while (!io->atEnd ())
+    {
+      QByteArray line = io->readLine ();
+      if (line.at(0) == 31)
+        {
+          break;
+        }
+      else
+        {
+          text.append (line);
+        }
+    }
+  return text;
+}
+
+static QString
+get_first_line (QString text)
+{
+  int n = text.indexOf ("\n");
+
+  if (n < 0)
+    {
+      return QString ();
+    }
+
+  QString first_line = text.left (n);
+  return first_line;
+}
+
+static QString
+parser_node (QString text, QString node_name)
+{
+  QString firstLine = get_first_line (text);
+  QStringList nodes = firstLine.split (",");
+  for (int i = 0;i < nodes.size (); i++)
+    {
+      QString node = nodes.at (i).trimmed ();
+
+      if (node.startsWith (node_name))
+        {
+          return node.remove (0, node_name.size ()).trimmed ();
+        }
+    }
+  return QString ();
+}
+
+QString
+parser::get_node_name (QString text)
+{
+  return parser_node (text, "Node:");
+}
+
+QString
+parser::get_node_up (QString text)
+{
+  return parser_node (text, "Up:");
+}
+
+QString
+parser::get_node_next (QString text)
+{
+  return parser_node (text, "Next:");
+}
+
+QString
+parser::get_node_prev (QString text)
+{
+  return parser_node (text, "Prev:");
+}
+
+static void
+replace_links (QString &text)
+{
+  QRegExp re ("(\\*[N|n]ote|\n\\*)([ |\n]+)([^:]+):([^:\\.,]*)([:,\\.])");
+  int i = 0, f;
+
+  while ( (i = re.indexIn (text,i)) != -1)
+    {
+      QString type     = re.cap (1);
+      QString note     = re.cap (3);
+      QString url_link = re.cap (4);
+      QString link     = re.cap (4);
+
+      if (url_link.isEmpty ())
+        {
+          url_link = note;
+        }
+
+      url_link = url_link.trimmed ();
+      url_link.replace ("\n"," ");
+      url_link.replace (QRegExp ("  +")," ");
+      url_link.replace ("<b>","");
+      url_link.replace ("</b>","");
+      url_link = QUrl::toPercentEncoding (url_link, "", "'");
+
+      QString href;
+      if (type=="\n*")
+        {
+          href="\n<img src=':/actions/icons/bookmark.png'/>";
+        }
+      else
+        {
+          href="<img src=':/actions/icons/bookmark.png'/>";
+        }
+      href += re.cap (2) + "<a href='" + url_link + "'>" + note + ":" + link + re.cap (5) + "</a>";
+      f = re.matchedLength ();
+      text.replace (i,f,href);
+      i += href.size ();
+    }
+}
+
+static void
+replace_colons (QString &text)
+{
+  QRegExp re ("`([^']+)'");
+  int i = 0, f;
+  while ( (i = re.indexIn (text, i)) != -1)
+    {
+      QString t = re.cap (1);
+      QString bold = "<b>`" + t + "</b>'";
+
+      f = re.matchedLength ();
+      text.replace (i,f,bold);
+      i += bold.size ();
+    }
+}
+
+static void
+info_to_html (QString &text)
+{
+  text.replace ("&", "&amp;");
+  text.replace ("<", "&lt;");
+  text.replace (">", "&gt;");
+
+  text.replace ("\n* Menu:", "\n<b>Menu:</b>");
+  text.replace ("*See also:*", "<b>See also:</b>");
+  replace_colons (text);
+  replace_links (text);
+}
+
+QString
+parser::node_text_to_html (QString text, int anchorPos, QString anchor)
+{
+  QString nodeName = get_node_name (text);
+  QString nodeUp   = get_node_up (text);
+  QString nodeNext = get_node_next (text);
+  QString nodePrev = get_node_prev (text);
+
+  if (anchorPos > -1)
+    {
+      QString text1 = text.left (anchorPos);
+      QString text2 = text.mid (anchorPos);
+
+      int n = text1.indexOf ("\n");
+      text1.remove (0, n);
+
+      info_to_html (text1);
+      info_to_html (text2);
+
+      text = text1 + "<a name='" + anchor + "' /><img src=':/actions/icons/stop.png'>" + text2;
+    }
+  else
+    {
+      int n = text.indexOf ("\n");
+      text.remove (0, n);
+      info_to_html (text);
+    }
+
+  QString navigationLinks = QString (
+        "<img src=':/actions/icons/arrow_right.png'/> <b>Section:</b> %1<br>"
+        "<b>Previous Section:</b> <a href='%2'>%3</a><br>"
+        "<b>Next Section:</b> <a href='%4'>%5</a><br>"
+        "<b>Up:</b> <a href='%6'>%7</a><br>\n"
+        )
+      .arg (nodeName)
+      .arg (QString (QUrl::toPercentEncoding (nodePrev, "", "'")))
+      .arg (nodePrev)
+      .arg (QString (QUrl::toPercentEncoding (nodeNext, "", "'")))
+      .arg (nodeNext)
+      .arg (QString (QUrl::toPercentEncoding (nodeUp, "", "'")))
+      .arg (nodeUp);
+
+
+  text.prepend ("<hr>\n<pre>");
+  text.append ("</pre>\n<hr><hr>\n");
+  text.prepend (navigationLinks);
+  text.append (navigationLinks);
+  text.prepend ("<html><body>\n");
+  text.append ("</body></html>\n");
+  return text;
+}
+
+void
+parser::parse_info_map ()
+{
+  QRegExp re ("(Node|Ref): ([^\\0177]+)\\0177(\\d+)\n");
+  QRegExp re_files ("([^:]+): (\\d+)\n");
+  int foundCount = 0;
+
+  for(int i = 0; i < _info_files.size (); i++)
+    {
+      QFileInfo fileInfo = _info_files.at (i);
+
+      QIODevice *io = open_file (fileInfo);
+      if (io == NULL)
+        {
+          continue;
+        }
+
+      QString nodeText;
+      while (! (nodeText=get_next_node (io)).isEmpty () && foundCount < 2)
+        {
+          QString first_line = get_first_line (nodeText);
+          if (first_line.startsWith ("Tag") )
+            {
+              foundCount++;
+              int pos = 0;
+              QString last_node;
+
+              while ((pos = re.indexIn (nodeText, pos)) != -1) {
+                  QString type = re.cap (1);
+                  QString node = re.cap (2);
+                  int index = re.cap (3).toInt ();
+
+                  if (type == "Node")
+                    {
+                      node_map_item item;
+                      item.pos = index;
+                      _node_map [node] = item;
+                      last_node = node;
+                    }
+                  else if (type == "Ref")
+                    {
+                      node_position item;
+                      item._node_name = last_node;
+                      item.pos = index;
+                      _ref_map [node] = item;
+                    }
+                  pos += re.matchedLength ();
+                }
+              break;
+            }
+          else if (first_line.startsWith ("Indirect:"))
+            {
+              foundCount++;
+              int pos = 0;
+
+              while ( (pos = re_files.indexIn (nodeText, pos)) != -1) {
+                  QString fileCap = re_files.cap (1).trimmed ();
+                  int index = re_files.cap (2).toInt ();
+
+                  info_file_item item;
+                  for (int j = 0;j < _info_files.size (); j++)
+                    {
+                      QFileInfo info = _info_files.at (j);
+                      if (info.fileName ().startsWith (fileCap))
+                        {
+                          item.file_info = info;
+                          break;
+                        }
+                    }
+                  item.real_size = index;
+                  _info_file_real_size_list.append (item);
+                  pos += re_files.matchedLength ();
+                }
+
+            }
+        }
+      io->close ();
+      delete io;
+    }
+}
+
+void
+parser::real_position (int pos, QFileInfo & file_info, int & real_pos)
+{
+  int header = -1, sum = 0;
+  for (int i = 0; i < _info_file_real_size_list.size (); i++)
+    {
+      info_file_item item = _info_file_real_size_list.at (i);
+      if (header == -1)
+        {
+          file_info = item.file_info;
+          header = item.real_size;
+        }
+
+      if (pos < item.real_size)
+        {
+          break;
+        }
+
+      file_info = item.file_info;
+      sum = item.real_size;
+    }
+  real_pos = pos - sum + header + 2;
+}
+
+void
+parser::seek (QIODevice *io, int pos)
+{
+  char ch;
+  while (!io->atEnd () && pos > 0)
+    {
+      io->getChar (&ch);
+      pos--;
+    }
+}
+
+static void
+replace (QString &text, QRegExp re, QString after)
+{
+  int pos = 0;
+
+  while ( (pos = re.indexIn (text, pos)) != -1)
+    {
+      QString cap = text.mid (pos,re.matchedLength ());
+      QString a (after);
+      a = a.arg (cap);
+      text.remove (pos, re.matchedLength ());
+      text.insert (pos, a);
+      pos += a.size ();
+    }
+}
+
+QString
+parser::global_search (QString text, int max_founds)
+{
+  QString results;
+  QStringList words = text.split (" ",QString::SkipEmptyParts);
+
+  QString re_program ("(" + words.at (0));
+  for (int i = 1; i < words.size (); i++)
+    {
+      re_program += "|" + words.at (i);
+    }
+  re_program += ")";
+
+  QRegExp re (re_program, Qt::CaseInsensitive);
+
+  results.append ("<html><body>\n<h1>Search results</h1>\n<b>Results for:</b> ");
+  results.append (text);
+  results.append ("<br>\n");
+
+  for (int i = 0; i < _info_files.size (); i++)
+    {
+      QFileInfo file_info = _info_files.at (i);
+      QIODevice *io = open_file (file_info);
+      if (io == NULL)
+        {
+          continue;
+        }
+
+      QString node_text;
+      while ( !(node_text = get_next_node (io)).isEmpty ())
+        {
+          QString firstLine = get_first_line (node_text);
+          QString node = get_node_name (node_text);
+          if (node.isEmpty ())
+            {
+              continue;
+            }
+
+          int n = node_text.indexOf ("\n");
+          node_text.remove (0, n);
+
+          int pos = 0;
+          int founds = 0;
+
+          for (; founds < words.size () && node_text.indexOf (words.at (founds)) >= 0; founds++)
+            { }
+
+          if (founds<words.size ())
+            {
+              continue;
+            }
+          founds = 0;
+
+          while ( (pos = re.indexIn (node_text, pos)) != -1 && founds < max_founds)
+            {
+              int line_start, line_end;
+              line_start = node_text.lastIndexOf ("\n", pos);
+              line_end = node_text.indexOf ("\n", pos);
+              QString line = node_text.mid (line_start, line_end - line_start).trimmed ();
+
+              if (founds == 0)
+                {
+                  results.append(
+                        "<br>\n<img src=':/actions/icons/bookmark.png'> <a href='"
+                        + QString(QUrl::toPercentEncoding(node,"","'")) +
+                        "'>");
+                  results.append (node);
+                  results.append ("</a><br>\n");
+                }
+
+              replace (line, re, "<i>%1</i>");
+              results.append (line);
+              results.append ("<br>\n");
+
+              founds++;
+
+              pos += re.matchedLength ();
+            }
+        }
+      io->close ();
+      delete io;
+    }
+
+  results.append ("</body></html>");
+  return results;
+}
new file mode 100644
--- /dev/null
+++ b/gui/src/qtinfo/parser.h
@@ -0,0 +1,111 @@
+/* Copyright (C) 2009 P.L. Lucas
+ * Copyright (C) 2012 Jacob Dawid <jacob.dawid@gmail.com>
+ *
+ * This program 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 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <QStringList>
+#include <QIODevice>
+#include <QFileInfoList>
+#include <QHash>
+
+/**
+ * \class parser
+ * This class gets nodes and searchs inside of `info files'.
+ * <p>Each info file has nodes. Every node has the documentation.
+ * Info files contains a map with position of each node.</p>
+ * <p>What is position?
+ * There is a simple answer:
+ * If you make a queue with info files, position will be the number of bytes
+ * from begining to node position.</p>
+ * <p>
+ * But is not so easy. There is headers, and qtinfo must not take these headers into account.
+ * </p>
+ * <p>
+ * This class also translates info files to html.
+ * </p>
+ */
+class parser
+    : public QObject
+{
+  Q_OBJECT
+
+public:
+  parser (QObject *parent = 0);
+  void set_info_path (QString _info_path);
+  QString get_info_path ();
+  QString search_node (QString node);
+  QString global_search (QString text, int maxFounds);
+
+  /** Checks if this node is reference. If node is reference, it will be returned its position
+    * in text, else  it will be returned -1.
+    */
+  int is_ref (QString node);
+
+  /**Translates text of node to Html. If anchorPos is not -1, then anchor is inserted in that
+    * position.
+    */
+  QString node_text_to_html (QString text, int anchorPos=-1, QString anchor=QString());
+
+private:
+  struct node_position
+  {
+    QString _node_name;
+    int pos;
+  };
+
+  struct node_map_item
+  {
+    int pos;
+  };
+
+  struct info_file_item
+  {
+    QFileInfo file_info;
+    int real_size;
+  };
+
+  QString search_node (QString node, QIODevice * io);
+  QString get_next_node (QIODevice * io);
+  QString get_node_name (QString text);
+  QString get_node_up (QString text);
+  QString get_node_next (QString text);
+  QString get_node_prev (QString text);
+
+  /** Parses info files and gets map of node positions.*/
+  void parse_info_map();
+
+  /** Open info files and uncompress them. */
+  QIODevice *open_file(QFileInfo & fileInfo);
+
+  /** Calculates real position of nodes.
+    * \param pos position from info file.
+    * \param fileInfo returns file what contains that position.
+    * \param realPos returns real position inside of fileInfo.
+    */
+  void real_position (int pos, QFileInfo & file_info, int & real_pos);
+
+  /** Seeks to position pos. */
+  void seek (QIODevice *io, int pos);
+
+
+  QString                       _info_path;
+  QFileInfoList                 _info_files;
+  QHash<QString, node_map_item> _node_map;
+  QHash<QString, node_position> _ref_map;
+  QList<info_file_item>         _info_file_real_size_list;
+  QHash<QString, QString>       _compressors_map;
+};
new file mode 100644
--- /dev/null
+++ b/gui/src/qtinfo/webinfo.cc
@@ -0,0 +1,211 @@
+/* Copyright (C) 2009 P.L. Lucas
+ * Copyright (C) 2012 Jacob Dawid <jacob.dawid@gmail.com>
+ *
+ * This program 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 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "webinfo.h"
+#include <QVBoxLayout>
+#include <QHBoxLayout>
+
+
+webinfo::webinfo (QWidget *parent)
+  :QWidget (parent)
+{
+  _font_web = font ();
+
+  QVBoxLayout *layout = new QVBoxLayout ();
+  layout->setMargin (0);
+  setLayout (layout);
+
+  QHBoxLayout *hboxLayout = new QHBoxLayout ();
+  hboxLayout->setMargin (2);
+  layout->addLayout (hboxLayout);
+
+  _close_tab_button = new QPushButton (this);
+  _close_tab_button->setSizePolicy (QSizePolicy::Fixed,QSizePolicy::Preferred);
+  _close_tab_button->setIcon (QIcon (":/actions/icons/stop.png"));
+  hboxLayout->addWidget (_close_tab_button);
+
+  _tab_bar = new QTabBar (this);
+  _tab_bar->setSizePolicy (QSizePolicy::Preferred,QSizePolicy::Preferred);
+  _tab_bar->setExpanding (false);
+  hboxLayout->addWidget (_tab_bar);
+
+  _zoom_in_button = new QToolButton (this);
+  _zoom_in_button->setSizePolicy (QSizePolicy::Fixed,QSizePolicy::Preferred);
+  _zoom_in_button->setIcon (QIcon (":/actions/icons/zoom-in.png"));
+  hboxLayout->addWidget (_zoom_in_button);
+
+  _zoom_out_button = new QToolButton (this);
+  _zoom_out_button->setSizePolicy (QSizePolicy::Fixed,QSizePolicy::Preferred);
+  _zoom_out_button->setIcon (QIcon (":/actions/icons/zoom-out.png"));
+  hboxLayout->addWidget (_zoom_out_button);
+
+  _stacked_widget = new QStackedWidget (this);
+  layout->addWidget (_stacked_widget);
+
+  hboxLayout = new QHBoxLayout ();
+  layout->addLayout (hboxLayout);
+
+  _search_line_edit = new QLineEdit(this);
+  _search_line_edit->setPlaceholderText (tr ("Type here and press \'Return\' to search"));
+  hboxLayout->addWidget (_search_line_edit);
+
+  _search_check_box = new QCheckBox (tr ("Global search"));
+  hboxLayout->addWidget (_search_check_box);
+
+  connect (_close_tab_button, SIGNAL (clicked ()), this, SLOT (close_tab ()));
+  connect (_tab_bar, SIGNAL (currentChanged (int)), this, SLOT (current_tab_changed (int)));
+  connect (_zoom_in_button, SIGNAL (clicked ()), this, SLOT (zoom_in ()));
+  connect (_zoom_out_button, SIGNAL (clicked ()), this, SLOT (zoom_out ()));
+  connect (_search_line_edit, SIGNAL (returnPressed ()), this, SLOT (search ()));
+
+  resize (500, 300);
+
+  set_info_path ("../../doc/interpreter/octave.info");
+}
+
+void
+webinfo::set_info_path (QString info_path)
+{
+  _parser.set_info_path (info_path);
+  load_node ("Top");
+}
+
+void
+webinfo::load_node (QString node_name)
+{
+  //Check if node has been already opened.
+  for (int i = 0;i < _tab_bar->count (); i++)
+    {
+      if (node_name == _tab_bar->tabText (i))
+        {
+          _tab_bar->setCurrentIndex (i);
+          return;
+        }
+    }
+
+  QString text = _parser.search_node (node_name);
+  int i = _parser.is_ref (node_name);
+  _text_browser = addNewTab (node_name);
+  _text_browser->setHtml (_parser.node_text_to_html (text, i - 1, "anchor"));
+
+  if (i != -1)
+    {
+      _text_browser->scrollToAnchor ("anchor");
+    }
+}
+
+void
+webinfo::link_clicked (const QUrl & link)
+{
+  QString node = link.toString ();
+  load_node (node);
+}
+
+void
+webinfo::current_tab_changed (int index)
+{
+  QVariant data = _tab_bar->tabData (index);
+  _text_browser = (QTextBrowser*) (data.value<void*> ());
+
+  _stacked_widget->setCurrentIndex (_stacked_widget->indexOf (_text_browser));
+
+  if (_text_browser->font () != _font_web)
+    {
+      _text_browser->setFont (_font_web);
+    }
+}
+
+QTextBrowser *
+webinfo::addNewTab(QString name)
+{
+  _text_browser = new QTextBrowser (this);
+  _text_browser->setOpenLinks (false);
+  _text_browser->show ();
+
+  connect (_text_browser, SIGNAL (anchorClicked (const QUrl &)), this, SLOT (link_clicked (const QUrl &)) );
+  disconnect(_tab_bar, SIGNAL (currentChanged(int)), this, SLOT (current_tab_changed (int)));
+
+  int ns = _stacked_widget->addWidget (_text_browser);
+  _stacked_widget->setCurrentIndex (ns);
+
+  int nt = _tab_bar->addTab (name);
+  _tab_bar->setCurrentIndex (nt);
+  QVariant data;
+  data.setValue ( (void*)_text_browser);
+  _tab_bar->setTabData (nt, data);
+
+  connect (_tab_bar, SIGNAL (currentChanged (int)), this, SLOT (current_tab_changed (int)));
+
+  if (_text_browser->font () != _font_web)
+    {
+      _text_browser->setFont (_font_web);
+    }
+  return _text_browser;
+}
+
+void
+webinfo::close_tab ()
+{
+  int index = _tab_bar->currentIndex ();
+  if (_tab_bar->tabText (index) != "Top")
+    closeTab (index);
+}
+
+void
+webinfo::closeTab (int index)
+{
+  QVariant data = _tab_bar->tabData (index);
+  QWidget *w = (QWidget*) (data.value<void*> ());
+  _stacked_widget->removeWidget (w);
+  delete w;
+
+  _tab_bar->removeTab (index);
+}
+
+void
+webinfo::search ()
+{
+  if (_search_check_box->isChecked ())
+    {
+      // Global search
+      QString results = _parser.global_search (_search_line_edit->text (), 5);
+      _text_browser=addNewTab ("Results for: " + _search_line_edit->text ());
+      _text_browser->setHtml (results);
+    }
+  else
+    {
+      // Local search
+      _text_browser->find (_search_line_edit->text ());
+    }
+}
+
+void
+webinfo::zoom_in ()
+{
+  _font_web.setPointSize (_font_web.pointSize() + 1);
+  _text_browser->setFont (_font_web);
+}
+
+void
+webinfo::zoom_out ()
+{
+  _font_web.setPointSize (_font_web.pointSize() - 1);
+  _text_browser->setFont (_font_web);
+}
+
new file mode 100644
--- /dev/null
+++ b/gui/src/qtinfo/webinfo.h
@@ -0,0 +1,60 @@
+/* Copyright (C) 2009 P.L. Lucas
+ * Copyright (C) 2012 Jacob Dawid <jacob.dawid@gmail.com>
+ *
+ * This program 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 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <QTextBrowser>
+#include "parser.h"
+#include <QStackedWidget>
+#include <QTabBar>
+#include <QPushButton>
+#include <QLineEdit>
+#include <QCheckBox>
+#include <QToolButton>
+
+class webinfo : public QWidget
+{
+  Q_OBJECT
+public:
+  webinfo (QWidget *parent = 0);
+  void set_info_path (QString info_path);
+  void load_node (QString node_name);
+
+public slots:
+  void link_clicked (const QUrl &link);
+  void current_tab_changed (int index);
+  void close_tab ();
+  void search ();
+  void zoom_in ();
+  void zoom_out ();
+
+private:
+  QTextBrowser        *_text_browser;
+  QTabBar             *_tab_bar;
+  QStackedWidget      *_stacked_widget;
+  QPushButton         *_close_tab_button;
+  QLineEdit           *_search_line_edit;
+  QCheckBox           *_search_check_box;
+  QToolButton         *_zoom_in_button;
+  QToolButton         *_zoom_out_button;
+
+  parser              _parser;
+  QFont               _font_web;
+
+  QTextBrowser *addNewTab (QString name);
+  void closeTab(int index);
+};
new file mode 100644
--- /dev/null
+++ b/gui/src/resource-manager.cc
@@ -0,0 +1,1721 @@
+/* OctaveGUI - A graphical user interface for Octave
+ * Copyright (C) 2011 Jacob Dawid (jacob.dawid@googlemail.com)
+ *
+ * This program 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.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <string>
+
+#include <QFile>
+#include <QDir>
+#include <QNetworkProxy>
+
+#include "error.h"
+#include "file-ops.h"
+#include "oct-env.h"
+#include "singleton-cleanup.h"
+
+#include "defaults.h"
+
+#include "resource-manager.h"
+
+resource_manager *resource_manager::instance = 0;
+
+resource_manager::resource_manager (void)
+  : settings (0), home_path (), first_run (false)
+{
+  do_reload_settings ();
+}
+
+resource_manager::~resource_manager (void)
+{
+  delete settings;
+}
+
+QString
+resource_manager::find_translator_file (QString language)
+{
+  // TODO: Quick hack to be able to test language files.
+  return QString ("../languages/%1.qm").arg (language);
+}
+
+bool
+resource_manager::instance_ok (void)
+{
+  bool retval = true;
+
+  if (! instance)
+    {
+      instance = new resource_manager ();
+
+      if (instance)
+        singleton_cleanup_list::add (cleanup_instance);
+    }
+
+  if (! instance)
+    {
+      ::error ("unable to create resource_manager object!");
+
+      retval = false;
+    }
+
+  return retval;
+}
+
+QSettings *
+resource_manager::do_get_settings (void)
+{
+  return settings;
+}
+
+QString
+resource_manager::do_get_home_path (void)
+{
+  return home_path;
+}
+
+static std::string
+default_qt_settings_file (void)
+{
+  std::string dsf = octave_env::getenv ("OCTAVE_DEFAULT_QT_SETTINGS");
+
+  if (dsf.empty ())
+    dsf = Voct_etc_dir + file_ops::dir_sep_str () + "default-qt-settings";
+
+  return dsf;
+}
+
+void
+resource_manager::do_reload_settings (void)
+{
+  QDesktopServices desktopServices;
+  home_path = desktopServices.storageLocation (QDesktopServices::HomeLocation);
+  QString settings_path = home_path + "/.config/octave/";
+  QString settings_file = settings_path + "qt-settings";
+
+  if (!QFile::exists (settings_file))
+   {
+     QDir("/").mkpath (settings_path);
+     QFile::copy (QString::fromStdString (default_qt_settings_file ()),
+                  settings_file);
+     first_run = true;
+   }
+  else
+     first_run = false;
+
+  do_set_settings (settings_file);
+}
+
+void
+resource_manager::do_set_settings (QString file)
+{
+  delete settings;
+  settings = new QSettings (file, QSettings::IniFormat);
+}
+
+bool
+resource_manager::do_is_first_run (void)
+{
+  return first_run;
+}
+
+void
+resource_manager::do_update_network_settings (void)
+{
+  QNetworkProxy::ProxyType proxyType = QNetworkProxy::NoProxy;
+
+  if (settings->value ("useProxyServer").toBool ())
+    {
+      QString proxyTypeString = settings->value ("proxyType").toString ();
+
+      if (proxyTypeString == "Socks5Proxy")
+        proxyType = QNetworkProxy::Socks5Proxy;
+      else if (proxyTypeString == "HttpProxy")
+        proxyType = QNetworkProxy::HttpProxy;
+    }
+
+  QNetworkProxy proxy;
+
+  proxy.setType (proxyType);
+  proxy.setHostName (settings->value ("proxyHostName").toString ());
+  proxy.setPort (settings->value ("proxyPort").toInt ());
+  proxy.setUser (settings->value ("proxyUserName").toString ());
+  proxy.setPassword (settings->value ("proxyPassword").toString ());
+
+  QNetworkProxy::setApplicationProxy (proxy);
+}
+
+const char*
+resource_manager::octave_keywords (void)
+{
+  return
+      ".nargin. "
+      "EDITOR "
+      "EXEC_PATH "
+      "F_DUPFD "
+      "F_GETFD "
+      "F_GETFL "
+      "F_SETFD "
+      "F_SETFL "
+      "I "
+      "IMAGE_PATH "
+      "Inf "
+      "J "
+      "NA "
+      "NaN "
+      "OCTAVE_HOME "
+      "OCTAVE_VERSION "
+      "O_APPEND "
+      "O_ASYNC "
+      "O_CREAT "
+      "O_EXCL "
+      "O_NONBLOCK "
+      "O_RDONLY "
+      "O_RDWR "
+      "O_SYNC "
+      "O_TRUNC "
+      "O_WRONLY "
+      "PAGER "
+      "PAGER_FLAGS "
+      "PS1 "
+      "PS2 "
+      "PS4 "
+      "P_tmpdir "
+      "SEEK_CUR "
+      "SEEK_END "
+      "SEEK_SET "
+      "SIG "
+      "S_ISBLK "
+      "S_ISCHR "
+      "S_ISDIR "
+      "S_ISFIFO "
+      "S_ISLNK "
+      "S_ISREG "
+      "S_ISSOCK "
+      "WCONTINUE "
+      "WCOREDUMP "
+      "WEXITSTATUS "
+      "WIFCONTINUED "
+      "WIFEXITED "
+      "WIFSIGNALED "
+      "WIFSTOPPED "
+      "WNOHANG "
+      "WSTOPSIG "
+      "WTERMSIG "
+      "WUNTRACED "
+      "__accumarray_max__ "
+      "__accumarray_min__ "
+      "__accumarray_sum__ "
+      "__accumdim_sum__ "
+      "__all_opts__ "
+      "__builtins__ "
+      "__calc_dimensions__ "
+      "__contourc__ "
+      "__current_scope__ "
+      "__delaunayn__ "
+      "__dispatch__ "
+      "__display_tokens__ "
+      "__dsearchn__ "
+      "__dump_symtab_info__ "
+      "__end__ "
+      "__error_text__ "
+      "__finish__ "
+      "__fltk_ginput__ "
+      "__fltk_print__ "
+      "__fltk_uigetfile__ "
+      "__ftp__ "
+      "__ftp_ascii__ "
+      "__ftp_binary__ "
+      "__ftp_close__ "
+      "__ftp_cwd__ "
+      "__ftp_delete__ "
+      "__ftp_dir__ "
+      "__ftp_mget__ "
+      "__ftp_mkdir__ "
+      "__ftp_mode__ "
+      "__ftp_mput__ "
+      "__ftp_pwd__ "
+      "__ftp_rename__ "
+      "__ftp_rmdir__ "
+      "__get__ "
+      "__glpk__ "
+      "__gnuplot_drawnow__ "
+      "__gnuplot_get_var__ "
+      "__gnuplot_ginput__ "
+      "__gnuplot_has_feature__ "
+      "__gnuplot_open_stream__ "
+      "__gnuplot_print__ "
+      "__gnuplot_version__ "
+      "__go_axes__ "
+      "__go_axes_init__ "
+      "__go_close_all__ "
+      "__go_delete__ "
+      "__go_draw_axes__ "
+      "__go_draw_figure__ "
+      "__go_execute_callback__ "
+      "__go_figure__ "
+      "__go_figure_handles__ "
+      "__go_handles__ "
+      "__go_hggroup__ "
+      "__go_image__ "
+      "__go_line__ "
+      "__go_patch__ "
+      "__go_surface__ "
+      "__go_text__ "
+      "__go_uimenu__ "
+      "__gud_mode__ "
+      "__image_pixel_size__ "
+      "__init_fltk__ "
+      "__isa_parent__ "
+      "__keywords__ "
+      "__lexer_debug_flag__ "
+      "__lin_interpn__ "
+      "__list_functions__ "
+      "__magick_finfo__ "
+      "__magick_format_list__ "
+      "__magick_read__ "
+      "__magick_write__ "
+      "__makeinfo__ "
+      "__marching_cube__ "
+      "__next_line_color__ "
+      "__next_line_style__ "
+      "__operators__ "
+      "__parent_classes__ "
+      "__parser_debug_flag__ "
+      "__pathorig__ "
+      "__pchip_deriv__ "
+      "__plt_get_axis_arg__ "
+      "__print_parse_opts__ "
+      "__qp__ "
+      "__request_drawnow__ "
+      "__sort_rows_idx__ "
+      "__strip_html_tags__ "
+      "__token_count__ "
+      "__varval__ "
+      "__version_info__ "
+      "__voronoi__ "
+      "__which__ "
+      "abs "
+      "accumarray "
+      "accumdim "
+      "acos "
+      "acosd "
+      "acosh "
+      "acot "
+      "acotd "
+      "acoth "
+      "acsc "
+      "acscd "
+      "acsch "
+      "add_input_event_hook "
+      "addlistener "
+      "addpath "
+      "addproperty "
+      "addtodate "
+      "airy "
+      "all "
+      "allchild "
+      "allow_noninteger_range_as_index "
+      "amd "
+      "ancestor "
+      "and "
+      "angle "
+      "anova "
+      "ans "
+      "any "
+      "arch_fit "
+      "arch_rnd "
+      "arch_test "
+      "area "
+      "arg "
+      "argnames "
+      "argv "
+      "arma_rnd "
+      "arrayfun "
+      "asctime "
+      "asec "
+      "asecd "
+      "asech "
+      "asin "
+      "asind "
+      "asinh "
+      "assert "
+      "assignin "
+      "atan "
+      "atan2 "
+      "atand "
+      "atanh "
+      "atexit "
+      "autocor "
+      "autocov "
+      "autoload "
+      "autoreg_matrix "
+      "autumn "
+      "available_graphics_toolkits "
+      "axes "
+      "axis "
+      "balance "
+      "bar "
+      "barh "
+      "bartlett "
+      "bartlett_test "
+      "base2dec "
+      "beep "
+      "beep_on_error "
+      "bessel "
+      "besselh "
+      "besseli "
+      "besselj "
+      "besselk "
+      "bessely "
+      "beta "
+      "betacdf "
+      "betai "
+      "betainc "
+      "betainv "
+      "betaln "
+      "betapdf "
+      "betarnd "
+      "bicgstab "
+      "bicubic "
+      "bin2dec "
+      "bincoeff "
+      "binocdf "
+      "binoinv "
+      "binopdf "
+      "binornd "
+      "bitand "
+      "bitcmp "
+      "bitget "
+      "bitmax "
+      "bitor "
+      "bitpack "
+      "bitset "
+      "bitshift "
+      "bitunpack "
+      "bitxor "
+      "blackman "
+      "blanks "
+      "blkdiag "
+      "blkmm "
+      "bone "
+      "box "
+      "break "
+      "brighten "
+      "bsxfun "
+      "bug_report "
+      "builtin "
+      "bunzip2 "
+      "bzip2 "
+      "calendar "
+      "canonicalize_file_name "
+      "cart2pol "
+      "cart2sph "
+      "case "
+      "cast "
+      "cat "
+      "catch "
+      "cauchy_cdf "
+      "cauchy_inv "
+      "cauchy_pdf "
+      "cauchy_rnd "
+      "caxis "
+      "cbrt "
+      "ccolamd "
+      "cd "
+      "ceil "
+      "cell "
+      "cell2mat "
+      "cell2struct "
+      "celldisp "
+      "cellfun "
+      "cellidx "
+      "cellindexmat "
+      "cellslices "
+      "cellstr "
+      "center "
+      "cgs "
+      "char "
+      "chdir "
+      "chi2cdf "
+      "chi2inv "
+      "chi2pdf "
+      "chi2rnd "
+      "chisquare_test_homogeneity "
+      "chisquare_test_independence "
+      "chol "
+      "chol2inv "
+      "choldelete "
+      "cholinsert "
+      "cholinv "
+      "cholshift "
+      "cholupdate "
+      "chop "
+      "circshift "
+      "cla "
+      "clabel "
+      "class "
+      "clc "
+      "clear "
+      "clf "
+      "clg "
+      "clock "
+      "cloglog "
+      "close "
+      "closereq "
+      "colamd "
+      "colloc "
+      "colon "
+      "colorbar "
+      "colormap "
+      "colperm "
+      "colstyle "
+      "columns "
+      "comet "
+      "comet3 "
+      "comma "
+      "command_line_path "
+      "common_size "
+      "commutation_matrix "
+      "compan "
+      "compare_versions "
+      "compass "
+      "complement "
+      "completion_append_char "
+      "completion_matches "
+      "complex "
+      "computer "
+      "cond "
+      "condest "
+      "confirm_recursive_rmdir "
+      "conj "
+      "continue "
+      "contour "
+      "contour3 "
+      "contourc "
+      "contourf "
+      "contrast "
+      "conv "
+      "conv2 "
+      "convhull "
+      "convhulln "
+      "convn "
+      "cool "
+      "copper "
+      "copyfile "
+      "cor "
+      "cor_test "
+      "corrcoef "
+      "cos "
+      "cosd "
+      "cosh "
+      "cot "
+      "cotd "
+      "coth "
+      "cov "
+      "cplxpair "
+      "cputime "
+      "cquad "
+      "crash_dumps_octave_core "
+      "create_set "
+      "cross "
+      "csc "
+      "cscd "
+      "csch "
+      "cstrcat "
+      "csvread "
+      "csvwrite "
+      "csymamd "
+      "ctime "
+      "ctranspose "
+      "cummax "
+      "cummin "
+      "cumprod "
+      "cumsum "
+      "cumtrapz "
+      "curl "
+      "cut "
+      "cylinder "
+      "daspect "
+      "daspk "
+      "daspk_options "
+      "dasrt "
+      "dasrt_options "
+      "dassl "
+      "dassl_options "
+      "date "
+      "datenum "
+      "datestr "
+      "datetick "
+      "datevec "
+      "dbclear "
+      "dbcont "
+      "dbdown "
+      "dblquad "
+      "dbnext "
+      "dbquit "
+      "dbstack "
+      "dbstatus "
+      "dbstep "
+      "dbstop "
+      "dbtype "
+      "dbup "
+      "dbwhere "
+      "deal "
+      "deblank "
+      "debug "
+      "debug_on_error "
+      "debug_on_interrupt "
+      "debug_on_warning "
+      "dec2base "
+      "dec2bin "
+      "dec2hex "
+      "deconv "
+      "default_save_options "
+      "del2 "
+      "delaunay "
+      "delaunay3 "
+      "delaunayn "
+      "delete "
+      "dellistener "
+      "demo "
+      "det "
+      "detrend "
+      "diag "
+      "diary "
+      "diff "
+      "diffpara "
+      "diffuse "
+      "dir "
+      "discrete_cdf "
+      "discrete_inv "
+      "discrete_pdf "
+      "discrete_rnd "
+      "disp "
+      "dispatch "
+      "display "
+      "divergence "
+      "dlmread "
+      "dlmwrite "
+      "dmperm "
+      "dmult "
+      "do "
+      "do_braindead_shortcircuit_evaluation "
+      "do_string_escapes "
+      "doc "
+      "doc_cache_file "
+      "dos "
+      "dot "
+      "double "
+      "drawnow "
+      "dsearch "
+      "dsearchn "
+      "dump_prefs "
+      "dup2 "
+      "duplication_matrix "
+      "durbinlevinson "
+      "e "
+      "echo "
+      "echo_executing_commands "
+      "edit "
+      "edit_history "
+      "eig "
+      "eigs "
+      "ellipsoid "
+      "else "
+      "elseif "
+      "empirical_cdf "
+      "empirical_inv "
+      "empirical_pdf "
+      "empirical_rnd "
+      "end "
+      "end_try_catch "
+      "end_unwind_protect "
+      "endfor "
+      "endfunction "
+      "endgrent "
+      "endif "
+      "endpwent "
+      "endswitch "
+      "endwhile "
+      "eomday "
+      "eps "
+      "eq "
+      "erf "
+      "erfc "
+      "erfcx "
+      "erfinv "
+      "errno "
+      "errno_list "
+      "error "
+      "error_text "
+      "errorbar "
+      "etime "
+      "etree "
+      "etreeplot "
+      "eval "
+      "evalin "
+      "example "
+      "exec "
+      "exist "
+      "exit "
+      "exp "
+      "expcdf "
+      "expinv "
+      "expm "
+      "expm1 "
+      "exppdf "
+      "exprnd "
+      "eye "
+      "ezcontour "
+      "ezcontourf "
+      "ezmesh "
+      "ezmeshc "
+      "ezplot "
+      "ezplot3 "
+      "ezpolar "
+      "ezsurf "
+      "ezsurfc "
+      "f_test_regression "
+      "factor "
+      "factorial "
+      "fail "
+      "false "
+      "fcdf "
+      "fclear "
+      "fclose "
+      "fcntl "
+      "fdisp "
+      "feather "
+      "feof "
+      "ferror "
+      "feval "
+      "fflush "
+      "fft "
+      "fft2 "
+      "fftconv "
+      "fftfilt "
+      "fftn "
+      "fftshift "
+      "fftw "
+      "fgetl "
+      "fgets "
+      "fieldnames "
+      "figure "
+      "file_in_loadpath "
+      "file_in_path "
+      "fileattrib "
+      "filemarker "
+      "fileparts "
+      "fileread "
+      "filesep "
+      "fill "
+      "filter "
+      "filter2 "
+      "find "
+      "find_dir_in_path "
+      "findall "
+      "findobj "
+      "findstr "
+      "finite "
+      "finv "
+      "fix "
+      "fixed_point_format "
+      "flag "
+      "flipdim "
+      "fliplr "
+      "flipud "
+      "floor "
+      "fminbnd "
+      "fminunc "
+      "fmod "
+      "fnmatch "
+      "fopen "
+      "for "
+      "fork "
+      "format "
+      "formula "
+      "fpdf "
+      "fplot "
+      "fprintf "
+      "fputs "
+      "fractdiff "
+      "fread "
+      "freport "
+      "freqz "
+      "freqz_plot "
+      "frewind "
+      "frnd "
+      "fscanf "
+      "fseek "
+      "fskipl "
+      "fsolve "
+      "fstat "
+      "ftell "
+      "full "
+      "fullfile "
+      "func2str "
+      "function "
+      "functions "
+      "fwrite "
+      "fzero "
+      "gamcdf "
+      "gaminv "
+      "gamma "
+      "gammai "
+      "gammainc "
+      "gammaln "
+      "gampdf "
+      "gamrnd "
+      "gca "
+      "gcbf "
+      "gcbo "
+      "gcd "
+      "gcf "
+      "ge "
+      "gen_doc_cache "
+      "genpath "
+      "genvarname "
+      "geocdf "
+      "geoinv "
+      "geopdf "
+      "geornd "
+      "get "
+      "get_first_help_sentence "
+      "get_help_text "
+      "get_help_text_from_file "
+      "getappdata "
+      "getegid "
+      "getenv "
+      "geteuid "
+      "getfield "
+      "getgid "
+      "getgrent "
+      "getgrgid "
+      "getgrnam "
+      "gethostname "
+      "getpgrp "
+      "getpid "
+      "getppid "
+      "getpwent "
+      "getpwnam "
+      "getpwuid "
+      "getrusage "
+      "getuid "
+      "ginput "
+      "givens "
+      "glob "
+      "global "
+      "glpk "
+      "glpkmex "
+      "gls "
+      "gmap40 "
+      "gmres "
+      "gmtime "
+      "gnuplot_binary "
+      "gplot "
+      "gradient "
+      "graphics_toolkit "
+      "gray "
+      "gray2ind "
+      "grid "
+      "griddata "
+      "griddata3 "
+      "griddatan "
+      "gt "
+      "gtext "
+      "gunzip "
+      "gzip "
+      "hadamard "
+      "hamming "
+      "hankel "
+      "hanning "
+      "help "
+      "hess "
+      "hex2dec "
+      "hex2num "
+      "hggroup "
+      "hidden "
+      "hilb "
+      "hist "
+      "histc "
+      "history "
+      "history_control "
+      "history_file "
+      "history_size "
+      "history_timestamp_format_string "
+      "hold "
+      "home "
+      "horzcat "
+      "hot "
+      "hotelling_test "
+      "hotelling_test_2 "
+      "housh "
+      "hsv "
+      "hsv2rgb "
+      "hurst "
+      "hygecdf "
+      "hygeinv "
+      "hygepdf "
+      "hygernd "
+      "hypot "
+      "i "
+      "idivide "
+      "if "
+      "ifelse "
+      "ifft "
+      "ifft2 "
+      "ifftn "
+      "ifftshift "
+      "ignore_function_time_stamp "
+      "imag "
+      "image "
+      "imagesc "
+      "imfinfo "
+      "imread "
+      "imshow "
+      "imwrite "
+      "ind2gray "
+      "ind2rgb "
+      "ind2sub "
+      "index "
+      "inf "
+      "inferiorto "
+      "info "
+      "info_file "
+      "info_program "
+      "inline "
+      "inpolygon "
+      "input "
+      "inputname "
+      "int16 "
+      "int2str "
+      "int32 "
+      "int64 "
+      "int8 "
+      "interp1 "
+      "interp1q "
+      "interp2 "
+      "interp3 "
+      "interpft "
+      "interpn "
+      "intersect "
+      "intmax "
+      "intmin "
+      "intwarning "
+      "inv "
+      "inverse "
+      "invhilb "
+      "ipermute "
+      "iqr "
+      "is_absolute_filename "
+      "is_duplicate_entry "
+      "is_global "
+      "is_leap_year "
+      "is_rooted_relative_filename "
+      "is_valid_file_id "
+      "isa "
+      "isalnum "
+      "isalpha "
+      "isappdata "
+      "isargout "
+      "isascii "
+      "isbool "
+      "iscell "
+      "iscellstr "
+      "ischar "
+      "iscntrl "
+      "iscolumn "
+      "iscommand "
+      "iscomplex "
+      "isdebugmode "
+      "isdefinite "
+      "isdeployed "
+      "isdigit "
+      "isdir "
+      "isempty "
+      "isequal "
+      "isequalwithequalnans "
+      "isfield "
+      "isfigure "
+      "isfinite "
+      "isfloat "
+      "isglobal "
+      "isgraph "
+      "ishandle "
+      "ishermitian "
+      "ishghandle "
+      "ishold "
+      "isieee "
+      "isindex "
+      "isinf "
+      "isinteger "
+      "iskeyword "
+      "isletter "
+      "islogical "
+      "islower "
+      "ismac "
+      "ismatrix "
+      "ismember "
+      "ismethod "
+      "isna "
+      "isnan "
+      "isnull "
+      "isnumeric "
+      "isobject "
+      "isocolors "
+      "isonormals "
+      "isosurface "
+      "ispc "
+      "isprime "
+      "isprint "
+      "isprop "
+      "ispunct "
+      "israwcommand "
+      "isreal "
+      "isrow "
+      "isscalar "
+      "issorted "
+      "isspace "
+      "issparse "
+      "issquare "
+      "isstr "
+      "isstrprop "
+      "isstruct "
+      "issymmetric "
+      "isunix "
+      "isupper "
+      "isvarname "
+      "isvector "
+      "isxdigit "
+      "j "
+      "jet "
+      "kbhit "
+      "kendall "
+      "keyboard "
+      "kill "
+      "kolmogorov_smirnov_cdf "
+      "kolmogorov_smirnov_test "
+      "kolmogorov_smirnov_test_2 "
+      "kron "
+      "kruskal_wallis_test "
+      "krylov "
+      "krylovb "
+      "kurtosis "
+      "laplace_cdf "
+      "laplace_inv "
+      "laplace_pdf "
+      "laplace_rnd "
+      "lasterr "
+      "lasterror "
+      "lastwarn "
+      "lchol "
+      "lcm "
+      "ldivide "
+      "le "
+      "legend "
+      "legendre "
+      "length "
+      "lgamma "
+      "license "
+      "lin2mu "
+      "line "
+      "link "
+      "linkprop "
+      "linspace "
+      "list "
+      "list_in_columns "
+      "list_primes "
+      "load "
+      "loadaudio "
+      "loadimage "
+      "loadobj "
+      "localtime "
+      "log "
+      "log10 "
+      "log1p "
+      "log2 "
+      "logical "
+      "logistic_cdf "
+      "logistic_inv "
+      "logistic_pdf "
+      "logistic_regression "
+      "logistic_rnd "
+      "logit "
+      "loglog "
+      "loglogerr "
+      "logm "
+      "logncdf "
+      "logninv "
+      "lognpdf "
+      "lognrnd "
+      "logspace "
+      "lookfor "
+      "lookup "
+      "lower "
+      "ls "
+      "ls_command "
+      "lsode "
+      "lsode_options "
+      "lsqnonneg "
+      "lstat "
+      "lt "
+      "lu "
+      "luinc "
+      "luupdate "
+      "magic "
+      "mahalanobis "
+      "make_absolute_filename "
+      "makeinfo_program "
+      "manova "
+      "mark_as_command "
+      "mark_as_rawcommand "
+      "mat2cell "
+      "mat2str "
+      "matlabroot "
+      "matrix_type "
+      "max "
+      "max_recursion_depth "
+      "mcnemar_test "
+      "md5sum "
+      "mean "
+      "meansq "
+      "median "
+      "menu "
+      "merge "
+      "mesh "
+      "meshc "
+      "meshgrid "
+      "meshz "
+      "methods "
+      "mex "
+      "mexext "
+      "mfilename "
+      "mgorth "
+      "min "
+      "minus "
+      "mislocked "
+      "missing_function_hook "
+      "mist "
+      "mkdir "
+      "mkfifo "
+      "mkoctfile "
+      "mkpp "
+      "mkstemp "
+      "mktime "
+      "mldivide "
+      "mlock "
+      "mod "
+      "mode "
+      "moment "
+      "more "
+      "most "
+      "movefile "
+      "mpoles "
+      "mpower "
+      "mrdivide "
+      "mtimes "
+      "mu2lin "
+      "munlock "
+      "namelengthmax "
+      "nan "
+      "nargchk "
+      "nargin "
+      "nargout "
+      "nargoutchk "
+      "native_float_format "
+      "nbincdf "
+      "nbininv "
+      "nbinpdf "
+      "nbinrnd "
+      "nchoosek "
+      "ndgrid "
+      "ndims "
+      "ne "
+      "newplot "
+      "news "
+      "nextpow2 "
+      "nfields "
+      "nnz "
+      "nonzeros "
+      "norm "
+      "normcdf "
+      "normest "
+      "norminv "
+      "normpdf "
+      "normrnd "
+      "not "
+      "now "
+      "nproc "
+      "nth_element "
+      "nthroot "
+      "ntsc2rgb "
+      "null "
+      "num2cell "
+      "num2hex "
+      "num2str "
+      "numel "
+      "nzmax "
+      "ocean "
+      "octave_config_info "
+      "octave_core_file_limit "
+      "octave_core_file_name "
+      "octave_core_file_options "
+      "octave_tmp_file_name "
+      "ols "
+      "onCleanup "
+      "onenormest "
+      "ones "
+      "optimget "
+      "optimize_subsasgn_calls "
+      "optimset "
+      "or "
+      "orderfields "
+      "orient "
+      "orth "
+      "otherwise "
+      "output_max_field_width "
+      "output_precision "
+      "pack "
+      "page_output_immediately "
+      "page_screen_output "
+      "paren "
+      "pareto "
+      "parseparams "
+      "pascal "
+      "patch "
+      "path "
+      "pathdef "
+      "pathsep "
+      "pause "
+      "pbaspect "
+      "pcg "
+      "pchip "
+      "pclose "
+      "pcolor "
+      "pcr "
+      "peaks "
+      "periodogram "
+      "perl "
+      "perms "
+      "permute "
+      "perror "
+      "persistent "
+      "pi "
+      "pie "
+      "pie3 "
+      "pink "
+      "pinv "
+      "pipe "
+      "pkg "
+      "planerot "
+      "playaudio "
+      "plot "
+      "plot3 "
+      "plotmatrix "
+      "plotyy "
+      "plus "
+      "poisscdf "
+      "poissinv "
+      "poisspdf "
+      "poissrnd "
+      "pol2cart "
+      "polar "
+      "poly "
+      "polyaffine "
+      "polyarea "
+      "polyder "
+      "polyderiv "
+      "polyfit "
+      "polygcd "
+      "polyint "
+      "polyout "
+      "polyreduce "
+      "polyval "
+      "polyvalm "
+      "popen "
+      "popen2 "
+      "postpad "
+      "pow2 "
+      "power "
+      "powerset "
+      "ppder "
+      "ppint "
+      "ppjumps "
+      "ppplot "
+      "ppval "
+      "pqpnonneg "
+      "prctile "
+      "prepad "
+      "primes "
+      "print "
+      "print_empty_dimensions "
+      "print_struct_array_contents "
+      "print_usage "
+      "printf "
+      "prism "
+      "probit "
+      "prod "
+      "program_invocation_name "
+      "program_name "
+      "prop_test_2 "
+      "putenv "
+      "puts "
+      "pwd "
+      "qp "
+      "qqplot "
+      "qr "
+      "qrdelete "
+      "qrinsert "
+      "qrshift "
+      "qrupdate "
+      "quad "
+      "quad_options "
+      "quadcc "
+      "quadgk "
+      "quadl "
+      "quadv "
+      "quantile "
+      "quit "
+      "quiver "
+      "quiver3 "
+      "qz "
+      "qzhess "
+      "rainbow "
+      "rand "
+      "rande "
+      "randg "
+      "randi "
+      "randn "
+      "randp "
+      "randperm "
+      "range "
+      "rank "
+      "ranks "
+      "rat "
+      "rats "
+      "rcond "
+      "rdivide "
+      "re_read_readline_init_file "
+      "read_readline_init_file "
+      "readdir "
+      "readlink "
+      "real "
+      "reallog "
+      "realmax "
+      "realmin "
+      "realpow "
+      "realsqrt "
+      "record "
+      "rectangle "
+      "rectint "
+      "refresh "
+      "refreshdata "
+      "regexp "
+      "regexpi "
+      "regexprep "
+      "regexptranslate "
+      "rehash "
+      "rem "
+      "remove_input_event_hook "
+      "rename "
+      "repelems "
+      "replot "
+      "repmat "
+      "reset "
+      "reshape "
+      "residue "
+      "resize "
+      "restoredefaultpath "
+      "rethrow "
+      "return "
+      "rgb2hsv "
+      "rgb2ind "
+      "rgb2ntsc "
+      "ribbon "
+      "rindex "
+      "rmappdata "
+      "rmdir "
+      "rmfield "
+      "rmpath "
+      "roots "
+      "rose "
+      "rosser "
+      "rot90 "
+      "rotdim "
+      "round "
+      "roundb "
+      "rows "
+      "rref "
+      "rsf2csf "
+      "run "
+      "run_count "
+      "run_history "
+      "run_test "
+      "rundemos "
+      "runlength "
+      "runtests "
+      "save "
+      "save_header_format_string "
+      "save_precision "
+      "saveas "
+      "saveaudio "
+      "saveimage "
+      "saveobj "
+      "savepath "
+      "saving_history "
+      "scanf "
+      "scatter "
+      "scatter3 "
+      "schur "
+      "sec "
+      "secd "
+      "sech "
+      "semicolon "
+      "semilogx "
+      "semilogxerr "
+      "semilogy "
+      "semilogyerr "
+      "set "
+      "setappdata "
+      "setaudio "
+      "setdiff "
+      "setenv "
+      "setfield "
+      "setgrent "
+      "setpwent "
+      "setstr "
+      "setxor "
+      "shading "
+      "shell_cmd "
+      "shg "
+      "shift "
+      "shiftdim "
+      "sighup_dumps_octave_core "
+      "sign "
+      "sign_test "
+      "sigterm_dumps_octave_core "
+      "silent_functions "
+      "sin "
+      "sinc "
+      "sind "
+      "sinetone "
+      "sinewave "
+      "single "
+      "sinh "
+      "size "
+      "size_equal "
+      "sizemax "
+      "sizeof "
+      "skewness "
+      "sleep "
+      "slice "
+      "sombrero "
+      "sort "
+      "sortrows "
+      "source "
+      "spalloc "
+      "sparse "
+      "sparse_auto_mutate "
+      "spatan2 "
+      "spaugment "
+      "spchol "
+      "spchol2inv "
+      "spcholinv "
+      "spconvert "
+      "spcumprod "
+      "spcumsum "
+      "spdet "
+      "spdiag "
+      "spdiags "
+      "spearman "
+      "spectral_adf "
+      "spectral_xdf "
+      "specular "
+      "speed "
+      "spencer "
+      "speye "
+      "spfind "
+      "spfun "
+      "sph2cart "
+      "sphcat "
+      "sphere "
+      "spinmap "
+      "spinv "
+      "spkron "
+      "splchol "
+      "spline "
+      "split "
+      "split_long_rows "
+      "splu "
+      "spmax "
+      "spmin "
+      "spones "
+      "spparms "
+      "spprod "
+      "spqr "
+      "sprand "
+      "sprandn "
+      "sprandsym "
+      "sprank "
+      "spring "
+      "sprintf "
+      "spstats "
+      "spsum "
+      "spsumsq "
+      "spvcat "
+      "spy "
+      "sqp "
+      "sqrt "
+      "sqrtm "
+      "squeeze "
+      "sscanf "
+      "stairs "
+      "stat "
+      "static "
+      "statistics "
+      "std "
+      "stderr "
+      "stdin "
+      "stdnormal_cdf "
+      "stdnormal_inv "
+      "stdnormal_pdf "
+      "stdnormal_rnd "
+      "stdout "
+      "stem "
+      "stem3 "
+      "stft "
+      "str2double "
+      "str2func "
+      "str2mat "
+      "str2num "
+      "strcat "
+      "strchr "
+      "strcmp "
+      "strcmpi "
+      "strerror "
+      "strfind "
+      "strftime "
+      "string_fill_char "
+      "strjust "
+      "strmatch "
+      "strncmp "
+      "strncmpi "
+      "strptime "
+      "strread "
+      "strrep "
+      "strsplit "
+      "strtok "
+      "strtrim "
+      "strtrunc "
+      "struct "
+      "struct2cell "
+      "struct_levels_to_print "
+      "structfun "
+      "strvcat "
+      "studentize "
+      "sub2ind "
+      "subplot "
+      "subsasgn "
+      "subsindex "
+      "subspace "
+      "subsref "
+      "substr "
+      "substruct "
+      "sum "
+      "summer "
+      "sumsq "
+      "superiorto "
+      "suppress_verbose_help_message "
+      "surf "
+      "surface "
+      "surfc "
+      "surfl "
+      "surfnorm "
+      "svd "
+      "svd_driver "
+      "svds "
+      "swapbytes "
+      "switch "
+      "syl "
+      "sylvester_matrix "
+      "symamd "
+      "symbfact "
+      "symlink "
+      "symrcm "
+      "symvar "
+      "synthesis "
+      "system "
+      "t_test "
+      "t_test_2 "
+      "t_test_regression "
+      "table "
+      "tan "
+      "tand "
+      "tanh "
+      "tar "
+      "tcdf "
+      "tempdir "
+      "tempname "
+      "terminal_size "
+      "test "
+      "test2 "
+      "test3 "
+      "text "
+      "textread "
+      "textscan "
+      "tic "
+      "tilde_expand "
+      "time "
+      "times "
+      "tinv "
+      "title "
+      "tmpfile "
+      "tmpnam "
+      "toascii "
+      "toc "
+      "toeplitz "
+      "tolower "
+      "toupper "
+      "tpdf "
+      "trace "
+      "transpose "
+      "trapz "
+      "treelayout "
+      "treeplot "
+      "tril "
+      "trimesh "
+      "triplequad "
+      "triplot "
+      "trisurf "
+      "triu "
+      "trnd "
+      "true "
+      "try "
+      "tsearch "
+      "tsearchn "
+      "type "
+      "typecast "
+      "typeinfo "
+      "u_test "
+      "uigetdir "
+      "uigetfile "
+      "uimenu "
+      "uint16 "
+      "uint32 "
+      "uint64 "
+      "uint8 "
+      "uiputfile "
+      "umask "
+      "uminus "
+      "uname "
+      "undo_string_escapes "
+      "unidcdf "
+      "unidinv "
+      "unidpdf "
+      "unidrnd "
+      "unifcdf "
+      "unifinv "
+      "unifpdf "
+      "unifrnd "
+      "unimplemented "
+      "union "
+      "unique "
+      "unix "
+      "unlink "
+      "unmark_command "
+      "unmark_rawcommand "
+      "unmkpp "
+      "unpack "
+      "untabify "
+      "untar "
+      "until "
+      "unwind_protect "
+      "unwind_protect_cleanup "
+      "unwrap "
+      "unzip "
+      "uplus "
+      "upper "
+      "urlread "
+      "urlwrite "
+      "usage "
+      "usleep "
+      "validatestring "
+      "values "
+      "vander "
+      "var "
+      "var_test "
+      "varargin "
+      "varargout "
+      "vec "
+      "vech "
+      "vectorize "
+      "ver "
+      "version "
+      "vertcat "
+      "view "
+      "voronoi "
+      "voronoin "
+      "waitforbuttonpress "
+      "waitpid "
+      "warning "
+      "warning_ids "
+      "warranty "
+      "wavread "
+      "wavwrite "
+      "wblcdf "
+      "wblinv "
+      "wblpdf "
+      "wblrnd "
+      "weekday "
+      "weibcdf "
+      "weibinv "
+      "weibpdf "
+      "weibrnd "
+      "welch_test "
+      "what "
+      "which "
+      "while "
+      "white "
+      "whitebg "
+      "who "
+      "whos "
+      "whos_line_format "
+      "wienrnd "
+      "wilcoxon_test "
+      "wilkinson "
+      "winter "
+      "xlabel "
+      "xlim "
+      "xor "
+      "yes_or_no "
+      "ylabel "
+      "ylim "
+      "yulewalker "
+      "z_test "
+      "z_test_2 "
+      "zeros "
+      "zip "
+      "zlabel "
+      "zlim ";
+  /*            "break case catch continue do else elseif end end_unwind_protect "
+              "endfor endfunction endif endswitch endwhile for function "
+              "global if otherwise persistent return switch try until "
+              "unwind_protect unwind_protect_cleanup while";
+  */
+}
new file mode 100644
--- /dev/null
+++ b/gui/src/resource-manager.h
@@ -0,0 +1,106 @@
+/* OctaveGUI - A graphical user interface for Octave
+ * Copyright (C) 2011 Jacob Dawid (jacob.dawid@googlemail.com)
+ *
+ * This program 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.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef RESOURCEMANAGER_H
+#define RESOURCEMANAGER_H
+
+#include <QDesktopServices>
+#include <QIcon>
+#include <QMap>
+#include <QSettings>
+
+class resource_manager
+{
+protected:
+
+  resource_manager (void);
+
+public:
+
+  ~resource_manager ();
+
+  static QSettings *get_settings (void)
+  {
+    return instance_ok () ? instance->do_get_settings () : 0;
+  }
+
+  static QString get_home_path (void)
+  {
+    return instance_ok () ? instance->do_get_home_path () : QString ();
+  }
+
+  static void reload_settings (void)
+  {
+    if (instance_ok ())
+      instance->do_reload_settings ();
+  }
+
+  static void set_settings (QString file)
+  {
+    if (instance_ok ())
+      instance->do_set_settings (file);
+  }
+
+  static QString find_translator_file (QString language);
+
+  static void update_network_settings (void)
+  {
+    if (instance_ok ())
+      instance->do_update_network_settings ();
+  }
+
+  static bool is_first_run (void)
+  {
+    return instance_ok () ? instance->do_is_first_run () : true;
+  }
+
+  static const char *octave_keywords (void);
+
+private:
+
+  static resource_manager *instance;
+
+  static void cleanup_instance (void) { delete instance; instance = 0; }
+
+  // No copying!
+
+  resource_manager (const resource_manager&);
+
+  resource_manager& operator = (const resource_manager&);
+
+  static bool instance_ok (void);
+
+  QSettings *settings;
+
+  QString home_path;
+
+  bool first_run;
+
+  QSettings *do_get_settings (void);
+
+  QString do_get_home_path (void);
+
+  void do_reload_settings (void);
+
+  void do_set_settings (QString file);
+
+  void do_update_network_settings (void);
+
+  bool do_is_first_run (void);
+};
+
+#endif // RESOURCEMANAGER_H
new file mode 100644
--- /dev/null
+++ b/gui/src/resource.qrc
@@ -0,0 +1,40 @@
+<RCC>
+    <qresource prefix="/actions">
+        <file>icons/artsbuilderexecute.png</file>
+        <file>icons/editcopy.png</file>
+        <file>icons/editcut.png</file>
+        <file>icons/editpaste.png</file>
+        <file>icons/filenew.png</file>
+        <file>icons/fileopen.png</file>
+        <file>icons/filesave.png</file>
+        <file>icons/redo.png</file>
+        <file>icons/search.png</file>
+        <file>icons/undo.png</file>
+        <file>icons/up.png</file>
+        <file>icons/configure.png</file>
+        <file>icons/filesaveas.png</file>
+        <file>icons/redled.png</file>
+        <file>icons/arrow_right.png</file>
+        <file>icons/bookmark.png</file>
+        <file>icons/question.png</file>
+        <file>icons/star.png</file>
+        <file>icons/stop.png</file>
+        <file>icons/zoom-in.png</file>
+        <file>icons/zoom-out.png</file>
+        <file>icons/find.png</file>
+        <file>icons/chat.png</file>
+        <file>icons/help_index.png</file>
+        <file>icons/jabber_protocol.png</file>
+        <file>icons/logo.png</file>
+        <file>icons/terminal.png</file>
+        <file>icons/bp_toggle.png</file>
+        <file>icons/bp_rm_all.png</file>
+        <file>icons/bp_prev.png</file>
+        <file>icons/bp_next.png</file>
+        <file>icons/db_cont.png</file>
+        <file>icons/db_step.png</file>
+        <file>icons/db_step_in.png</file>
+        <file>icons/db_step_out.png</file>
+        <file>icons/db_stop.png</file>
+    </qresource>
+</RCC>
new file mode 100644
--- /dev/null
+++ b/gui/src/settings-dialog.cc
@@ -0,0 +1,121 @@
+/* OctaveGUI - A graphical user interface for Octave
+ * Copyright (C) 2011 Jacob Dawid (jacob.dawid@googlemail.com)
+ *
+ * This program 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.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "resource-manager.h"
+#include "settings-dialog.h"
+#include "ui-settings-dialog.h"
+#include <QSettings>
+
+settings_dialog::settings_dialog (QWidget * parent):
+QDialog (parent), ui (new Ui::settings_dialog)
+{
+  ui->setupUi (this);
+
+  QSettings *settings = resource_manager::get_settings ();
+
+  // FIXME -- what should happen if settings is 0?
+
+  ui->useCustomFileEditor->setChecked (settings->value ("useCustomFileEditor").toBool ());
+  ui->customFileEditor->setText (settings->value ("customFileEditor").toString ());
+  ui->editor_showLineNumbers->setChecked (settings->value ("editor/showLineNumbers",true).toBool () );
+  ui->editor_highlightCurrentLine->setChecked (settings->value ("editor/highlightCurrentLine",true).toBool () );
+  ui->editor_codeCompletion->setChecked (settings->value ("editor/codeCompletion",true).toBool () );
+  ui->editor_fontName->setCurrentFont (QFont (settings->value ("editor/fontName","Courier").toString()) );
+  ui->editor_fontSize->setValue (settings->value ("editor/fontSize",10).toInt ());
+  ui->editor_longWindowTitle->setChecked (settings->value ("editor/longWindowTitle",true).toBool ());
+  ui->terminal_fontName->setCurrentFont (QFont (settings->value ("terminal/fontName","Courier").toString()) );
+  ui->terminal_fontSize->setValue (settings->value ("terminal/fontSize",10).toInt ());
+  ui->showFilenames->setChecked (settings->value ("showFilenames").toBool());
+  ui->showFileSize->setChecked (settings->value ("showFileSize").toBool());
+  ui->showFileType->setChecked (settings->value ("showFileType").toBool());
+  ui->showLastModified->setChecked (settings->value ("showLastModified").toBool());
+  ui->showHiddenFiles->setChecked (settings->value ("showHiddenFiles").toBool());
+  ui->useAlternatingRowColors->setChecked (settings->value ("useAlternatingRowColors").toBool());
+  ui->useProxyServer->setChecked (settings->value ("useProxyServer").toBool ());
+  ui->proxyHostName->setText (settings->value ("proxyHostName").toString ());
+  ui->terminal_cursorBlinking->setChecked (settings->value ("terminal/cursorBlinking").toBool ());
+
+  QString cursorType = settings->value ("terminal/cursorType").toString ();
+
+  QStringList items;
+  items << QString("0") << QString("1") << QString("2");
+  ui->terminal_cursorType->addItems(items);
+  ui->terminal_cursorType->setItemText (0, "IBeam Cursor");
+  ui->terminal_cursorType->setItemText (1, "Block Cursor");
+  ui->terminal_cursorType->setItemText (2, "Underline Cursor");
+
+  if (cursorType == "ibeam")
+    ui->terminal_cursorType->setCurrentIndex (0);
+  else if (cursorType == "block")
+    ui->terminal_cursorType->setCurrentIndex (1);
+  else if (cursorType == "underline")
+    ui->terminal_cursorType->setCurrentIndex (2);
+
+  int currentIndex = 0;
+  QString proxyTypeString = settings->value ("proxyType").toString ();
+  while ( (currentIndex < ui->proxyType->count ()) && (ui->proxyType->currentText () != proxyTypeString))
+    {
+      currentIndex++;
+      ui->proxyType->setCurrentIndex (currentIndex);
+    }
+
+  ui->proxyPort->setText (settings->value ("proxyPort").toString ());
+  ui->proxyUserName->setText (settings->value ("proxyUserName").toString ());
+  ui->proxyPassword->setText (settings->value ("proxyPassword").toString ());
+}
+
+settings_dialog::~settings_dialog ()
+{
+  QSettings *settings = resource_manager::get_settings ();
+
+  // FIXME -- what should happen if settings is 0?
+
+  settings->setValue ("useCustomFileEditor", ui->useCustomFileEditor->isChecked ());
+  settings->setValue ("customFileEditor", ui->customFileEditor->text ());
+  settings->setValue ("editor/showLineNumbers", ui->editor_showLineNumbers->isChecked ());
+  settings->setValue ("editor/highlightCurrentLine", ui->editor_highlightCurrentLine->isChecked ());
+  settings->setValue ("editor/codeCompletion", ui->editor_codeCompletion->isChecked ());
+  settings->setValue ("editor/fontName", ui->editor_fontName->currentFont().family());
+  settings->setValue ("editor/fontSize", ui->editor_fontSize->value());
+  settings->setValue ("editor/longWindowTitle", ui->editor_longWindowTitle->isChecked());
+  settings->setValue ("terminal/fontSize", ui->terminal_fontSize->value());
+  settings->setValue ("terminal/fontName", ui->terminal_fontName->currentFont().family());
+  settings->setValue ("showFilenames", ui->showFilenames->isChecked ());
+  settings->setValue ("showFileSize", ui->showFileSize->isChecked ());
+  settings->setValue ("showFileType", ui->showFileType->isChecked ());
+  settings->setValue ("showLastModified", ui->showLastModified->isChecked ());
+  settings->setValue ("showHiddenFiles", ui->showHiddenFiles->isChecked ());
+  settings->setValue ("useAlternatingRowColors", ui->useAlternatingRowColors->isChecked ());
+  settings->setValue ("useProxyServer", ui->useProxyServer->isChecked ());
+  settings->setValue ("proxyType", ui->proxyType->currentText ());
+  settings->setValue ("proxyHostName", ui->proxyHostName->text ());
+  settings->setValue ("proxyPort", ui->proxyPort->text ());
+  settings->setValue ("proxyUserName", ui->proxyUserName->text ());
+  settings->setValue ("proxyPassword", ui->proxyPassword->text ());
+  settings->setValue ("terminal/cursorBlinking", ui->terminal_cursorBlinking->isChecked ());
+
+  QString cursorType;
+  switch (ui->terminal_cursorType->currentIndex ())
+    {
+    case 0: cursorType = "ibeam"; break;
+    case 1: cursorType = "block"; break;
+    case 2: cursorType = "underline";  break;
+    }
+  settings->setValue ("terminal/cursorType", cursorType);
+  settings->sync ();
+  delete ui;
+}
new file mode 100644
--- /dev/null
+++ b/gui/src/settings-dialog.h
@@ -0,0 +1,39 @@
+/* OctaveGUI - A graphical user interface for Octave
+ * Copyright (C) 2011 Jacob Dawid (jacob.dawid@googlemail.com)
+ *
+ * This program 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.
+ *
+ * This program 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.
+ *md5
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef SETTINGSDIALOG_H
+#define SETTINGSDIALOG_H
+
+#include <QDialog>
+
+namespace Ui
+{
+  class settings_dialog;
+}
+
+class settings_dialog:public QDialog
+{
+Q_OBJECT public:
+  explicit settings_dialog (QWidget * parent);
+  ~settings_dialog ();
+
+private:
+  Ui::settings_dialog * ui;
+};
+
+#endif // SETTINGSDIALOG_H
new file mode 100644
--- /dev/null
+++ b/gui/src/settings-dialog.ui
@@ -0,0 +1,719 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>settings_dialog</class>
+ <widget class="QDialog" name="settings_dialog">
+  <property name="windowModality">
+   <enum>Qt::ApplicationModal</enum>
+  </property>
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>600</width>
+    <height>400</height>
+   </rect>
+  </property>
+  <property name="minimumSize">
+   <size>
+    <width>600</width>
+    <height>400</height>
+   </size>
+  </property>
+  <property name="maximumSize">
+   <size>
+    <width>600</width>
+    <height>400</height>
+   </size>
+  </property>
+  <property name="windowTitle">
+   <string>Settings</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout_2">
+   <item>
+    <widget class="QTabWidget" name="tabWidget">
+     <property name="currentIndex">
+      <number>0</number>
+     </property>
+     <widget class="QWidget" name="tab">
+      <attribute name="title">
+       <string>Editor</string>
+      </attribute>
+      <layout class="QVBoxLayout" name="verticalLayout_6">
+       <item>
+        <layout class="QVBoxLayout" name="verticalLayout_5">
+         <item>
+          <layout class="QHBoxLayout" name="horizontalLayout_4">
+           <item>
+            <widget class="QLabel" name="label_8">
+             <property name="text">
+              <string>Font</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QFontComboBox" name="editor_fontName">
+             <property name="editable">
+              <bool>false</bool>
+             </property>
+             <property name="fontFilters">
+              <set>QFontComboBox::MonospacedFonts</set>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QLabel" name="label_9">
+             <property name="text">
+              <string>Font Size</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QSpinBox" name="editor_fontSize">
+             <property name="minimum">
+              <number>2</number>
+             </property>
+             <property name="maximum">
+              <number>96</number>
+             </property>
+             <property name="value">
+              <number>10</number>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <spacer name="horizontalSpacer_4">
+             <property name="orientation">
+              <enum>Qt::Horizontal</enum>
+             </property>
+             <property name="sizeHint" stdset="0">
+              <size>
+               <width>40</width>
+               <height>20</height>
+              </size>
+             </property>
+            </spacer>
+           </item>
+          </layout>
+         </item>
+         <item>
+          <widget class="QCheckBox" name="editor_showLineNumbers">
+           <property name="enabled">
+            <bool>true</bool>
+           </property>
+           <property name="text">
+            <string>Show line numbers</string>
+           </property>
+           <property name="checked">
+            <bool>false</bool>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QCheckBox" name="editor_highlightCurrentLine">
+           <property name="enabled">
+            <bool>true</bool>
+           </property>
+           <property name="text">
+            <string>Highlight current line</string>
+           </property>
+           <property name="checked">
+            <bool>false</bool>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QCheckBox" name="editor_codeCompletion">
+           <property name="enabled">
+            <bool>true</bool>
+           </property>
+           <property name="text">
+            <string>Code completion</string>
+           </property>
+           <property name="checked">
+            <bool>false</bool>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QCheckBox" name="editor_longWindowTitle">
+           <property name="text">
+            <string>Show complete path in window title</string>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </item>
+       <item>
+        <spacer name="verticalSpacer">
+         <property name="orientation">
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>20</width>
+           <height>40</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+       <item>
+        <layout class="QHBoxLayout" name="horizontalLayout">
+         <item>
+          <widget class="QCheckBox" name="useCustomFileEditor">
+           <property name="enabled">
+            <bool>true</bool>
+           </property>
+           <property name="text">
+            <string>Use custom file editor:</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QLineEdit" name="customFileEditor">
+           <property name="enabled">
+            <bool>false</bool>
+           </property>
+           <property name="text">
+            <string>emacs</string>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="tab_5">
+      <attribute name="title">
+       <string>Terminal</string>
+      </attribute>
+      <layout class="QVBoxLayout" name="verticalLayout">
+       <item>
+        <layout class="QHBoxLayout" name="horizontalLayout_5">
+         <item>
+          <widget class="QLabel" name="label_11">
+           <property name="text">
+            <string>Font</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QFontComboBox" name="terminal_fontName">
+           <property name="editable">
+            <bool>false</bool>
+           </property>
+           <property name="fontFilters">
+            <set>QFontComboBox::MonospacedFonts</set>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QLabel" name="label_12">
+           <property name="text">
+            <string>Font Size</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QSpinBox" name="terminal_fontSize">
+           <property name="minimum">
+            <number>2</number>
+           </property>
+           <property name="maximum">
+            <number>96</number>
+           </property>
+           <property name="value">
+            <number>10</number>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <spacer name="horizontalSpacer_5">
+           <property name="orientation">
+            <enum>Qt::Horizontal</enum>
+           </property>
+           <property name="sizeHint" stdset="0">
+            <size>
+             <width>40</width>
+             <height>20</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
+        </layout>
+       </item>
+       <item>
+        <layout class="QHBoxLayout" name="horizontalLayout_3">
+         <item>
+          <widget class="QLabel" name="label">
+           <property name="text">
+            <string>Cursor type:</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QComboBox" name="terminal_cursorType"/>
+         </item>
+         <item>
+          <spacer name="horizontalSpacer">
+           <property name="orientation">
+            <enum>Qt::Horizontal</enum>
+           </property>
+           <property name="sizeHint" stdset="0">
+            <size>
+             <width>40</width>
+             <height>20</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
+        </layout>
+       </item>
+       <item>
+        <layout class="QHBoxLayout" name="horizontalLayout_2">
+         <item>
+          <widget class="QCheckBox" name="terminal_cursorBlinking">
+           <property name="text">
+            <string>Cursor blinking</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <spacer name="horizontalSpacer_2">
+           <property name="orientation">
+            <enum>Qt::Horizontal</enum>
+           </property>
+           <property name="sizeHint" stdset="0">
+            <size>
+             <width>40</width>
+             <height>20</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
+        </layout>
+       </item>
+       <item>
+        <spacer name="verticalSpacer_3">
+         <property name="orientation">
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>20</width>
+           <height>321</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="tab_2">
+      <attribute name="title">
+       <string>File Browser</string>
+      </attribute>
+      <layout class="QVBoxLayout" name="verticalLayout_3">
+       <item>
+        <widget class="QCheckBox" name="showFilenames">
+         <property name="text">
+          <string>Show filenames</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QCheckBox" name="showFileSize">
+         <property name="text">
+          <string>Show file size</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QCheckBox" name="showFileType">
+         <property name="text">
+          <string>Show file type</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QCheckBox" name="showLastModified">
+         <property name="text">
+          <string>Show date of last modification</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QCheckBox" name="showHiddenFiles">
+         <property name="text">
+          <string>Show hidden files</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QCheckBox" name="useAlternatingRowColors">
+         <property name="text">
+          <string>Alternating row colors</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <spacer name="verticalSpacer_2">
+         <property name="orientation">
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>20</width>
+           <height>360</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="tab_3">
+      <attribute name="title">
+       <string>Network</string>
+      </attribute>
+      <layout class="QVBoxLayout" name="verticalLayout_4">
+       <item>
+        <widget class="QCheckBox" name="useProxyServer">
+         <property name="text">
+          <string>Use proxy server</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <layout class="QFormLayout" name="formLayout">
+         <item row="0" column="0">
+          <widget class="QLabel" name="label_3">
+           <property name="enabled">
+            <bool>false</bool>
+           </property>
+           <property name="text">
+            <string>Proxy Type:</string>
+           </property>
+          </widget>
+         </item>
+         <item row="0" column="1">
+          <widget class="QComboBox" name="proxyType">
+           <property name="enabled">
+            <bool>false</bool>
+           </property>
+           <item>
+            <property name="text">
+             <string>HttpProxy</string>
+            </property>
+           </item>
+           <item>
+            <property name="text">
+             <string>Socks5Proxy</string>
+            </property>
+           </item>
+          </widget>
+         </item>
+         <item row="1" column="0">
+          <widget class="QLabel" name="label_4">
+           <property name="enabled">
+            <bool>false</bool>
+           </property>
+           <property name="text">
+            <string>Hostname:</string>
+           </property>
+          </widget>
+         </item>
+         <item row="1" column="1">
+          <widget class="QLineEdit" name="proxyHostName">
+           <property name="enabled">
+            <bool>false</bool>
+           </property>
+          </widget>
+         </item>
+         <item row="2" column="0">
+          <widget class="QLabel" name="label_5">
+           <property name="enabled">
+            <bool>false</bool>
+           </property>
+           <property name="text">
+            <string>Port:</string>
+           </property>
+          </widget>
+         </item>
+         <item row="2" column="1">
+          <widget class="QLineEdit" name="proxyPort">
+           <property name="enabled">
+            <bool>false</bool>
+           </property>
+          </widget>
+         </item>
+         <item row="3" column="0">
+          <widget class="QLabel" name="label_6">
+           <property name="enabled">
+            <bool>false</bool>
+           </property>
+           <property name="text">
+            <string>Username:</string>
+           </property>
+          </widget>
+         </item>
+         <item row="3" column="1">
+          <widget class="QLineEdit" name="proxyUserName">
+           <property name="enabled">
+            <bool>false</bool>
+           </property>
+          </widget>
+         </item>
+         <item row="4" column="0">
+          <widget class="QLabel" name="label_7">
+           <property name="enabled">
+            <bool>false</bool>
+           </property>
+           <property name="text">
+            <string>Password:</string>
+           </property>
+          </widget>
+         </item>
+         <item row="4" column="1">
+          <widget class="QLineEdit" name="proxyPassword">
+           <property name="enabled">
+            <bool>false</bool>
+           </property>
+           <property name="echoMode">
+            <enum>QLineEdit::Password</enum>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </item>
+      </layout>
+     </widget>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>useProxyServer</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>label_4</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>249</x>
+     <y>59</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>69</x>
+     <y>122</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>useProxyServer</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>label_3</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>249</x>
+     <y>59</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>59</x>
+     <y>91</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>useProxyServer</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>label_5</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>249</x>
+     <y>59</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>44</x>
+     <y>152</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>useProxyServer</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>proxyType</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>249</x>
+     <y>59</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>291</x>
+     <y>91</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>useProxyServer</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>proxyHostName</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>249</x>
+     <y>59</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>291</x>
+     <y>124</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>useProxyServer</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>proxyPort</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>249</x>
+     <y>59</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>364</x>
+     <y>154</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>useCustomFileEditor</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>customFileEditor</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>111</x>
+     <y>62</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>343</x>
+     <y>63</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>useProxyServer</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>label_7</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>249</x>
+     <y>59</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>67</x>
+     <y>212</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>editor_showLineNumbers</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>editor_showLineNumbers</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>249</x>
+     <y>87</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>249</x>
+     <y>87</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>editor_highlightCurrentLine</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>editor_highlightCurrentLine</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>249</x>
+     <y>112</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>249</x>
+     <y>112</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>useProxyServer</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>proxyUserName</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>249</x>
+     <y>59</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>364</x>
+     <y>184</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>useProxyServer</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>proxyPassword</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>249</x>
+     <y>59</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>364</x>
+     <y>214</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>useProxyServer</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>label_6</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>249</x>
+     <y>59</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>68</x>
+     <y>182</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>editor_codeCompletion</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>editor_codeCompletion</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>249</x>
+     <y>137</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>249</x>
+     <y>137</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
new file mode 100644
--- /dev/null
+++ b/gui/src/src.pro
@@ -0,0 +1,139 @@
+# OctaveGUI - A graphical user interface for Octave
+# Copyright (C) 2011 Jacob Dawid (jacob.dawid@googlemail.com)
+#
+# This program 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.
+#
+# This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Basic settings:
+QT                  += core gui webkit network	    # Qt modules
+TEMPLATE            = app                           # Build as application
+TARGET              = octave-gui                    # Name of the target binary
+
+DESTDIR             = ../bin                           # Destination of the output
+
+TRANSLATIONS        += languages/generic.ts \
+                       languages/de-de.ts \
+                       languages/pt-br.ts \
+                       languages/es-es.ts \
+                       languages/ru-ru.ts \
+                       languages/uk-ua.ts           # Available translations
+
+win32-msvc*: include(msvc.pri)
+
+LIBS                += -lreadline -lqscintilla2  \
+                       -L../qterminal/libqterminal/$$LIBDIR_SUFFIX -lqterminal -lm \
+                       -L../../libcruft/.libs -lcruft \
+                       -L../../liboctave/.libs -loctave \
+                       -L../../src/.libs -loctinterp
+
+mac {
+    CONFIG -= app_bundle
+}
+
+# Includepaths and libraries to link against:
+INCLUDEPATH         += . \
+                       octave-adapter \
+                       m-editor \
+                       qtinfo \
+                       ../qterminal/libqterminal \
+                       /usr/include/qt4 \
+                       ../.. \
+                       ../../src \
+                       ../../src/interpfcn \
+                       ../../src/interp-core \
+                       ../../src/octave-value \
+                       ../../src/parse-tree \
+                       ../../src/operators \
+                       ../../liboctave \
+                       ../../libcruft/misc
+
+#QMAKE_LIBDIR        += $$system(octave-config -p OCTLIBDIR)
+#unix {
+#    QMAKE_RPATHDIR += $$system(octave-config -p OCTLIBDIR)
+#}
+
+mac {
+    LFLAGS += -L/opt/local/lib
+}
+
+unix {
+    LIBS += -lutil
+}
+
+win32-g++ {
+    QMAKE_LFLAGS += --enable-auto-import
+}
+
+win32-msvc* {
+    DEFINES += QSCINTILLA_DLL
+    QMAKE_CXXFLAGS += -wd4244
+}
+
+QMAKE_LFLAGS        += $$LFLAGS
+QMAKE_CXXFLAGS      += $$INCFLAGS
+
+# Files associated with the project:
+SOURCES +=\
+    octave-adapter/octave-link.cc \
+    octave-adapter/octave-main-thread.cc \
+    m-editor/lexer-octave-gui.cc \
+    m-editor/file-editor.cc \
+    m-editor/file-editor-tab.cc \
+    m-editor/find-dialog.cc \
+    qtinfo/parser.cc \
+    qtinfo/webinfo.cc \
+    main-window.cc \
+    workspace-view.cc \
+    history-dockwidget.cc \
+    files-dockwidget.cc \
+    settings-dialog.cc \
+    octave-gui.cc \
+    resource-manager.cc \
+    welcome-wizard.cc \
+    workspace-model.cc \
+    terminal-dockwidget.cc \
+    octave-qt-event-listener.cc \
+    documentation-dockwidget.cc
+
+HEADERS += \
+    octave-adapter/octave-link.h \
+    octave-adapter/octave-main-thread.h \
+    octave-adapter/octave-event.h \
+    octave-adapter/octave-event-observer.h \
+    octave-adapter/octave-event-listener.h \
+    m-editor/lexer-octave-gui.h \
+    m-editor/file-editor.h \
+    m-editor/file-editor-interface.h \
+    m-editor/file-editor-tab.h \
+    m-editor/find-dialog.h \
+    qtinfo/parser.h \
+    qtinfo/webinfo.h \
+    symbol-information.h \
+    main-window.h \
+    workspace-view.h \
+    history-dockwidget.h \
+    files-dockwidget.h \
+    settings-dialog.h \
+    resource-manager.h \
+    welcome-wizard.h \
+    workspace-model.h \
+    terminal-dockwidget.h \
+    octave-qt-event-listener.h \
+    documentation-dockwidget.h
+
+FORMS += \
+    settings-dialog.ui \
+    welcome-wizard.ui
+
+RESOURCES += \
+    resource.qrc
new file mode 100644
--- /dev/null
+++ b/gui/src/symbol-information.cc
@@ -0,0 +1,100 @@
+/* OctaveGUI - A graphical user interface for Octave
+ * Copyright (C) 2011 Jacob Dawid (jacob.dawid@googlemail.com)
+ *
+ * This program 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.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <QString>
+
+#include "ov.h"
+#include "symtab.h"
+
+#include "symbol-information.h"
+
+bool
+symbol_information::from_symbol_record
+  (const symbol_table::symbol_record& symbol_record)
+{
+  if (symbol_record.is_local () && !symbol_record.is_global () && !symbol_record.is_hidden ())
+    _scope = local;
+  else if (symbol_record.is_global ())
+    _scope = global;
+  else if (symbol_record.is_persistent ())
+    _scope = persistent;
+  else if (symbol_record.is_hidden ())
+    _scope = hidden;
+
+  _symbol = QString (symbol_record.name ().c_str ());
+  _type   = QString (symbol_record.varval ().type_name ().c_str ());
+  octave_value ov = symbol_record.varval ();
+
+  // In case we have really large matrices or strings, cut them down
+  // for performance reasons.
+  QString short_value_string;
+  bool use_short_value_string = false;
+  if (ov.is_matrix_type () || ov.is_cell ())
+    {
+      if (ov.rows () * ov.columns () > 10)
+        {
+          use_short_value_string = true;
+          short_value_string
+            = QString ("%1x%2 items").arg (ov.rows ()).arg (ov.columns ());
+        }
+    }
+  else if (ov.is_string ())
+    {
+      if (ov.string_value ().length () > 40)
+        {
+          use_short_value_string = true;
+          short_value_string
+            = QString::fromStdString (ov.string_value ().substr (0, 40));
+        }
+    }
+
+  if (use_short_value_string)
+    {
+      _value = short_value_string;
+    }
+  else
+    {
+      std::stringstream buffer;
+      ov.print (buffer, true);
+      _value  = QString::fromStdString (buffer.str ());
+    }
+  _value.replace("\n", " ");
+
+  if (ov.is_string ())
+    _dimension = QString ("%1").arg (ov.string_value ().length ());
+  else if (ov.is_range ())
+    _dimension =  QString ("%1 : %2 : %3").arg (ov.range_value ().base ())
+      .arg (ov.range_value ().inc ())
+      .arg (ov.range_value ().limit ());
+  else if (ov.is_matrix_type () || ov.is_cell ())
+    _dimension = QString ("%1x%2").arg (ov.rows ())
+      .arg (ov.columns ());
+  else if (ov.is_function_handle ())
+    // See code for func2str for a possible solution
+    _dimension = QString ("func handle");
+  else if (ov.is_inline_function ())
+    // See code for formula for a possible solution
+    _dimension = QString ("inline func");
+  else
+    _dimension = "1";
+
+  return true;
+}
new file mode 100644
--- /dev/null
+++ b/gui/src/symbol-information.h
@@ -0,0 +1,86 @@
+/* OctaveGUI - A graphical user interface for Octave
+ * Copyright (C) 2011 Jacob Dawid (jacob.dawid@googlemail.com)
+ *
+ * This program 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.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef SYMBOLINFORMATION_H
+#define SYMBOLINFORMATION_H
+
+// FIXME -- we should not be including config.h in header files.
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <QString>
+#include <QHash>
+
+#include <sstream>
+
+#include "symtab.h"
+
+/**
+  * \struct symbol_information
+  * \brief Meta-information over a symbol-table entry.
+  * \author Jacob Dawid
+  * This struct is used to store meta information over a symbol entry.
+  * It reduces memory consumption, since it only stores relevant data
+  * about a symbol-table entry that will be used in the model for the
+  * graphical user interface.
+  */
+struct symbol_information
+{
+  enum Scope
+  {
+    local       = 0,
+    global      = 1,
+    persistent  = 2,
+    hidden      = 3
+  };
+
+  QString _symbol;
+  QString _type;
+  QString _value;
+  QString _dimension;
+  Scope   _scope;
+
+  /** Hashes the symbol information for quickly comparing it. */
+  int
+  hash () const
+  {
+    return qHash (_symbol) + qHash (_type) + qHash (_value)
+      + qHash (_dimension) + (int)_scope;
+  }
+
+  /** Compares two symbol information objects. */
+  bool
+  equals (const symbol_information& other) const
+  {
+    if (hash () == other.hash ())
+      {
+        return _symbol == other._symbol
+            && _type   == other._type
+            && _value  == other._value
+            && _scope  == other._scope
+            && _dimension == other._dimension;
+      }
+  }
+
+  /** Extracts meta information from a given symbol record. */
+  bool
+  from_symbol_record (const symbol_table::symbol_record& symbol_record);
+};
+
+#endif // SYMBOLINFORMATION_H
new file mode 100644
--- /dev/null
+++ b/gui/src/terminal-dockwidget.cc
@@ -0,0 +1,28 @@
+/* OctaveGUI - A graphical user interface for Octave
+ * Copyright (C) 2011 Jacob Dawid (jacob.dawid@googlemail.com)
+ *
+ * This program 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.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "terminal-dockwidget.h"
+
+terminal_dock_widget::terminal_dock_widget (QTerminal *terminal, QWidget *parent)
+  : QDockWidget (parent)
+{
+  setObjectName ("TerminalDockWidget");
+  setWindowTitle (tr ("Command Window"));
+  setWidget (terminal);
+
+  connect (this, SIGNAL (visibilityChanged (bool)), this, SLOT (handle_visibility_changed (bool)));
+}
new file mode 100644
--- /dev/null
+++ b/gui/src/terminal-dockwidget.h
@@ -0,0 +1,41 @@
+/* OctaveGUI - A graphical user interface for Octave
+ * Copyright (C) 2011 Jacob Dawid (jacob.dawid@googlemail.com)
+ *
+ * This program 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.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef TERMINALDOCKWIDGET_H
+#define TERMINALDOCKWIDGET_H
+
+#include <QDockWidget>
+#include "QTerminal.h"
+
+class terminal_dock_widget : public QDockWidget
+{
+  Q_OBJECT
+public:
+  terminal_dock_widget (QTerminal *terminal, QWidget *parent = 0);
+
+signals:
+    void active_changed (bool active);
+
+public slots:
+    void handle_visibility_changed (bool visible)
+    {
+      if (visible)
+        emit active_changed (true);
+    }
+};
+
+#endif // TERMINALDOCKWIDGET_H
new file mode 100644
--- /dev/null
+++ b/gui/src/welcome-wizard.cc
@@ -0,0 +1,53 @@
+/* OctaveGUI - A graphical user interface for Octave
+ * Copyright (C) 2011 Jacob Dawid (jacob.dawid@googlemail.com)
+ *
+ * This program 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.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "welcome-wizard.h"
+#include "ui-welcome-wizard.h"
+
+welcome_wizard::welcome_wizard (QWidget *parent) :
+  QDialog (parent),
+  _ui (new Ui::welcome_wizard)
+{
+  _ui->setupUi (this);
+  connect (_ui->nextButton1, SIGNAL (clicked ()), this, SLOT (next ()));
+  connect (_ui->nextButton2, SIGNAL (clicked ()), this, SLOT (next ()));
+  connect (_ui->nextButton3, SIGNAL (clicked ()), this, SLOT (next ()));
+  connect (_ui->nextButton4, SIGNAL (clicked ()), this, SLOT (next ()));
+
+  connect (_ui->previousButton2, SIGNAL (clicked ()), this, SLOT (previous ()));
+  connect (_ui->previousButton3, SIGNAL (clicked ()), this, SLOT (previous ()));
+  connect (_ui->previousButton4, SIGNAL (clicked ()), this, SLOT (previous ()));
+  connect (_ui->previousButton5, SIGNAL (clicked ()), this, SLOT (previous ()));
+}
+
+welcome_wizard::~welcome_wizard()
+{
+  delete _ui;
+}
+
+void
+welcome_wizard::next ()
+{
+  _ui->stackedWidget->setCurrentIndex (_ui->stackedWidget->currentIndex () + 1);
+}
+
+void
+welcome_wizard::previous ()
+{
+  _ui->stackedWidget->setCurrentIndex (_ui->stackedWidget->currentIndex () - 1);
+}
+
new file mode 100644
--- /dev/null
+++ b/gui/src/welcome-wizard.h
@@ -0,0 +1,43 @@
+/* OctaveGUI - A graphical user interface for Octave
+ * Copyright (C) 2011 Jacob Dawid (jacob.dawid@googlemail.com)
+ *
+ * This program 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.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef WELCOMEWIZARD_H
+#define WELCOMEWIZARD_H
+
+#include <QDialog>
+
+namespace Ui {
+    class welcome_wizard;
+}
+
+class welcome_wizard : public QDialog
+{
+  Q_OBJECT
+
+public:
+  explicit welcome_wizard (QWidget *parent = 0);
+  ~welcome_wizard ();
+
+public slots:
+  void next ();
+  void previous ();
+
+private:
+  Ui::welcome_wizard *_ui;
+};
+
+#endif // WELCOMEWIZARD_H
new file mode 100644
--- /dev/null
+++ b/gui/src/welcome-wizard.ui
@@ -0,0 +1,354 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>welcome_wizard</class>
+ <widget class="QDialog" name="welcome_wizard">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>647</width>
+    <height>400</height>
+   </rect>
+  </property>
+  <property name="minimumSize">
+   <size>
+    <width>647</width>
+    <height>400</height>
+   </size>
+  </property>
+  <property name="maximumSize">
+   <size>
+    <width>647</width>
+    <height>400</height>
+   </size>
+  </property>
+  <property name="windowTitle">
+   <string>Welcome to GNU Octave</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout_2">
+   <item>
+    <widget class="QStackedWidget" name="stackedWidget">
+     <property name="currentIndex">
+      <number>4</number>
+     </property>
+     <widget class="QWidget" name="page">
+      <layout class="QVBoxLayout" name="verticalLayout">
+       <item>
+        <widget class="QLabel" name="label">
+         <property name="text">
+          <string>It appears that you have launched Octave GUI for the first time on this computer, since no configuration file could be found at '~/.octave-gui'. This wizard will guide you through the essential settings you should make before you can start using Octave GUI. If you want to transfer your settings you have previously made just close this dialog and copy over the settings file to your home folder. The presence of that file will automatically be detected and will skip this wizard. IMPORTANT: This wizard is not fully functional yet. Just click your way to the end and it will create a standard settings file.</string>
+         </property>
+         <property name="alignment">
+          <set>Qt::AlignJustify|Qt::AlignVCenter</set>
+         </property>
+         <property name="wordWrap">
+          <bool>true</bool>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <spacer name="verticalSpacer">
+         <property name="orientation">
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>20</width>
+           <height>218</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+       <item>
+        <layout class="QHBoxLayout" name="horizontalLayout_2">
+         <item>
+          <spacer name="horizontalSpacer">
+           <property name="orientation">
+            <enum>Qt::Horizontal</enum>
+           </property>
+           <property name="sizeHint" stdset="0">
+            <size>
+             <width>40</width>
+             <height>20</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
+         <item>
+          <widget class="QPushButton" name="nextButton1">
+           <property name="text">
+            <string>Next</string>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="page_2">
+      <layout class="QVBoxLayout" name="verticalLayout_4">
+       <item>
+        <layout class="QVBoxLayout" name="verticalLayout_3">
+         <item>
+          <spacer name="verticalSpacer_2">
+           <property name="orientation">
+            <enum>Qt::Vertical</enum>
+           </property>
+           <property name="sizeHint" stdset="0">
+            <size>
+             <width>20</width>
+             <height>40</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
+         <item>
+          <layout class="QHBoxLayout" name="horizontalLayout">
+           <item>
+            <widget class="QPushButton" name="previousButton2">
+             <property name="text">
+              <string>Previous</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <spacer name="horizontalSpacer_2">
+             <property name="orientation">
+              <enum>Qt::Horizontal</enum>
+             </property>
+             <property name="sizeHint" stdset="0">
+              <size>
+               <width>40</width>
+               <height>20</height>
+              </size>
+             </property>
+            </spacer>
+           </item>
+           <item>
+            <widget class="QPushButton" name="nextButton2">
+             <property name="text">
+              <string>Next</string>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+        </layout>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="page_3">
+      <layout class="QHBoxLayout" name="horizontalLayout_4">
+       <item>
+        <layout class="QVBoxLayout" name="verticalLayout_5">
+         <item>
+          <spacer name="verticalSpacer_3">
+           <property name="orientation">
+            <enum>Qt::Vertical</enum>
+           </property>
+           <property name="sizeHint" stdset="0">
+            <size>
+             <width>20</width>
+             <height>40</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
+         <item>
+          <layout class="QHBoxLayout" name="horizontalLayout_3">
+           <item>
+            <widget class="QPushButton" name="previousButton3">
+             <property name="text">
+              <string>Previous</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <spacer name="horizontalSpacer_3">
+             <property name="orientation">
+              <enum>Qt::Horizontal</enum>
+             </property>
+             <property name="sizeHint" stdset="0">
+              <size>
+               <width>40</width>
+               <height>20</height>
+              </size>
+             </property>
+            </spacer>
+           </item>
+           <item>
+            <widget class="QPushButton" name="nextButton3">
+             <property name="text">
+              <string>Next</string>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+        </layout>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="page_4">
+      <layout class="QHBoxLayout" name="horizontalLayout_6">
+       <item>
+        <layout class="QVBoxLayout" name="verticalLayout_6">
+         <item>
+          <spacer name="verticalSpacer_4">
+           <property name="orientation">
+            <enum>Qt::Vertical</enum>
+           </property>
+           <property name="sizeHint" stdset="0">
+            <size>
+             <width>20</width>
+             <height>40</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
+         <item>
+          <layout class="QHBoxLayout" name="horizontalLayout_5">
+           <item>
+            <widget class="QPushButton" name="previousButton4">
+             <property name="text">
+              <string>Previous</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <spacer name="horizontalSpacer_4">
+             <property name="orientation">
+              <enum>Qt::Horizontal</enum>
+             </property>
+             <property name="sizeHint" stdset="0">
+              <size>
+               <width>40</width>
+               <height>20</height>
+              </size>
+             </property>
+            </spacer>
+           </item>
+           <item>
+            <widget class="QPushButton" name="nextButton4">
+             <property name="text">
+              <string>Next</string>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+        </layout>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="page_5">
+      <layout class="QHBoxLayout" name="horizontalLayout_8">
+       <item>
+        <layout class="QVBoxLayout" name="verticalLayout_7">
+         <item>
+          <widget class="QLabel" name="label_2">
+           <property name="font">
+            <font>
+             <pointsize>20</pointsize>
+            </font>
+           </property>
+           <property name="text">
+            <string>Welcome to Octave!</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QLabel" name="label_3">
+           <property name="text">
+            <string>This is the development version of Octave with the first official GUI.</string>
+           </property>
+           <property name="wordWrap">
+            <bool>true</bool>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QLabel" name="label_4">
+           <property name="text">
+            <string>You seem to run Octave GUI for the first time on this computer. This assistant will help you to configure this software installation. Click 'Finish' to write a configuration file and launch Octave GUI.</string>
+           </property>
+           <property name="wordWrap">
+            <bool>true</bool>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <spacer name="verticalSpacer_5">
+           <property name="orientation">
+            <enum>Qt::Vertical</enum>
+           </property>
+           <property name="sizeHint" stdset="0">
+            <size>
+             <width>20</width>
+             <height>40</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
+         <item>
+          <layout class="QHBoxLayout" name="horizontalLayout_7">
+           <item>
+            <widget class="QPushButton" name="previousButton5">
+             <property name="enabled">
+              <bool>false</bool>
+             </property>
+             <property name="text">
+              <string>Previous</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <spacer name="horizontalSpacer_5">
+             <property name="orientation">
+              <enum>Qt::Horizontal</enum>
+             </property>
+             <property name="sizeHint" stdset="0">
+              <size>
+               <width>40</width>
+               <height>20</height>
+              </size>
+             </property>
+            </spacer>
+           </item>
+           <item>
+            <widget class="QPushButton" name="finishButton">
+             <property name="text">
+              <string>Finish</string>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+        </layout>
+       </item>
+      </layout>
+     </widget>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>finishButton</sender>
+   <signal>clicked()</signal>
+   <receiver>welcome_wizard</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>577</x>
+     <y>372</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>323</x>
+     <y>199</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
new file mode 100644
--- /dev/null
+++ b/gui/src/workspace-model.cc
@@ -0,0 +1,224 @@
+/* OctaveGUI - A graphical user interface for Octave
+ * Copyright (C) 2011 Jacob Dawid (jacob.dawid@googlemail.com)
+ *
+ * This program 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.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <QTreeWidget>
+#include <QTime>
+
+#include <list>
+
+#include <symtab.h>
+
+#include "workspace-model.h"
+#include "octave-link.h"
+
+workspace_model::workspace_model(QObject *parent)
+  : QAbstractItemModel(parent), octave_event_observer ()
+{
+  QList<QVariant> rootData;
+  rootData << tr ("Name") << tr ("Type") << tr("Dimension") << tr ("Value");
+  _rootItem = new tree_item(rootData);
+
+  insert_top_level_item(0, new tree_item ("Local"));
+  insert_top_level_item(1, new tree_item ("Global"));
+  insert_top_level_item(2, new tree_item ("Persistent"));
+  insert_top_level_item(3, new tree_item ("Hidden"));
+
+  connect(&_update_workspace_model_timer,
+          SIGNAL (timeout ()),
+          this,
+          SLOT (request_update_workspace()));
+
+  _update_workspace_model_timer.setInterval (500);
+  _update_workspace_model_timer.setSingleShot (true);
+  _update_workspace_model_timer.start ();
+}
+
+workspace_model::~workspace_model()
+{
+  delete _rootItem;
+}
+
+void
+workspace_model::request_update_workspace ()
+{
+  octave_link::instance ()
+      ->post_event (new octave_update_workspace_event (*this));
+}
+
+void
+workspace_model::event_accepted (octave_event *e)
+{
+  if (dynamic_cast <octave_update_workspace_event*> (e))
+    {
+      std::list < symbol_table::symbol_record > symbolTable = symbol_table::all_variables ();
+
+      _symbol_information.clear ();
+      for (std::list < symbol_table::symbol_record > ::iterator iterator = symbolTable.begin ();
+         iterator != symbolTable.end (); iterator++)
+      {
+        symbol_information symbolInformation;
+        symbolInformation.from_symbol_record (*iterator);
+        _symbol_information.push_back (symbolInformation);
+      }
+
+      beginResetModel();
+      top_level_item (0)->delete_child_items ();
+      top_level_item (1)->delete_child_items ();
+      top_level_item (2)->delete_child_items ();
+      top_level_item (3)->delete_child_items ();
+
+      foreach (const symbol_information& s, _symbol_information)
+        {
+          tree_item *child = new tree_item ();
+
+          child->set_data (0, s._symbol);
+          child->set_data (1, s._type);
+          child->set_data (2, s._dimension);
+          child->set_data (3, s._value);
+
+          switch (s._scope)
+            {
+              case symbol_information::local:       top_level_item (0)->add_child (child); break;
+              case symbol_information::global:      top_level_item (1)->add_child (child); break;
+              case symbol_information::persistent:  top_level_item (2)->add_child (child); break;
+              case symbol_information::hidden:      top_level_item (3)->add_child (child); break;
+            }
+        }
+
+      endResetModel();
+      emit model_changed();
+    }
+
+  // Post a new event in a given time.
+  // This prevents flooding the event queue when no events are being processed.
+  _update_workspace_model_timer.start ();
+  delete e;
+}
+
+void
+workspace_model::event_reject (octave_event *e)
+{
+  delete e;
+}
+
+QModelIndex
+workspace_model::index(int row, int column, const QModelIndex &parent) const
+{
+  if (!hasIndex(row, column, parent))
+    return QModelIndex();
+
+  tree_item *parentItem;
+
+  if (!parent.isValid())
+    parentItem = _rootItem;
+  else
+    parentItem = static_cast<tree_item*>(parent.internalPointer());
+
+  tree_item *childItem = parentItem->child(row);
+  if (childItem)
+    return createIndex(row, column, childItem);
+  else
+    return QModelIndex();
+}
+
+QModelIndex
+workspace_model::parent(const QModelIndex &index) const
+{
+  if (!index.isValid())
+    return QModelIndex();
+
+  tree_item *childItem = static_cast<tree_item*>(index.internalPointer());
+  tree_item *parentItem = childItem->parent();
+
+  if (parentItem == _rootItem)
+    return QModelIndex();
+
+  return createIndex(parentItem->row(), 0, parentItem);
+}
+
+int
+workspace_model::rowCount(const QModelIndex &parent) const
+{
+  tree_item *parentItem;
+  if (parent.column() > 0)
+    return 0;
+
+  if (!parent.isValid())
+    parentItem = _rootItem;
+  else
+    parentItem = static_cast<tree_item*>(parent.internalPointer());
+
+  return parentItem->child_count();
+}
+
+int
+workspace_model::columnCount(const QModelIndex &parent) const
+{
+  if (parent.isValid())
+    return static_cast<tree_item*>(parent.internalPointer())->column_count();
+  else
+    return _rootItem->column_count();
+}
+
+void
+workspace_model::insert_top_level_item(int at, tree_item *treeItem)
+{
+  _rootItem->insert_child_item(at, treeItem);
+}
+
+tree_item *
+workspace_model::top_level_item (int at)
+{
+  return _rootItem->child(at);
+}
+
+Qt::ItemFlags
+workspace_model::flags(const QModelIndex &index) const
+{
+  if (!index.isValid())
+    return 0;
+
+  return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
+}
+
+QVariant
+workspace_model::headerData(int section, Qt::Orientation orientation, int role) const
+{
+  if (orientation == Qt::Horizontal && role == Qt::DisplayRole)
+    return _rootItem->data(section);
+
+  return QVariant();
+}
+
+QVariant
+workspace_model::data(const QModelIndex &index, int role) const
+{
+  if (!index.isValid())
+    return QVariant();
+
+  if (role != Qt::DisplayRole)
+    return QVariant();
+
+  tree_item *item = static_cast<tree_item*>(index.internalPointer());
+
+  return item->data(index.column());
+}
+
new file mode 100644
--- /dev/null
+++ b/gui/src/workspace-model.h
@@ -0,0 +1,150 @@
+/* OctaveGUI - A graphical user interface for Octave
+ * Copyright (C) 2011 Jacob Dawid (jacob.dawid@googlemail.com)
+ *
+ * This program 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.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef WORKSPACEMODEL_H
+#define WORKSPACEMODEL_H
+
+// Qt includes
+#include <QAbstractItemModel>
+#include <QVector>
+#include <QSemaphore>
+#include <QTimer>
+
+#include "symbol-information.h"
+#include "octave-event-observer.h"
+
+class tree_item
+{
+public:
+  tree_item (const QList<QVariant> &data, tree_item *parent = 0) {
+    _parent_item = parent;
+    _item_data = data;
+  }
+
+  tree_item (QVariant data = QVariant(), tree_item *parent = 0) {
+    QList<QVariant> variantList;
+    variantList << data << QVariant () << QVariant () << QVariant ();
+    _parent_item = parent;
+    _item_data = variantList;
+  }
+
+  ~tree_item () {
+     qDeleteAll (_child_items);
+  }
+
+  void insert_child_item (int at, tree_item *item) {
+    item->_parent_item = this;
+    _child_items.insert (at, item);
+  }
+
+  void add_child (tree_item *item) {
+    item->_parent_item = this;
+    _child_items.append (item);
+  }
+
+  void delete_child_items () {
+      qDeleteAll (_child_items);
+      _child_items.clear ();
+  }
+
+  void remove_child (tree_item *item) {
+    _child_items.removeAll (item);
+  }
+
+  QVariant data (int column) const
+  {
+    return _item_data[column];
+  }
+
+  void set_data (int column, QVariant data)
+  {
+    _item_data[column] = data;
+  }
+
+  tree_item *child (int row) {
+    return _child_items[row];
+  }
+
+  int child_count () const {
+    return _child_items.count();
+  }
+
+  int column_count () const
+  {
+    return _item_data.count();
+  }
+
+  int row () const {
+    if (_parent_item)
+      return _parent_item->_child_items.indexOf (const_cast<tree_item*>(this));
+
+    return 0;
+  }
+
+  tree_item *parent ()
+  {
+    return _parent_item;
+  }
+
+private:
+  QList<tree_item*> _child_items;
+  QList<QVariant> _item_data;
+  tree_item *_parent_item;
+};
+
+class workspace_model
+    : public QAbstractItemModel, public octave_event_observer
+{
+  Q_OBJECT
+
+public:
+  workspace_model (QObject *parent = 0);
+  ~workspace_model ();
+
+  void event_accepted (octave_event *e);
+  void event_reject (octave_event *e);
+
+  QVariant data (const QModelIndex &index, int role) const;
+  Qt::ItemFlags flags (const QModelIndex &index) const;
+  QVariant headerData (int section, Qt::Orientation orientation,
+                       int role = Qt::DisplayRole) const;
+  QModelIndex index (int row, int column,
+                    const QModelIndex &parent = QModelIndex ()) const;
+  QModelIndex parent (const QModelIndex &index) const;
+  int rowCount (const QModelIndex &parent = QModelIndex ()) const;
+  int columnCount (const QModelIndex &parent = QModelIndex ()) const;
+
+  void insert_top_level_item (int at, tree_item *treeItem);
+  tree_item *top_level_item (int at);
+
+public slots:
+  void request_update_workspace ();
+
+signals:
+  void model_changed ();
+
+private:
+  /** Timer for periodically updating the workspace model from the current
+    * symbol information. */
+  QTimer _update_workspace_model_timer;
+
+  /** Stores the current symbol information. */
+  QList <symbol_information> _symbol_information;
+  tree_item *_rootItem;
+};
+
+#endif // WORKSPACEMODEL_H
new file mode 100644
--- /dev/null
+++ b/gui/src/workspace-view.cc
@@ -0,0 +1,216 @@
+/* OctaveGUI - A graphical user interface for Octave
+ * Copyright (C) 2011 Jacob Dawid (jacob.dawid@googlemail.com)
+ *
+ * This program 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.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "workspace-view.h"
+#include "resource-manager.h"
+#include <QHBoxLayout>
+#include <QVBoxLayout>
+#include <QPushButton>
+
+workspace_view::workspace_view (QWidget * parent) : QDockWidget
+  (parent)
+{
+  setObjectName ("WorkspaceView");
+  setWindowTitle (tr ("Workspace"));
+
+  // Create a new workspace model.
+  _workspace_model = new workspace_model ();
+
+  _workspace_tree_view = new QTreeView (this);            // Create a new tree view.
+  _workspace_tree_view->setHeaderHidden (false);          // Do not show header columns.
+  _workspace_tree_view->setAlternatingRowColors (true);   // Activate alternating row colors.
+  _workspace_tree_view->setAnimated (false);              // Deactivate animations because of strange glitches.
+  _workspace_tree_view->setTextElideMode (Qt::ElideRight);// Elide text to the right side of the cells.
+  _workspace_tree_view->setWordWrap (false);              // No wordwrapping in cells.
+  _workspace_tree_view->setModel (_workspace_model);      // Assign model.
+
+  // Set an empty widget, so we can assign a layout to it.
+  setWidget (new QWidget (this));
+
+  // Create a new layout and add widgets to it.
+  QVBoxLayout *layout = new QVBoxLayout ();
+  layout->addWidget (_workspace_tree_view);
+  layout->setMargin (2);
+
+  // Set the empty widget to have our layout.
+  widget ()->setLayout (layout);
+
+  // Initialize collapse/expand state of the workspace subcategories.
+
+  QSettings *settings = resource_manager::get_settings ();
+
+  // FIXME -- what should happen if settings is 0?
+
+  _explicit_collapse.local      = settings->value ("workspaceview/local_collapsed", false).toBool ();
+  _explicit_collapse.global     = settings->value ("workspaceview/global_collapsed", false).toBool ();;
+  _explicit_collapse.persistent = settings->value ("workspaceview/persistent_collapsed", false).toBool ();;
+  _explicit_collapse.hidden     = settings->value ("workspaceview/hidden_collapsed", false).toBool ();;
+
+  // Connect signals and slots.
+  connect (this, SIGNAL (visibilityChanged (bool)),
+           this, SLOT(handle_visibility_changed (bool)));
+
+  connect (_workspace_model, SIGNAL (model_changed ()),
+           this, SLOT (model_changed ()));
+
+  connect (_workspace_tree_view, SIGNAL (collapsed (QModelIndex)),
+           this, SLOT (collapse_requested (QModelIndex)));
+  connect (_workspace_tree_view, SIGNAL (expanded (QModelIndex)),
+           this, SLOT (expand_requested (QModelIndex)));
+
+  connect (_workspace_tree_view, SIGNAL (doubleClicked (QModelIndex)),
+           this, SLOT (item_double_clicked (QModelIndex)));
+
+}
+
+workspace_view::~workspace_view ()
+{
+  QSettings *settings = resource_manager::get_settings ();
+
+  // FIXME -- what should happen if settings is 0?
+
+  settings->setValue("workspaceview/local_collapsed", _explicit_collapse.local);
+  settings->setValue("workspaceview/global_collapsed", _explicit_collapse.global);
+  settings->setValue("workspaceview/persistent_collapsed", _explicit_collapse.persistent);
+  settings->setValue("workspaceview/hidden_collapsed", _explicit_collapse.hidden);
+}
+
+void
+workspace_view::handle_visibility_changed (bool visible)
+{
+  if (visible)
+    emit active_changed (true);
+}
+
+void
+workspace_view::model_changed ()
+{
+  // This code is very quirky and requires some explanation.
+  // Usually, we should not deal with collapsing or expanding ourselves,
+  // because the view itself determines (based on the model) whether it
+  // is appropriate to collapse or expand items.
+  //
+  // Now, the logic requires that we update our model item by item, which
+  // would make it work correctly, but this is extremely slow and scales
+  // very bad (O(n^2)). That's why we throw away our model and rebuild it
+  // completely from scratch (O(n)), which is why the view renders all
+  // displayed data as invalid.
+  //
+  // In order to make collapsing/expanding work again, we need to set
+  // flags ourselves here.
+
+  QModelIndex local_model_index = _workspace_model->index (0, 0);
+  QModelIndex global_model_index = _workspace_model->index (1, 0);
+  QModelIndex persistent_model_index = _workspace_model->index (2, 0);
+  QModelIndex hidden_model_index = _workspace_model->index (3, 0);
+
+  if (_explicit_collapse.local) {
+    _workspace_tree_view->collapse (local_model_index);
+  } else {
+    _workspace_tree_view->expand (local_model_index);
+  }
+
+  if (_explicit_collapse.global) {
+    _workspace_tree_view->collapse (global_model_index);
+  } else {
+    _workspace_tree_view->expand (global_model_index);
+  }
+
+  if (_explicit_collapse.persistent) {
+    _workspace_tree_view->collapse (persistent_model_index);
+  } else {
+    _workspace_tree_view->expand (persistent_model_index);
+  }
+
+  if (_explicit_collapse.hidden) {
+    _workspace_tree_view->collapse (hidden_model_index);
+  } else {
+    _workspace_tree_view->expand (hidden_model_index);
+  }
+}
+
+void
+workspace_view::collapse_requested (QModelIndex index)
+{
+  // This code is very quirky and requires some explanation.
+  // Usually, we should not deal with collapsing or expanding ourselves,
+  // because the view itself determines (based on the model) whether it
+  // is appropriate to collapse or expand items.
+  //
+  // Now, the logic requires that we update our model item by item, which
+  // would make it work correctly, but this is extremely slow and scales
+  // very bad (O(n^2)). That's why we throw away our model and rebuild it
+  // completely from scratch (O(n)), which is why the view renders all
+  // displayed data as invalid.
+  //
+  // In order to make collapsing/expanding work again, we need to set
+  // flags ourselves here.
+  QMap<int, QVariant> item_data
+      = _workspace_model->itemData (index);
+
+  if (item_data[0] == "Local")
+    _explicit_collapse.local = true;
+  if (item_data[0] == "Global")
+    _explicit_collapse.global = true;
+  if (item_data[0] == "Persistent")
+    _explicit_collapse.persistent = true;
+  if (item_data[0] == "Hidden")
+    _explicit_collapse.hidden = true;
+}
+
+void
+workspace_view::expand_requested (QModelIndex index)
+{
+  // This code is very quirky and requires some explanation.
+  // Usually, we should not deal with collapsing or expanding ourselves,
+  // because the view itself determines (based on the model) whether it
+  // is appropriate to collapse or expand items.
+  //
+  // Now, the logic requires that we update our model item by item, which
+  // would make it work correctly, but this is extremely slow and scales
+  // very bad (O(n^2)). That's why we throw away our model and rebuild it
+  // completely from scratch (O(n)), which is why the view renders all
+  // displayed data as invalid.
+  //
+  // In order to make collapsing/expanding work again, we need to do set
+  // flags ourselves here.
+  QMap<int, QVariant> item_data
+      = _workspace_model->itemData (index);
+
+  if (item_data[0] == "Local")
+    _explicit_collapse.local = false;
+  if (item_data[0] == "Global")
+    _explicit_collapse.global = false;
+  if (item_data[0] == "Persistent")
+    _explicit_collapse.persistent = false;
+  if (item_data[0] == "Hidden")
+    _explicit_collapse.hidden = false;
+}
+
+void
+workspace_view::item_double_clicked (QModelIndex index)
+{
+  Q_UNUSED (index);
+  // TODO: Implement opening a dialog that allows the user to change a variable in the workspace.
+}
+
+void
+workspace_view::closeEvent (QCloseEvent *event)
+{
+  emit active_changed (false);
+  QDockWidget::closeEvent (event);
+}
new file mode 100644
--- /dev/null
+++ b/gui/src/workspace-view.h
@@ -0,0 +1,65 @@
+/* OctaveGUI - A graphical user interface for Octave
+ * Copyright (C) 2011 Jacob Dawid (jacob.dawid@googlemail.com)
+ *
+ * This program 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.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef WORKSPACEVIEW_H
+#define WORKSPACEVIEW_H
+
+#include <QDockWidget>
+#include <QTreeView>
+#include <QSemaphore>
+#include "octave-link.h"
+#include "workspace-model.h"
+
+class workspace_view : public QDockWidget
+{
+  Q_OBJECT
+public:
+  workspace_view (QWidget * parent = 0);
+  ~workspace_view ();
+
+public slots:
+  void handle_visibility_changed (bool visible);
+  void model_changed ();
+
+signals:
+  /** Custom signal that tells if a user has clicke away that dock widget. */
+  void active_changed (bool active);
+
+protected:
+  void closeEvent (QCloseEvent *event);
+
+protected slots:
+  void collapse_requested (QModelIndex index);
+  void expand_requested (QModelIndex index);
+  void item_double_clicked (QModelIndex index);
+
+private:
+  QTreeView *_workspace_tree_view;
+
+  /** Stores the current workspace model. */
+  workspace_model *_workspace_model;
+
+  struct
+  {
+    bool local;
+    bool global;
+    bool persistent;
+    bool hidden;
+  } _explicit_collapse;
+};
+
+#endif // WORKSPACEVIEW_H
new file mode 100644
--- /dev/null
+++ b/gui/translators
@@ -0,0 +1,8 @@
+# Below Octave GUI translators are listed with their e-mails
+# to be able inform them about generic translation file changes
+en-en Jacob Dawid <jacob.dawid@googlemail.com>
+es-es Valentin Ortega-Clavero <arcanos3030@gmail.com>
+de-de Jacob Dawid <jacob.dawid@googlemail.com>
+pt-br Júlio Hoffimann Mendes <julio.hoffimann@gmail.com>
+ru-ru Andriy Shinkarchuck <adriano32.gnu@gmail.com>
+uk-ua Andriy Shinkarchuck <adriano32.gnu@gmail.com>
--- a/libcruft/Makefile.am
+++ b/libcruft/Makefile.am
@@ -20,12 +20,11 @@
 
 include $(top_srcdir)/build-aux/common.mk
 
+AUTOMAKE_OPTIONS = subdir-objects
+
 ## Search local directories before those specified by the user.
 AM_CPPFLAGS = \
-  -I../libgnu -I$(top_srcdir)/libgnu \
-  @CPPFLAGS@
-
-AUTOMAKE_OPTIONS = subdir-objects
+  -I$(top_builddir)/libgnu -I$(top_srcdir)/libgnu
 
 octlib_LTLIBRARIES = libcruft.la
 
@@ -43,7 +42,7 @@
 
 libcruft_la_LIBADD = \
   libranlib.la \
-  ../libgnu/libgnu.la \
+  $(top_builddir)/libgnu/libgnu.la \
   $(LIBCRUFT_LINK_DEPS)
 
 # Increment these as needed and according to the rules in the libtool
--- a/libcruft/misc/f77-fcn.c
+++ b/libcruft/misc/f77-fcn.c
@@ -60,5 +60,5 @@
 
   octave_jump_to_enclosing_context ();
 
-  F77_RETURN (0)
+  F77_NORETURN (0)
 }
--- a/libcruft/misc/f77-fcn.h
+++ b/libcruft/misc/f77-fcn.h
@@ -81,6 +81,57 @@
 #define F77_FCN(f, F) F77_FUNC (f, F)
 #endif
 
+/*
+
+The following macros are used for handling Fortran <-> C calling
+conventions.  They are defined below for three different types of
+systems, Cray (possibly now obsolete), Visual Fortran, and any system
+that is compatible with the f2c calling conventions, including g77 and
+gfortran.  Note that gfortran is not completely compatible with the
+f2c calling conventions, but that we only use the parts that are
+compatible.  For example, f2c and gfortran differ in the way they
+handle Fortran functions that return complex values, but Octave does
+not call any Fortran functions like that directly from C or C++.
+
+Use these macros to pass character strings from C to Fortran:
+
+  F77_CHAR_ARG(x)
+  F77_CONST_CHAR_ARG(x)
+  F77_CXX_STRING_ARG(x)
+  F77_CHAR_ARG_LEN(l)
+  F77_CHAR_ARG_DECL
+  F77_CONST_CHAR_ARG_DECL
+  F77_CHAR_ARG_LEN_DECL
+
+Use these macros to write C-language functions that accept
+Fortran-style character strings:
+
+  F77_CHAR_ARG_DEF(s, len)
+  F77_CONST_CHAR_ARG_DEF(s, len)
+  F77_CHAR_ARG_LEN_DEF(len)
+  F77_CHAR_ARG_USE(s)
+  F77_CHAR_ARG_LEN_USE(s, len)
+
+Use this macro to declare the return type of a C-language function
+that is supposed to act like a Fortran subroutine:
+
+  F77_RET_T int
+
+Use these macros to return from C-language functions that are supposed
+to act like Fortran subroutines.  F77_NORETURN is intended to be used
+as the last statement of such a function that has been tagged with a
+"noreturn" attribute.  If the compiler supports the "noreturn"
+attribute or if F77_RET_T is void, then it should expand to nothing so
+that we avoid warnings about functions tagged as "noreturn"
+containing a return statement.  Otherwise, it should expand to a
+statement that returns the given value so that we avoid warnings about
+not returning a value from a function declared to return something.
+
+  F77_RETURN(retval)
+  F77_NORETURN(retval)
+
+*/
+
 #if defined (F77_USES_CRAY_CALLING_CONVENTION)
 
 #include <fortran.h>
@@ -106,8 +157,20 @@
 #define F77_CHAR_ARG_USE(s) s.ptr
 #define F77_CHAR_ARG_LEN_USE(s, len) (s.mask.len>>3)
 
+/* Use this macro to declare the return type of a C-language function
+   that is supposed to act like a Fortran subroutine.  */
 #define F77_RET_T int
+
+/* Use these macros to return from C-language functions that are
+   supposed to act like Fortran subroutines.  F77_NORETURN is intended
+   to be used as the last statement of such a function that has been
+   tagged with a "noreturn" attribute.  */
 #define F77_RETURN(retval) return retval;
+#if defined (HAVE_ATTR_NORETURN)
+#define F77_NORETURN(retval)
+#else
+#define F77_NORETURN(retval) return retval;
+#endif
 
 /* FIXME -- these should work for SV1 or Y-MP systems but will
    need to be changed for others.  */
@@ -167,8 +230,6 @@
 #define F77_CONST_CHAR_ARG_DECL const char *, int
 #define F77_CHAR_ARG_LEN_DECL
 
-/* Use these macros to write C-language functions that accept
-   Fortran-style character strings.  */
 #define F77_CHAR_ARG_DEF(s, len) char *s, int len
 #define F77_CONST_CHAR_ARG_DEF(s, len) const char *s, int len
 #define F77_CHAR_ARG_LEN_DEF(len)
@@ -176,13 +237,14 @@
 #define F77_CHAR_ARG_LEN_USE(s, len) len
 
 #define F77_RET_T void
-#define F77_RETURN(retval)
+
+#define F77_RETURN(retval) return;
+#define F77_NORETURN(retval)
 
 #else
 
 /* Assume f2c-compatible calling convention.  */
 
-/* Use these macros to pass character strings from C to Fortran.  */
 #define F77_CHAR_ARG(x) x
 #define F77_CONST_CHAR_ARG(x) F77_CHAR_ARG (x)
 #define F77_CHAR_ARG2(x, l) x
@@ -193,8 +255,6 @@
 #define F77_CONST_CHAR_ARG_DECL const char *
 #define F77_CHAR_ARG_LEN_DECL , long
 
-/* Use these macros to write C-language functions that accept
-   Fortran-style character strings.  */
 #define F77_CHAR_ARG_DEF(s, len) char *s
 #define F77_CONST_CHAR_ARG_DEF(s, len) const char *s
 #define F77_CHAR_ARG_LEN_DEF(len) , long len
@@ -202,7 +262,13 @@
 #define F77_CHAR_ARG_LEN_USE(s, len) len
 
 #define F77_RET_T int
+
 #define F77_RETURN(retval) return retval;
+#if defined (HAVE_ATTR_NORETURN)
+#define F77_NORETURN(retval)
+#else
+#define F77_NORETURN(retval) return retval;
+#endif
 
 #endif
 
--- a/libgnu/Makefile.am
+++ b/libgnu/Makefile.am
@@ -1,21 +1,2986 @@
-# Copyright (C) 2009 John W. Eaton
+## DO NOT EDIT! GENERATED AUTOMATICALLY!
+## Process this file with automake to produce Makefile.in.
+# Copyright (C) 2002-2012 Free Software Foundation, Inc.
+#
+# This file 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.
+#
+# This file 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 this file.  If not, see <http://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License,
+# this file may be distributed as part of a program that
+# contains a configuration script generated by Autoconf, under
+# the same distribution terms as the rest of that program.
 #
-# This file is part of Octave.
-# 
-# Octave is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the
-# Free Software Foundation; either version 3 of the License, or (at
-# your option) any later version.
-# 
-# Octave is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# for more details.
-# 
-# You should have received a copy of the GNU General Public License
-# along with Octave; see the file COPYING.  If not, see
-# <http://www.gnu.org/licenses/>.
-
-# Simply include gnulib.mk, at least for now.
-
-include gnulib.mk
+# Generated by gnulib-tool.
+# Reproduce by: gnulib-tool --import --dir=. --local-dir=gl --lib=libgnu --source-base=libgnu --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --no-conditional-dependencies --libtool --macro-prefix=gl base64 c-strcase closedir copysign copysignf crypto/md5 fclose fcntl fflush filemode fnmatch fopen fseek ftell getcwd gethostname getopt-gnu gettimeofday glob isatty link lstat mkdir mkfifo mkostemp mkstemp mktime nanosleep nproc opendir pathmax progname readdir readlink rename rewinddir rmdir round roundf sigaction signal sigprocmask sleep stat stdint stdio strftime strptime symlink sys_stat sys_time sys_times time times tmpfile trunc truncf unistd unlink vasprintf
+
+AUTOMAKE_OPTIONS = 1.5 gnits
+
+SUBDIRS =
+noinst_HEADERS =
+noinst_LIBRARIES =
+noinst_LTLIBRARIES =
+EXTRA_DIST =
+BUILT_SOURCES =
+SUFFIXES =
+MOSTLYCLEANFILES = core *.stackdump
+MOSTLYCLEANDIRS =
+CLEANFILES =
+DISTCLEANFILES =
+MAINTAINERCLEANFILES =
+
+AM_CPPFLAGS =
+AM_CFLAGS =
+
+noinst_LTLIBRARIES += libgnu.la
+
+libgnu_la_SOURCES =
+libgnu_la_LIBADD = $(gl_LTLIBOBJS)
+libgnu_la_DEPENDENCIES = $(gl_LTLIBOBJS)
+EXTRA_libgnu_la_SOURCES =
+libgnu_la_LDFLAGS = $(AM_LDFLAGS)
+libgnu_la_LDFLAGS += -no-undefined
+libgnu_la_LDFLAGS += $(COPYSIGNF_LIBM)
+libgnu_la_LDFLAGS += $(COPYSIGN_LIBM)
+libgnu_la_LDFLAGS += $(FLOOR_LIBM)
+libgnu_la_LDFLAGS += $(GETHOSTNAME_LIB)
+libgnu_la_LDFLAGS += $(LIBSOCKET)
+libgnu_la_LDFLAGS += $(LIB_NANOSLEEP)
+libgnu_la_LDFLAGS += $(LIB_SELECT)
+libgnu_la_LDFLAGS += $(LTLIBINTL)
+libgnu_la_LDFLAGS += $(ROUNDF_LIBM)
+libgnu_la_LDFLAGS += $(ROUND_LIBM)
+libgnu_la_LDFLAGS += $(TRUNCF_LIBM)
+libgnu_la_LDFLAGS += $(TRUNC_LIBM)
+
+## begin gnulib module alloca
+
+
+libgnu_la_LIBADD += @LTALLOCA@
+libgnu_la_DEPENDENCIES += @LTALLOCA@
+EXTRA_DIST += alloca.c
+
+EXTRA_libgnu_la_SOURCES += alloca.c
+
+## end   gnulib module alloca
+
+## begin gnulib module alloca-opt
+
+BUILT_SOURCES += $(ALLOCA_H)
+
+# We need the following in order to create <alloca.h> when the system
+# doesn't have one that works with the given compiler.
+if GL_GENERATE_ALLOCA_H
+alloca.h: alloca.in.h $(top_builddir)/config.status
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  cat $(srcdir)/alloca.in.h; \
+	} > $@-t && \
+	mv -f $@-t $@
+else
+alloca.h: $(top_builddir)/config.status
+	rm -f $@
+endif
+MOSTLYCLEANFILES += alloca.h alloca.h-t
+
+EXTRA_DIST += alloca.in.h
+
+## end   gnulib module alloca-opt
+
+## begin gnulib module at-internal
+
+
+EXTRA_DIST += openat-priv.h openat-proc.c
+
+EXTRA_libgnu_la_SOURCES += openat-proc.c
+
+## end   gnulib module at-internal
+
+## begin gnulib module base64
+
+libgnu_la_SOURCES += base64.h base64.c
+
+## end   gnulib module base64
+
+## begin gnulib module c-ctype
+
+libgnu_la_SOURCES += c-ctype.h c-ctype.c
+
+## end   gnulib module c-ctype
+
+## begin gnulib module c-strcase
+
+libgnu_la_SOURCES += c-strcase.h c-strcasecmp.c c-strncasecmp.c
+
+## end   gnulib module c-strcase
+
+## begin gnulib module canonicalize-lgpl
+
+
+EXTRA_DIST += canonicalize-lgpl.c
+
+EXTRA_libgnu_la_SOURCES += canonicalize-lgpl.c
+
+## end   gnulib module canonicalize-lgpl
+
+## begin gnulib module chdir-long
+
+
+EXTRA_DIST += chdir-long.c chdir-long.h
+
+EXTRA_libgnu_la_SOURCES += chdir-long.c
+
+## end   gnulib module chdir-long
+
+## begin gnulib module cloexec
+
+libgnu_la_SOURCES += cloexec.c
+
+EXTRA_DIST += cloexec.h
+
+## end   gnulib module cloexec
+
+## begin gnulib module close
+
+
+EXTRA_DIST += close.c
+
+EXTRA_libgnu_la_SOURCES += close.c
+
+## end   gnulib module close
+
+## begin gnulib module closedir
+
+
+EXTRA_DIST += closedir.c dirent-private.h
+
+EXTRA_libgnu_la_SOURCES += closedir.c
+
+## end   gnulib module closedir
+
+## begin gnulib module configmake
+
+# Listed in the same order as the GNU makefile conventions, and
+# provided by autoconf 2.59c+.
+# The Automake-defined pkg* macros are appended, in the order
+# listed in the Automake 1.10a+ documentation.
+configmake.h: Makefile
+	$(AM_V_GEN)rm -f $@-t && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  echo '#define PREFIX "$(prefix)"'; \
+	  echo '#define EXEC_PREFIX "$(exec_prefix)"'; \
+	  echo '#define BINDIR "$(bindir)"'; \
+	  echo '#define SBINDIR "$(sbindir)"'; \
+	  echo '#define LIBEXECDIR "$(libexecdir)"'; \
+	  echo '#define DATAROOTDIR "$(datarootdir)"'; \
+	  echo '#define DATADIR "$(datadir)"'; \
+	  echo '#define SYSCONFDIR "$(sysconfdir)"'; \
+	  echo '#define SHAREDSTATEDIR "$(sharedstatedir)"'; \
+	  echo '#define LOCALSTATEDIR "$(localstatedir)"'; \
+	  echo '#define INCLUDEDIR "$(includedir)"'; \
+	  echo '#define OLDINCLUDEDIR "$(oldincludedir)"'; \
+	  echo '#define DOCDIR "$(docdir)"'; \
+	  echo '#define INFODIR "$(infodir)"'; \
+	  echo '#define HTMLDIR "$(htmldir)"'; \
+	  echo '#define DVIDIR "$(dvidir)"'; \
+	  echo '#define PDFDIR "$(pdfdir)"'; \
+	  echo '#define PSDIR "$(psdir)"'; \
+	  echo '#define LIBDIR "$(libdir)"'; \
+	  echo '#define LISPDIR "$(lispdir)"'; \
+	  echo '#define LOCALEDIR "$(localedir)"'; \
+	  echo '#define MANDIR "$(mandir)"'; \
+	  echo '#define MANEXT "$(manext)"'; \
+	  echo '#define PKGDATADIR "$(pkgdatadir)"'; \
+	  echo '#define PKGINCLUDEDIR "$(pkgincludedir)"'; \
+	  echo '#define PKGLIBDIR "$(pkglibdir)"'; \
+	  echo '#define PKGLIBEXECDIR "$(pkglibexecdir)"'; \
+	} | sed '/""/d' > $@-t && \
+	mv -f $@-t $@
+
+BUILT_SOURCES += configmake.h
+CLEANFILES += configmake.h configmake.h-t
+
+## end   gnulib module configmake
+
+## begin gnulib module copysign
+
+
+EXTRA_DIST += copysign.c
+
+EXTRA_libgnu_la_SOURCES += copysign.c
+
+## end   gnulib module copysign
+
+## begin gnulib module copysignf
+
+
+EXTRA_DIST += copysignf.c
+
+EXTRA_libgnu_la_SOURCES += copysignf.c
+
+## end   gnulib module copysignf
+
+## begin gnulib module crypto/md5
+
+libgnu_la_SOURCES += md5.c
+
+EXTRA_DIST += md5.h
+
+## end   gnulib module crypto/md5
+
+## begin gnulib module dirent
+
+BUILT_SOURCES += dirent.h
+
+# We need the following in order to create <dirent.h> when the system
+# doesn't have one that works with the given compiler.
+dirent.h: dirent.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''HAVE_DIRENT_H''@|$(HAVE_DIRENT_H)|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_DIRENT_H''@|$(NEXT_DIRENT_H)|g' \
+	      -e 's/@''GNULIB_OPENDIR''@/$(GNULIB_OPENDIR)/g' \
+	      -e 's/@''GNULIB_READDIR''@/$(GNULIB_READDIR)/g' \
+	      -e 's/@''GNULIB_REWINDDIR''@/$(GNULIB_REWINDDIR)/g' \
+	      -e 's/@''GNULIB_CLOSEDIR''@/$(GNULIB_CLOSEDIR)/g' \
+	      -e 's/@''GNULIB_DIRFD''@/$(GNULIB_DIRFD)/g' \
+	      -e 's/@''GNULIB_FDOPENDIR''@/$(GNULIB_FDOPENDIR)/g' \
+	      -e 's/@''GNULIB_SCANDIR''@/$(GNULIB_SCANDIR)/g' \
+	      -e 's/@''GNULIB_ALPHASORT''@/$(GNULIB_ALPHASORT)/g' \
+	      -e 's/@''HAVE_OPENDIR''@/$(HAVE_OPENDIR)/g' \
+	      -e 's/@''HAVE_READDIR''@/$(HAVE_READDIR)/g' \
+	      -e 's/@''HAVE_REWINDDIR''@/$(HAVE_REWINDDIR)/g' \
+	      -e 's/@''HAVE_CLOSEDIR''@/$(HAVE_CLOSEDIR)/g' \
+	      -e 's|@''HAVE_DECL_DIRFD''@|$(HAVE_DECL_DIRFD)|g' \
+	      -e 's|@''HAVE_DECL_FDOPENDIR''@|$(HAVE_DECL_FDOPENDIR)|g' \
+	      -e 's|@''HAVE_FDOPENDIR''@|$(HAVE_FDOPENDIR)|g' \
+	      -e 's|@''HAVE_SCANDIR''@|$(HAVE_SCANDIR)|g' \
+	      -e 's|@''HAVE_ALPHASORT''@|$(HAVE_ALPHASORT)|g' \
+	      -e 's|@''REPLACE_OPENDIR''@|$(REPLACE_OPENDIR)|g' \
+	      -e 's|@''REPLACE_CLOSEDIR''@|$(REPLACE_CLOSEDIR)|g' \
+	      -e 's|@''REPLACE_DIRFD''@|$(REPLACE_DIRFD)|g' \
+	      -e 's|@''REPLACE_FDOPENDIR''@|$(REPLACE_FDOPENDIR)|g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+	      < $(srcdir)/dirent.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += dirent.h dirent.h-t
+
+EXTRA_DIST += dirent.in.h
+
+## end   gnulib module dirent
+
+## begin gnulib module dirfd
+
+
+EXTRA_DIST += dirfd.c
+
+EXTRA_libgnu_la_SOURCES += dirfd.c
+
+## end   gnulib module dirfd
+
+## begin gnulib module dirname-lgpl
+
+libgnu_la_SOURCES += dirname-lgpl.c basename-lgpl.c stripslash.c
+
+EXTRA_DIST += dirname.h
+
+## end   gnulib module dirname-lgpl
+
+## begin gnulib module dosname
+
+
+EXTRA_DIST += dosname.h
+
+## end   gnulib module dosname
+
+## begin gnulib module dup
+
+
+EXTRA_DIST += dup.c
+
+EXTRA_libgnu_la_SOURCES += dup.c
+
+## end   gnulib module dup
+
+## begin gnulib module dup2
+
+
+EXTRA_DIST += dup2.c
+
+EXTRA_libgnu_la_SOURCES += dup2.c
+
+## end   gnulib module dup2
+
+## begin gnulib module errno
+
+BUILT_SOURCES += $(ERRNO_H)
+
+# We need the following in order to create <errno.h> when the system
+# doesn't have one that is POSIX compliant.
+if GL_GENERATE_ERRNO_H
+errno.h: errno.in.h $(top_builddir)/config.status
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_ERRNO_H''@|$(NEXT_ERRNO_H)|g' \
+	      -e 's|@''EMULTIHOP_HIDDEN''@|$(EMULTIHOP_HIDDEN)|g' \
+	      -e 's|@''EMULTIHOP_VALUE''@|$(EMULTIHOP_VALUE)|g' \
+	      -e 's|@''ENOLINK_HIDDEN''@|$(ENOLINK_HIDDEN)|g' \
+	      -e 's|@''ENOLINK_VALUE''@|$(ENOLINK_VALUE)|g' \
+	      -e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \
+	      -e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \
+	      < $(srcdir)/errno.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+else
+errno.h: $(top_builddir)/config.status
+	rm -f $@
+endif
+MOSTLYCLEANFILES += errno.h errno.h-t
+
+EXTRA_DIST += errno.in.h
+
+## end   gnulib module errno
+
+## begin gnulib module error
+
+
+EXTRA_DIST += error.c error.h
+
+EXTRA_libgnu_la_SOURCES += error.c
+
+## end   gnulib module error
+
+## begin gnulib module exitfail
+
+libgnu_la_SOURCES += exitfail.c
+
+EXTRA_DIST += exitfail.h
+
+## end   gnulib module exitfail
+
+## begin gnulib module fchdir
+
+
+EXTRA_DIST += fchdir.c
+
+EXTRA_libgnu_la_SOURCES += fchdir.c
+
+## end   gnulib module fchdir
+
+## begin gnulib module fclose
+
+
+EXTRA_DIST += fclose.c
+
+EXTRA_libgnu_la_SOURCES += fclose.c
+
+## end   gnulib module fclose
+
+## begin gnulib module fcntl
+
+
+EXTRA_DIST += fcntl.c
+
+EXTRA_libgnu_la_SOURCES += fcntl.c
+
+## end   gnulib module fcntl
+
+## begin gnulib module fcntl-h
+
+BUILT_SOURCES += fcntl.h
+
+# We need the following in order to create <fcntl.h> when the system
+# doesn't have one that works with the given compiler.
+fcntl.h: fcntl.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_FCNTL_H''@|$(NEXT_FCNTL_H)|g' \
+	      -e 's/@''GNULIB_FCNTL''@/$(GNULIB_FCNTL)/g' \
+	      -e 's/@''GNULIB_NONBLOCKING''@/$(GNULIB_NONBLOCKING)/g' \
+	      -e 's/@''GNULIB_OPEN''@/$(GNULIB_OPEN)/g' \
+	      -e 's/@''GNULIB_OPENAT''@/$(GNULIB_OPENAT)/g' \
+	      -e 's|@''HAVE_FCNTL''@|$(HAVE_FCNTL)|g' \
+	      -e 's|@''HAVE_OPENAT''@|$(HAVE_OPENAT)|g' \
+	      -e 's|@''REPLACE_FCNTL''@|$(REPLACE_FCNTL)|g' \
+	      -e 's|@''REPLACE_OPEN''@|$(REPLACE_OPEN)|g' \
+	      -e 's|@''REPLACE_OPENAT''@|$(REPLACE_OPENAT)|g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+	      < $(srcdir)/fcntl.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += fcntl.h fcntl.h-t
+
+EXTRA_DIST += fcntl.in.h
+
+## end   gnulib module fcntl-h
+
+## begin gnulib module fd-hook
+
+libgnu_la_SOURCES += fd-hook.c
+
+EXTRA_DIST += fd-hook.h
+
+## end   gnulib module fd-hook
+
+## begin gnulib module fdopendir
+
+
+EXTRA_DIST += fdopendir.c
+
+EXTRA_libgnu_la_SOURCES += fdopendir.c
+
+## end   gnulib module fdopendir
+
+## begin gnulib module fflush
+
+
+EXTRA_DIST += fflush.c stdio-impl.h
+
+EXTRA_libgnu_la_SOURCES += fflush.c
+
+## end   gnulib module fflush
+
+## begin gnulib module filemode
+
+libgnu_la_SOURCES += filemode.c
+
+EXTRA_DIST += filemode.h
+
+## end   gnulib module filemode
+
+## begin gnulib module filename
+
+
+EXTRA_DIST += filename.h
+
+## end   gnulib module filename
+
+## begin gnulib module filenamecat-lgpl
+
+libgnu_la_SOURCES += filenamecat-lgpl.c
+
+EXTRA_DIST += filenamecat.h
+
+## end   gnulib module filenamecat-lgpl
+
+## begin gnulib module float
+
+BUILT_SOURCES += $(FLOAT_H)
+
+# We need the following in order to create <float.h> when the system
+# doesn't have one that works with the given compiler.
+if GL_GENERATE_FLOAT_H
+float.h: float.in.h $(top_builddir)/config.status
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_FLOAT_H''@|$(NEXT_FLOAT_H)|g' \
+	      -e 's|@''REPLACE_ITOLD''@|$(REPLACE_ITOLD)|g' \
+	      < $(srcdir)/float.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+else
+float.h: $(top_builddir)/config.status
+	rm -f $@
+endif
+MOSTLYCLEANFILES += float.h float.h-t
+
+EXTRA_DIST += float.c float.in.h itold.c
+
+EXTRA_libgnu_la_SOURCES += float.c itold.c
+
+## end   gnulib module float
+
+## begin gnulib module floor
+
+
+EXTRA_DIST += floor.c
+
+EXTRA_libgnu_la_SOURCES += floor.c
+
+## end   gnulib module floor
+
+## begin gnulib module fnmatch
+
+BUILT_SOURCES += $(FNMATCH_H)
+
+# We need the following in order to create <fnmatch.h> when the system
+# doesn't have one that supports the required API.
+if GL_GENERATE_FNMATCH_H
+fnmatch.h: fnmatch.in.h $(top_builddir)/config.status $(ARG_NONNULL_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      < $(srcdir)/fnmatch.in.h; \
+	} > $@-t && \
+	mv -f $@-t $@
+else
+fnmatch.h: $(top_builddir)/config.status
+	rm -f $@
+endif
+MOSTLYCLEANFILES += fnmatch.h fnmatch.h-t
+
+EXTRA_DIST += fnmatch.c fnmatch.in.h fnmatch_loop.c
+
+EXTRA_libgnu_la_SOURCES += fnmatch.c fnmatch_loop.c
+
+## end   gnulib module fnmatch
+
+## begin gnulib module fopen
+
+
+EXTRA_DIST += fopen.c
+
+EXTRA_libgnu_la_SOURCES += fopen.c
+
+## end   gnulib module fopen
+
+## begin gnulib module fpurge
+
+
+EXTRA_DIST += fpurge.c stdio-impl.h
+
+EXTRA_libgnu_la_SOURCES += fpurge.c
+
+## end   gnulib module fpurge
+
+## begin gnulib module freading
+
+libgnu_la_SOURCES += freading.c
+
+EXTRA_DIST += freading.h stdio-impl.h
+
+## end   gnulib module freading
+
+## begin gnulib module fseek
+
+
+EXTRA_DIST += fseek.c
+
+EXTRA_libgnu_la_SOURCES += fseek.c
+
+## end   gnulib module fseek
+
+## begin gnulib module fseeko
+
+
+EXTRA_DIST += fseeko.c stdio-impl.h
+
+EXTRA_libgnu_la_SOURCES += fseeko.c
+
+## end   gnulib module fseeko
+
+## begin gnulib module fstat
+
+
+EXTRA_DIST += fstat.c
+
+EXTRA_libgnu_la_SOURCES += fstat.c
+
+## end   gnulib module fstat
+
+## begin gnulib module fstatat
+
+
+EXTRA_DIST += at-func.c fstatat.c openat-priv.h
+
+EXTRA_libgnu_la_SOURCES += at-func.c fstatat.c
+
+## end   gnulib module fstatat
+
+## begin gnulib module ftell
+
+
+EXTRA_DIST += ftell.c
+
+EXTRA_libgnu_la_SOURCES += ftell.c
+
+## end   gnulib module ftell
+
+## begin gnulib module ftello
+
+
+EXTRA_DIST += ftello.c stdio-impl.h
+
+EXTRA_libgnu_la_SOURCES += ftello.c
+
+## end   gnulib module ftello
+
+## begin gnulib module getcwd
+
+
+EXTRA_DIST += getcwd.c
+
+EXTRA_libgnu_la_SOURCES += getcwd.c
+
+## end   gnulib module getcwd
+
+## begin gnulib module getcwd-lgpl
+
+
+EXTRA_DIST += getcwd-lgpl.c
+
+EXTRA_libgnu_la_SOURCES += getcwd-lgpl.c
+
+## end   gnulib module getcwd-lgpl
+
+## begin gnulib module getdtablesize
+
+
+EXTRA_DIST += getdtablesize.c
+
+EXTRA_libgnu_la_SOURCES += getdtablesize.c
+
+## end   gnulib module getdtablesize
+
+## begin gnulib module gethostname
+
+
+EXTRA_DIST += gethostname.c w32sock.h
+
+EXTRA_libgnu_la_SOURCES += gethostname.c
+
+## end   gnulib module gethostname
+
+## begin gnulib module getlogin_r
+
+
+EXTRA_DIST += getlogin_r.c
+
+EXTRA_libgnu_la_SOURCES += getlogin_r.c
+
+## end   gnulib module getlogin_r
+
+## begin gnulib module getopt-posix
+
+BUILT_SOURCES += $(GETOPT_H)
+
+# We need the following in order to create <getopt.h> when the system
+# doesn't have one that works with the given compiler.
+getopt.h: getopt.in.h $(top_builddir)/config.status $(ARG_NONNULL_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''HAVE_GETOPT_H''@|$(HAVE_GETOPT_H)|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_GETOPT_H''@|$(NEXT_GETOPT_H)|g' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      < $(srcdir)/getopt.in.h; \
+	} > $@-t && \
+	mv -f $@-t $@
+MOSTLYCLEANFILES += getopt.h getopt.h-t
+
+EXTRA_DIST += getopt.c getopt.in.h getopt1.c getopt_int.h
+
+EXTRA_libgnu_la_SOURCES += getopt.c getopt1.c
+
+## end   gnulib module getopt-posix
+
+## begin gnulib module gettext-h
+
+libgnu_la_SOURCES += gettext.h
+
+## end   gnulib module gettext-h
+
+## begin gnulib module gettimeofday
+
+
+EXTRA_DIST += gettimeofday.c
+
+EXTRA_libgnu_la_SOURCES += gettimeofday.c
+
+## end   gnulib module gettimeofday
+
+## begin gnulib module glob
+
+BUILT_SOURCES += $(GLOB_H)
+
+# We need the following in order to create <glob.h> when the system
+# doesn't have one that works with the given compiler.
+if GL_GENERATE_GLOB_H
+glob.h: glob.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's|@''HAVE_SYS_CDEFS_H''@|$(HAVE_SYS_CDEFS_H)|g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+	      < $(srcdir)/glob.in.h; \
+	} > $@-t && \
+	mv -f $@-t $@
+else
+glob.h: $(top_builddir)/config.status
+	rm -f $@
+endif
+MOSTLYCLEANFILES += glob.h glob.h-t
+
+EXTRA_DIST += glob-libc.h glob.c glob.in.h
+
+EXTRA_libgnu_la_SOURCES += glob.c
+
+## end   gnulib module glob
+
+## begin gnulib module intprops
+
+
+EXTRA_DIST += intprops.h
+
+## end   gnulib module intprops
+
+## begin gnulib module isatty
+
+
+EXTRA_DIST += isatty.c
+
+EXTRA_libgnu_la_SOURCES += isatty.c
+
+## end   gnulib module isatty
+
+## begin gnulib module isnand-nolibm
+
+
+EXTRA_DIST += float+.h isnan.c isnand-nolibm.h isnand.c
+
+EXTRA_libgnu_la_SOURCES += isnan.c isnand.c
+
+## end   gnulib module isnand-nolibm
+
+## begin gnulib module isnanf-nolibm
+
+
+EXTRA_DIST += float+.h isnan.c isnanf-nolibm.h isnanf.c
+
+EXTRA_libgnu_la_SOURCES += isnan.c isnanf.c
+
+## end   gnulib module isnanf-nolibm
+
+## begin gnulib module isnanl-nolibm
+
+
+EXTRA_DIST += float+.h isnan.c isnanl-nolibm.h isnanl.c
+
+EXTRA_libgnu_la_SOURCES += isnan.c isnanl.c
+
+## end   gnulib module isnanl-nolibm
+
+## begin gnulib module link
+
+
+EXTRA_DIST += link.c
+
+EXTRA_libgnu_la_SOURCES += link.c
+
+## end   gnulib module link
+
+## begin gnulib module localcharset
+
+libgnu_la_SOURCES += localcharset.h localcharset.c
+
+# We need the following in order to install a simple file in $(libdir)
+# which is shared with other installed packages. We use a list of referencing
+# packages so that "make uninstall" will remove the file if and only if it
+# is not used by another installed package.
+# On systems with glibc-2.1 or newer, the file is redundant, therefore we
+# avoid installing it.
+
+all-local: charset.alias ref-add.sed ref-del.sed
+
+charset_alias = $(DESTDIR)$(libdir)/charset.alias
+charset_tmp = $(DESTDIR)$(libdir)/charset.tmp
+install-exec-local: install-exec-localcharset
+install-exec-localcharset: all-local
+	if test $(GLIBC21) = no; then \
+	  case '$(host_os)' in \
+	    darwin[56]*) \
+	      need_charset_alias=true ;; \
+	    darwin* | cygwin* | mingw* | pw32* | cegcc*) \
+	      need_charset_alias=false ;; \
+	    *) \
+	      need_charset_alias=true ;; \
+	  esac ; \
+	else \
+	  need_charset_alias=false ; \
+	fi ; \
+	if $$need_charset_alias; then \
+	  $(mkinstalldirs) $(DESTDIR)$(libdir) ; \
+	fi ; \
+	if test -f $(charset_alias); then \
+	  sed -f ref-add.sed $(charset_alias) > $(charset_tmp) ; \
+	  $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \
+	  rm -f $(charset_tmp) ; \
+	else \
+	  if $$need_charset_alias; then \
+	    sed -f ref-add.sed charset.alias > $(charset_tmp) ; \
+	    $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \
+	    rm -f $(charset_tmp) ; \
+	  fi ; \
+	fi
+
+uninstall-local: uninstall-localcharset
+uninstall-localcharset: all-local
+	if test -f $(charset_alias); then \
+	  sed -f ref-del.sed $(charset_alias) > $(charset_tmp); \
+	  if grep '^# Packages using this file: $$' $(charset_tmp) \
+	      > /dev/null; then \
+	    rm -f $(charset_alias); \
+	  else \
+	    $(INSTALL_DATA) $(charset_tmp) $(charset_alias); \
+	  fi; \
+	  rm -f $(charset_tmp); \
+	fi
+
+charset.alias: config.charset
+	$(AM_V_GEN)rm -f t-$@ $@ && \
+	$(SHELL) $(srcdir)/config.charset '$(host)' > t-$@ && \
+	mv t-$@ $@
+
+SUFFIXES += .sed .sin
+.sin.sed:
+	$(AM_V_GEN)rm -f t-$@ $@ && \
+	sed -e '/^#/d' -e 's/@''PACKAGE''@/$(PACKAGE)/g' $< > t-$@ && \
+	mv t-$@ $@
+
+CLEANFILES += charset.alias ref-add.sed ref-del.sed
+
+EXTRA_DIST += config.charset ref-add.sin ref-del.sin
+
+## end   gnulib module localcharset
+
+## begin gnulib module lseek
+
+
+EXTRA_DIST += lseek.c
+
+EXTRA_libgnu_la_SOURCES += lseek.c
+
+## end   gnulib module lseek
+
+## begin gnulib module lstat
+
+
+EXTRA_DIST += lstat.c
+
+EXTRA_libgnu_la_SOURCES += lstat.c
+
+## end   gnulib module lstat
+
+## begin gnulib module malloc-posix
+
+
+EXTRA_DIST += malloc.c
+
+EXTRA_libgnu_la_SOURCES += malloc.c
+
+## end   gnulib module malloc-posix
+
+## begin gnulib module malloca
+
+libgnu_la_SOURCES += malloca.c
+
+EXTRA_DIST += malloca.h malloca.valgrind
+
+## end   gnulib module malloca
+
+## begin gnulib module math
+
+BUILT_SOURCES += math.h
+
+# We need the following in order to create <math.h> when the system
+# doesn't have one that works with the given compiler.
+math.h: math.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''INCLUDE_NEXT_AS_FIRST_DIRECTIVE''@|$(INCLUDE_NEXT_AS_FIRST_DIRECTIVE)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_AS_FIRST_DIRECTIVE_MATH_H''@|$(NEXT_AS_FIRST_DIRECTIVE_MATH_H)|g' \
+	      -e 's/@''GNULIB_ACOSF''@/$(GNULIB_ACOSF)/g' \
+	      -e 's/@''GNULIB_ACOSL''@/$(GNULIB_ACOSL)/g' \
+	      -e 's/@''GNULIB_ASINF''@/$(GNULIB_ASINF)/g' \
+	      -e 's/@''GNULIB_ASINL''@/$(GNULIB_ASINL)/g' \
+	      -e 's/@''GNULIB_ATANF''@/$(GNULIB_ATANF)/g' \
+	      -e 's/@''GNULIB_ATANL''@/$(GNULIB_ATANL)/g' \
+	      -e 's/@''GNULIB_ATAN2F''@/$(GNULIB_ATAN2F)/g' \
+	      -e 's/@''GNULIB_CBRT''@/$(GNULIB_CBRT)/g' \
+	      -e 's/@''GNULIB_CBRTF''@/$(GNULIB_CBRTF)/g' \
+	      -e 's/@''GNULIB_CBRTL''@/$(GNULIB_CBRTL)/g' \
+	      -e 's/@''GNULIB_CEIL''@/$(GNULIB_CEIL)/g' \
+	      -e 's/@''GNULIB_CEILF''@/$(GNULIB_CEILF)/g' \
+	      -e 's/@''GNULIB_CEILL''@/$(GNULIB_CEILL)/g' \
+	      -e 's/@''GNULIB_COPYSIGN''@/$(GNULIB_COPYSIGN)/g' \
+	      -e 's/@''GNULIB_COPYSIGNF''@/$(GNULIB_COPYSIGNF)/g' \
+	      -e 's/@''GNULIB_COPYSIGNL''@/$(GNULIB_COPYSIGNL)/g' \
+	      -e 's/@''GNULIB_COSF''@/$(GNULIB_COSF)/g' \
+	      -e 's/@''GNULIB_COSL''@/$(GNULIB_COSL)/g' \
+	      -e 's/@''GNULIB_COSHF''@/$(GNULIB_COSHF)/g' \
+	      -e 's/@''GNULIB_EXPF''@/$(GNULIB_EXPF)/g' \
+	      -e 's/@''GNULIB_EXPL''@/$(GNULIB_EXPL)/g' \
+	      -e 's/@''GNULIB_EXP2''@/$(GNULIB_EXP2)/g' \
+	      -e 's/@''GNULIB_EXP2F''@/$(GNULIB_EXP2F)/g' \
+	      -e 's/@''GNULIB_EXP2L''@/$(GNULIB_EXP2L)/g' \
+	      -e 's/@''GNULIB_EXPM1''@/$(GNULIB_EXPM1)/g' \
+	      -e 's/@''GNULIB_EXPM1F''@/$(GNULIB_EXPM1F)/g' \
+	      -e 's/@''GNULIB_EXPM1L''@/$(GNULIB_EXPM1L)/g' \
+	      -e 's/@''GNULIB_FABSF''@/$(GNULIB_FABSF)/g' \
+	      -e 's/@''GNULIB_FABSL''@/$(GNULIB_FABSL)/g' \
+	      -e 's/@''GNULIB_FLOOR''@/$(GNULIB_FLOOR)/g' \
+	      -e 's/@''GNULIB_FLOORF''@/$(GNULIB_FLOORF)/g' \
+	      -e 's/@''GNULIB_FLOORL''@/$(GNULIB_FLOORL)/g' \
+	      -e 's/@''GNULIB_FMA''@/$(GNULIB_FMA)/g' \
+	      -e 's/@''GNULIB_FMAF''@/$(GNULIB_FMAF)/g' \
+	      -e 's/@''GNULIB_FMAL''@/$(GNULIB_FMAL)/g' \
+	      -e 's/@''GNULIB_FMOD''@/$(GNULIB_FMOD)/g' \
+	      -e 's/@''GNULIB_FMODF''@/$(GNULIB_FMODF)/g' \
+	      -e 's/@''GNULIB_FMODL''@/$(GNULIB_FMODL)/g' \
+	      -e 's/@''GNULIB_FREXPF''@/$(GNULIB_FREXPF)/g' \
+	      -e 's/@''GNULIB_FREXP''@/$(GNULIB_FREXP)/g' \
+	      -e 's/@''GNULIB_FREXPL''@/$(GNULIB_FREXPL)/g' \
+	      -e 's/@''GNULIB_HYPOT''@/$(GNULIB_HYPOT)/g' \
+	      -e 's/@''GNULIB_HYPOTF''@/$(GNULIB_HYPOTF)/g' \
+	      -e 's/@''GNULIB_HYPOTL''@/$(GNULIB_HYPOTL)/g' \
+	      < $(srcdir)/math.in.h | \
+	  sed -e 's/@''GNULIB_ILOGB''@/$(GNULIB_ILOGB)/g' \
+	      -e 's/@''GNULIB_ILOGBF''@/$(GNULIB_ILOGBF)/g' \
+	      -e 's/@''GNULIB_ILOGBL''@/$(GNULIB_ILOGBL)/g' \
+	      -e 's/@''GNULIB_ISFINITE''@/$(GNULIB_ISFINITE)/g' \
+	      -e 's/@''GNULIB_ISINF''@/$(GNULIB_ISINF)/g' \
+	      -e 's/@''GNULIB_ISNAN''@/$(GNULIB_ISNAN)/g' \
+	      -e 's/@''GNULIB_ISNANF''@/$(GNULIB_ISNANF)/g' \
+	      -e 's/@''GNULIB_ISNAND''@/$(GNULIB_ISNAND)/g' \
+	      -e 's/@''GNULIB_ISNANL''@/$(GNULIB_ISNANL)/g' \
+	      -e 's/@''GNULIB_LDEXPF''@/$(GNULIB_LDEXPF)/g' \
+	      -e 's/@''GNULIB_LDEXPL''@/$(GNULIB_LDEXPL)/g' \
+	      -e 's/@''GNULIB_LOG''@/$(GNULIB_LOG)/g' \
+	      -e 's/@''GNULIB_LOGF''@/$(GNULIB_LOGF)/g' \
+	      -e 's/@''GNULIB_LOGL''@/$(GNULIB_LOGL)/g' \
+	      -e 's/@''GNULIB_LOG10''@/$(GNULIB_LOG10)/g' \
+	      -e 's/@''GNULIB_LOG10F''@/$(GNULIB_LOG10F)/g' \
+	      -e 's/@''GNULIB_LOG10L''@/$(GNULIB_LOG10L)/g' \
+	      -e 's/@''GNULIB_LOG1P''@/$(GNULIB_LOG1P)/g' \
+	      -e 's/@''GNULIB_LOG1PF''@/$(GNULIB_LOG1PF)/g' \
+	      -e 's/@''GNULIB_LOG1PL''@/$(GNULIB_LOG1PL)/g' \
+	      -e 's/@''GNULIB_LOG2''@/$(GNULIB_LOG2)/g' \
+	      -e 's/@''GNULIB_LOG2F''@/$(GNULIB_LOG2F)/g' \
+	      -e 's/@''GNULIB_LOG2L''@/$(GNULIB_LOG2L)/g' \
+	      -e 's/@''GNULIB_LOGB''@/$(GNULIB_LOGB)/g' \
+	      -e 's/@''GNULIB_LOGBF''@/$(GNULIB_LOGBF)/g' \
+	      -e 's/@''GNULIB_LOGBL''@/$(GNULIB_LOGBL)/g' \
+	      -e 's/@''GNULIB_MODF''@/$(GNULIB_MODF)/g' \
+	      -e 's/@''GNULIB_MODFF''@/$(GNULIB_MODFF)/g' \
+	      -e 's/@''GNULIB_MODFL''@/$(GNULIB_MODFL)/g' \
+	      -e 's/@''GNULIB_POWF''@/$(GNULIB_POWF)/g' \
+	      -e 's/@''GNULIB_REMAINDER''@/$(GNULIB_REMAINDER)/g' \
+	      -e 's/@''GNULIB_REMAINDERF''@/$(GNULIB_REMAINDERF)/g' \
+	      -e 's/@''GNULIB_REMAINDERL''@/$(GNULIB_REMAINDERL)/g' \
+	      -e 's/@''GNULIB_RINT''@/$(GNULIB_RINT)/g' \
+	      -e 's/@''GNULIB_RINTF''@/$(GNULIB_RINTF)/g' \
+	      -e 's/@''GNULIB_RINTL''@/$(GNULIB_RINTL)/g' \
+	      -e 's/@''GNULIB_ROUND''@/$(GNULIB_ROUND)/g' \
+	      -e 's/@''GNULIB_ROUNDF''@/$(GNULIB_ROUNDF)/g' \
+	      -e 's/@''GNULIB_ROUNDL''@/$(GNULIB_ROUNDL)/g' \
+	      -e 's/@''GNULIB_SIGNBIT''@/$(GNULIB_SIGNBIT)/g' \
+	      -e 's/@''GNULIB_SINF''@/$(GNULIB_SINF)/g' \
+	      -e 's/@''GNULIB_SINL''@/$(GNULIB_SINL)/g' \
+	      -e 's/@''GNULIB_SINHF''@/$(GNULIB_SINHF)/g' \
+	      -e 's/@''GNULIB_SQRTF''@/$(GNULIB_SQRTF)/g' \
+	      -e 's/@''GNULIB_SQRTL''@/$(GNULIB_SQRTL)/g' \
+	      -e 's/@''GNULIB_TANF''@/$(GNULIB_TANF)/g' \
+	      -e 's/@''GNULIB_TANL''@/$(GNULIB_TANL)/g' \
+	      -e 's/@''GNULIB_TANHF''@/$(GNULIB_TANHF)/g' \
+	      -e 's/@''GNULIB_TRUNC''@/$(GNULIB_TRUNC)/g' \
+	      -e 's/@''GNULIB_TRUNCF''@/$(GNULIB_TRUNCF)/g' \
+	      -e 's/@''GNULIB_TRUNCL''@/$(GNULIB_TRUNCL)/g' \
+	  | \
+	  sed -e 's|@''HAVE_ACOSF''@|$(HAVE_ACOSF)|g' \
+	      -e 's|@''HAVE_ACOSL''@|$(HAVE_ACOSL)|g' \
+	      -e 's|@''HAVE_ASINF''@|$(HAVE_ASINF)|g' \
+	      -e 's|@''HAVE_ASINL''@|$(HAVE_ASINL)|g' \
+	      -e 's|@''HAVE_ATANF''@|$(HAVE_ATANF)|g' \
+	      -e 's|@''HAVE_ATANL''@|$(HAVE_ATANL)|g' \
+	      -e 's|@''HAVE_ATAN2F''@|$(HAVE_ATAN2F)|g' \
+	      -e 's|@''HAVE_CBRT''@|$(HAVE_CBRT)|g' \
+	      -e 's|@''HAVE_CBRTF''@|$(HAVE_CBRTF)|g' \
+	      -e 's|@''HAVE_CBRTL''@|$(HAVE_CBRTL)|g' \
+	      -e 's|@''HAVE_COPYSIGN''@|$(HAVE_COPYSIGN)|g' \
+	      -e 's|@''HAVE_COPYSIGNL''@|$(HAVE_COPYSIGNL)|g' \
+	      -e 's|@''HAVE_COSF''@|$(HAVE_COSF)|g' \
+	      -e 's|@''HAVE_COSL''@|$(HAVE_COSL)|g' \
+	      -e 's|@''HAVE_COSHF''@|$(HAVE_COSHF)|g' \
+	      -e 's|@''HAVE_EXPF''@|$(HAVE_EXPF)|g' \
+	      -e 's|@''HAVE_EXPL''@|$(HAVE_EXPL)|g' \
+	      -e 's|@''HAVE_EXPM1''@|$(HAVE_EXPM1)|g' \
+	      -e 's|@''HAVE_EXPM1F''@|$(HAVE_EXPM1F)|g' \
+	      -e 's|@''HAVE_FABSF''@|$(HAVE_FABSF)|g' \
+	      -e 's|@''HAVE_FABSL''@|$(HAVE_FABSL)|g' \
+	      -e 's|@''HAVE_FMA''@|$(HAVE_FMA)|g' \
+	      -e 's|@''HAVE_FMAF''@|$(HAVE_FMAF)|g' \
+	      -e 's|@''HAVE_FMAL''@|$(HAVE_FMAL)|g' \
+	      -e 's|@''HAVE_FMODF''@|$(HAVE_FMODF)|g' \
+	      -e 's|@''HAVE_FMODL''@|$(HAVE_FMODL)|g' \
+	      -e 's|@''HAVE_FREXPF''@|$(HAVE_FREXPF)|g' \
+	      -e 's|@''HAVE_HYPOTF''@|$(HAVE_HYPOTF)|g' \
+	      -e 's|@''HAVE_HYPOTL''@|$(HAVE_HYPOTL)|g' \
+	      -e 's|@''HAVE_ILOGB''@|$(HAVE_ILOGB)|g' \
+	      -e 's|@''HAVE_ILOGBF''@|$(HAVE_ILOGBF)|g' \
+	      -e 's|@''HAVE_ILOGBL''@|$(HAVE_ILOGBL)|g' \
+	      -e 's|@''HAVE_ISNANF''@|$(HAVE_ISNANF)|g' \
+	      -e 's|@''HAVE_ISNAND''@|$(HAVE_ISNAND)|g' \
+	      -e 's|@''HAVE_ISNANL''@|$(HAVE_ISNANL)|g' \
+	      -e 's|@''HAVE_LDEXPF''@|$(HAVE_LDEXPF)|g' \
+	      -e 's|@''HAVE_LOGF''@|$(HAVE_LOGF)|g' \
+	      -e 's|@''HAVE_LOGL''@|$(HAVE_LOGL)|g' \
+	      -e 's|@''HAVE_LOG10F''@|$(HAVE_LOG10F)|g' \
+	      -e 's|@''HAVE_LOG10L''@|$(HAVE_LOG10L)|g' \
+	      -e 's|@''HAVE_LOG1P''@|$(HAVE_LOG1P)|g' \
+	      -e 's|@''HAVE_LOG1PF''@|$(HAVE_LOG1PF)|g' \
+	      -e 's|@''HAVE_LOG1PL''@|$(HAVE_LOG1PL)|g' \
+	      -e 's|@''HAVE_LOGBF''@|$(HAVE_LOGBF)|g' \
+	      -e 's|@''HAVE_LOGBL''@|$(HAVE_LOGBL)|g' \
+	      -e 's|@''HAVE_MODFF''@|$(HAVE_MODFF)|g' \
+	      -e 's|@''HAVE_MODFL''@|$(HAVE_MODFL)|g' \
+	      -e 's|@''HAVE_POWF''@|$(HAVE_POWF)|g' \
+	      -e 's|@''HAVE_REMAINDER''@|$(HAVE_REMAINDER)|g' \
+	      -e 's|@''HAVE_REMAINDERF''@|$(HAVE_REMAINDERF)|g' \
+	      -e 's|@''HAVE_RINT''@|$(HAVE_RINT)|g' \
+	      -e 's|@''HAVE_RINTL''@|$(HAVE_RINTL)|g' \
+	      -e 's|@''HAVE_SINF''@|$(HAVE_SINF)|g' \
+	      -e 's|@''HAVE_SINL''@|$(HAVE_SINL)|g' \
+	      -e 's|@''HAVE_SINHF''@|$(HAVE_SINHF)|g' \
+	      -e 's|@''HAVE_SQRTF''@|$(HAVE_SQRTF)|g' \
+	      -e 's|@''HAVE_SQRTL''@|$(HAVE_SQRTL)|g' \
+	      -e 's|@''HAVE_TANF''@|$(HAVE_TANF)|g' \
+	      -e 's|@''HAVE_TANL''@|$(HAVE_TANL)|g' \
+	      -e 's|@''HAVE_TANHF''@|$(HAVE_TANHF)|g' \
+	      -e 's|@''HAVE_DECL_ACOSL''@|$(HAVE_DECL_ACOSL)|g' \
+	      -e 's|@''HAVE_DECL_ASINL''@|$(HAVE_DECL_ASINL)|g' \
+	      -e 's|@''HAVE_DECL_ATANL''@|$(HAVE_DECL_ATANL)|g' \
+	      -e 's|@''HAVE_DECL_CBRTF''@|$(HAVE_DECL_CBRTF)|g' \
+	      -e 's|@''HAVE_DECL_CBRTL''@|$(HAVE_DECL_CBRTL)|g' \
+	      -e 's|@''HAVE_DECL_CEILF''@|$(HAVE_DECL_CEILF)|g' \
+	      -e 's|@''HAVE_DECL_CEILL''@|$(HAVE_DECL_CEILL)|g' \
+	      -e 's|@''HAVE_DECL_COPYSIGNF''@|$(HAVE_DECL_COPYSIGNF)|g' \
+	      -e 's|@''HAVE_DECL_COSL''@|$(HAVE_DECL_COSL)|g' \
+	      -e 's|@''HAVE_DECL_EXPL''@|$(HAVE_DECL_EXPL)|g' \
+	      -e 's|@''HAVE_DECL_EXP2''@|$(HAVE_DECL_EXP2)|g' \
+	      -e 's|@''HAVE_DECL_EXP2F''@|$(HAVE_DECL_EXP2F)|g' \
+	      -e 's|@''HAVE_DECL_EXP2L''@|$(HAVE_DECL_EXP2L)|g' \
+	      -e 's|@''HAVE_DECL_EXPM1L''@|$(HAVE_DECL_EXPM1L)|g' \
+	      -e 's|@''HAVE_DECL_FLOORF''@|$(HAVE_DECL_FLOORF)|g' \
+	      -e 's|@''HAVE_DECL_FLOORL''@|$(HAVE_DECL_FLOORL)|g' \
+	      -e 's|@''HAVE_DECL_FREXPL''@|$(HAVE_DECL_FREXPL)|g' \
+	      -e 's|@''HAVE_DECL_LDEXPL''@|$(HAVE_DECL_LDEXPL)|g' \
+	      -e 's|@''HAVE_DECL_LOGL''@|$(HAVE_DECL_LOGL)|g' \
+	      -e 's|@''HAVE_DECL_LOG10L''@|$(HAVE_DECL_LOG10L)|g' \
+	      -e 's|@''HAVE_DECL_LOG2''@|$(HAVE_DECL_LOG2)|g' \
+	      -e 's|@''HAVE_DECL_LOG2F''@|$(HAVE_DECL_LOG2F)|g' \
+	      -e 's|@''HAVE_DECL_LOG2L''@|$(HAVE_DECL_LOG2L)|g' \
+	      -e 's|@''HAVE_DECL_LOGB''@|$(HAVE_DECL_LOGB)|g' \
+	      -e 's|@''HAVE_DECL_REMAINDER''@|$(HAVE_DECL_REMAINDER)|g' \
+	      -e 's|@''HAVE_DECL_REMAINDERL''@|$(HAVE_DECL_REMAINDERL)|g' \
+	      -e 's|@''HAVE_DECL_RINTF''@|$(HAVE_DECL_RINTF)|g' \
+	      -e 's|@''HAVE_DECL_ROUND''@|$(HAVE_DECL_ROUND)|g' \
+	      -e 's|@''HAVE_DECL_ROUNDF''@|$(HAVE_DECL_ROUNDF)|g' \
+	      -e 's|@''HAVE_DECL_ROUNDL''@|$(HAVE_DECL_ROUNDL)|g' \
+	      -e 's|@''HAVE_DECL_SINL''@|$(HAVE_DECL_SINL)|g' \
+	      -e 's|@''HAVE_DECL_SQRTL''@|$(HAVE_DECL_SQRTL)|g' \
+	      -e 's|@''HAVE_DECL_TANL''@|$(HAVE_DECL_TANL)|g' \
+	      -e 's|@''HAVE_DECL_TRUNC''@|$(HAVE_DECL_TRUNC)|g' \
+	      -e 's|@''HAVE_DECL_TRUNCF''@|$(HAVE_DECL_TRUNCF)|g' \
+	      -e 's|@''HAVE_DECL_TRUNCL''@|$(HAVE_DECL_TRUNCL)|g' \
+	  | \
+	  sed -e 's|@''REPLACE_CBRTF''@|$(REPLACE_CBRTF)|g' \
+	      -e 's|@''REPLACE_CBRTL''@|$(REPLACE_CBRTL)|g' \
+	      -e 's|@''REPLACE_CEIL''@|$(REPLACE_CEIL)|g' \
+	      -e 's|@''REPLACE_CEILF''@|$(REPLACE_CEILF)|g' \
+	      -e 's|@''REPLACE_CEILL''@|$(REPLACE_CEILL)|g' \
+	      -e 's|@''REPLACE_EXPM1''@|$(REPLACE_EXPM1)|g' \
+	      -e 's|@''REPLACE_EXPM1F''@|$(REPLACE_EXPM1F)|g' \
+	      -e 's|@''REPLACE_EXP2''@|$(REPLACE_EXP2)|g' \
+	      -e 's|@''REPLACE_EXP2L''@|$(REPLACE_EXP2L)|g' \
+	      -e 's|@''REPLACE_FABSL''@|$(REPLACE_FABSL)|g' \
+	      -e 's|@''REPLACE_FLOOR''@|$(REPLACE_FLOOR)|g' \
+	      -e 's|@''REPLACE_FLOORF''@|$(REPLACE_FLOORF)|g' \
+	      -e 's|@''REPLACE_FLOORL''@|$(REPLACE_FLOORL)|g' \
+	      -e 's|@''REPLACE_FMA''@|$(REPLACE_FMA)|g' \
+	      -e 's|@''REPLACE_FMAF''@|$(REPLACE_FMAF)|g' \
+	      -e 's|@''REPLACE_FMAL''@|$(REPLACE_FMAL)|g' \
+	      -e 's|@''REPLACE_FMOD''@|$(REPLACE_FMOD)|g' \
+	      -e 's|@''REPLACE_FMODF''@|$(REPLACE_FMODF)|g' \
+	      -e 's|@''REPLACE_FMODL''@|$(REPLACE_FMODL)|g' \
+	      -e 's|@''REPLACE_FREXPF''@|$(REPLACE_FREXPF)|g' \
+	      -e 's|@''REPLACE_FREXP''@|$(REPLACE_FREXP)|g' \
+	      -e 's|@''REPLACE_FREXPL''@|$(REPLACE_FREXPL)|g' \
+	      -e 's|@''REPLACE_HUGE_VAL''@|$(REPLACE_HUGE_VAL)|g' \
+	      -e 's|@''REPLACE_HYPOT''@|$(REPLACE_HYPOT)|g' \
+	      -e 's|@''REPLACE_HYPOTF''@|$(REPLACE_HYPOTF)|g' \
+	      -e 's|@''REPLACE_HYPOTL''@|$(REPLACE_HYPOTL)|g' \
+	      -e 's|@''REPLACE_ILOGB''@|$(REPLACE_ILOGB)|g' \
+	      -e 's|@''REPLACE_ILOGBF''@|$(REPLACE_ILOGBF)|g' \
+	      -e 's|@''REPLACE_ISFINITE''@|$(REPLACE_ISFINITE)|g' \
+	      -e 's|@''REPLACE_ISINF''@|$(REPLACE_ISINF)|g' \
+	      -e 's|@''REPLACE_ISNAN''@|$(REPLACE_ISNAN)|g' \
+	      -e 's|@''REPLACE_ITOLD''@|$(REPLACE_ITOLD)|g' \
+	      -e 's|@''REPLACE_LDEXPL''@|$(REPLACE_LDEXPL)|g' \
+	      -e 's|@''REPLACE_LOG''@|$(REPLACE_LOG)|g' \
+	      -e 's|@''REPLACE_LOGF''@|$(REPLACE_LOGF)|g' \
+	      -e 's|@''REPLACE_LOGL''@|$(REPLACE_LOGL)|g' \
+	      -e 's|@''REPLACE_LOG10''@|$(REPLACE_LOG10)|g' \
+	      -e 's|@''REPLACE_LOG10F''@|$(REPLACE_LOG10F)|g' \
+	      -e 's|@''REPLACE_LOG10L''@|$(REPLACE_LOG10L)|g' \
+	      -e 's|@''REPLACE_LOG1P''@|$(REPLACE_LOG1P)|g' \
+	      -e 's|@''REPLACE_LOG1PF''@|$(REPLACE_LOG1PF)|g' \
+	      -e 's|@''REPLACE_LOG1PL''@|$(REPLACE_LOG1PL)|g' \
+	      -e 's|@''REPLACE_LOG2''@|$(REPLACE_LOG2)|g' \
+	      -e 's|@''REPLACE_LOG2F''@|$(REPLACE_LOG2F)|g' \
+	      -e 's|@''REPLACE_LOG2L''@|$(REPLACE_LOG2L)|g' \
+	      -e 's|@''REPLACE_LOGB''@|$(REPLACE_LOGB)|g' \
+	      -e 's|@''REPLACE_LOGBF''@|$(REPLACE_LOGBF)|g' \
+	      -e 's|@''REPLACE_LOGBL''@|$(REPLACE_LOGBL)|g' \
+	      -e 's|@''REPLACE_MODF''@|$(REPLACE_MODF)|g' \
+	      -e 's|@''REPLACE_MODFF''@|$(REPLACE_MODFF)|g' \
+	      -e 's|@''REPLACE_MODFL''@|$(REPLACE_MODFL)|g' \
+	      -e 's|@''REPLACE_NAN''@|$(REPLACE_NAN)|g' \
+	      -e 's|@''REPLACE_REMAINDER''@|$(REPLACE_REMAINDER)|g' \
+	      -e 's|@''REPLACE_REMAINDERF''@|$(REPLACE_REMAINDERF)|g' \
+	      -e 's|@''REPLACE_REMAINDERL''@|$(REPLACE_REMAINDERL)|g' \
+	      -e 's|@''REPLACE_ROUND''@|$(REPLACE_ROUND)|g' \
+	      -e 's|@''REPLACE_ROUNDF''@|$(REPLACE_ROUNDF)|g' \
+	      -e 's|@''REPLACE_ROUNDL''@|$(REPLACE_ROUNDL)|g' \
+	      -e 's|@''REPLACE_SIGNBIT''@|$(REPLACE_SIGNBIT)|g' \
+	      -e 's|@''REPLACE_SIGNBIT_USING_GCC''@|$(REPLACE_SIGNBIT_USING_GCC)|g' \
+	      -e 's|@''REPLACE_SQRTL''@|$(REPLACE_SQRTL)|g' \
+	      -e 's|@''REPLACE_TRUNC''@|$(REPLACE_TRUNC)|g' \
+	      -e 's|@''REPLACE_TRUNCF''@|$(REPLACE_TRUNCF)|g' \
+	      -e 's|@''REPLACE_TRUNCL''@|$(REPLACE_TRUNCL)|g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
+	} > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += math.h math.h-t
+
+EXTRA_DIST += math.in.h
+
+## end   gnulib module math
+
+## begin gnulib module mbrtowc
+
+
+EXTRA_DIST += mbrtowc.c
+
+EXTRA_libgnu_la_SOURCES += mbrtowc.c
+
+## end   gnulib module mbrtowc
+
+## begin gnulib module mbsinit
+
+
+EXTRA_DIST += mbsinit.c
+
+EXTRA_libgnu_la_SOURCES += mbsinit.c
+
+## end   gnulib module mbsinit
+
+## begin gnulib module mbsrtowcs
+
+
+EXTRA_DIST += mbsrtowcs-impl.h mbsrtowcs-state.c mbsrtowcs.c
+
+EXTRA_libgnu_la_SOURCES += mbsrtowcs-state.c mbsrtowcs.c
+
+## end   gnulib module mbsrtowcs
+
+## begin gnulib module memchr
+
+
+EXTRA_DIST += memchr.c memchr.valgrind
+
+EXTRA_libgnu_la_SOURCES += memchr.c
+
+## end   gnulib module memchr
+
+## begin gnulib module mempcpy
+
+
+EXTRA_DIST += mempcpy.c
+
+EXTRA_libgnu_la_SOURCES += mempcpy.c
+
+## end   gnulib module mempcpy
+
+## begin gnulib module memrchr
+
+
+EXTRA_DIST += memrchr.c
+
+EXTRA_libgnu_la_SOURCES += memrchr.c
+
+## end   gnulib module memrchr
+
+## begin gnulib module mkdir
+
+
+EXTRA_DIST += mkdir.c
+
+EXTRA_libgnu_la_SOURCES += mkdir.c
+
+## end   gnulib module mkdir
+
+## begin gnulib module mkfifo
+
+
+EXTRA_DIST += mkfifo.c
+
+EXTRA_libgnu_la_SOURCES += mkfifo.c
+
+## end   gnulib module mkfifo
+
+## begin gnulib module mkostemp
+
+
+EXTRA_DIST += mkostemp.c
+
+EXTRA_libgnu_la_SOURCES += mkostemp.c
+
+## end   gnulib module mkostemp
+
+## begin gnulib module mkstemp
+
+
+EXTRA_DIST += mkstemp.c
+
+EXTRA_libgnu_la_SOURCES += mkstemp.c
+
+## end   gnulib module mkstemp
+
+## begin gnulib module mktime
+
+
+EXTRA_DIST += mktime-internal.h mktime.c
+
+EXTRA_libgnu_la_SOURCES += mktime.c
+
+## end   gnulib module mktime
+
+## begin gnulib module msvc-inval
+
+
+EXTRA_DIST += msvc-inval.c msvc-inval.h
+
+EXTRA_libgnu_la_SOURCES += msvc-inval.c
+
+## end   gnulib module msvc-inval
+
+## begin gnulib module msvc-nothrow
+
+
+EXTRA_DIST += msvc-nothrow.c msvc-nothrow.h
+
+EXTRA_libgnu_la_SOURCES += msvc-nothrow.c
+
+## end   gnulib module msvc-nothrow
+
+## begin gnulib module nanosleep
+
+
+EXTRA_DIST += nanosleep.c
+
+EXTRA_libgnu_la_SOURCES += nanosleep.c
+
+## end   gnulib module nanosleep
+
+## begin gnulib module nproc
+
+libgnu_la_SOURCES += nproc.c
+
+EXTRA_DIST += nproc.h
+
+## end   gnulib module nproc
+
+## begin gnulib module open
+
+
+EXTRA_DIST += open.c
+
+EXTRA_libgnu_la_SOURCES += open.c
+
+## end   gnulib module open
+
+## begin gnulib module openat
+
+
+EXTRA_DIST += openat-priv.h openat.c
+
+EXTRA_libgnu_la_SOURCES += openat.c
+
+## end   gnulib module openat
+
+## begin gnulib module openat-die
+
+libgnu_la_SOURCES += openat-die.c
+
+## end   gnulib module openat-die
+
+## begin gnulib module openat-h
+
+
+EXTRA_DIST += openat.h
+
+## end   gnulib module openat-h
+
+## begin gnulib module opendir
+
+
+EXTRA_DIST += dirent-private.h opendir.c
+
+EXTRA_libgnu_la_SOURCES += opendir.c
+
+## end   gnulib module opendir
+
+## begin gnulib module pathmax
+
+
+EXTRA_DIST += pathmax.h
+
+## end   gnulib module pathmax
+
+## begin gnulib module progname
+
+libgnu_la_SOURCES += progname.h progname.c
+
+## end   gnulib module progname
+
+## begin gnulib module raise
+
+
+EXTRA_DIST += raise.c
+
+EXTRA_libgnu_la_SOURCES += raise.c
+
+## end   gnulib module raise
+
+## begin gnulib module readdir
+
+
+EXTRA_DIST += dirent-private.h readdir.c
+
+EXTRA_libgnu_la_SOURCES += readdir.c
+
+## end   gnulib module readdir
+
+## begin gnulib module readlink
+
+
+EXTRA_DIST += readlink.c
+
+EXTRA_libgnu_la_SOURCES += readlink.c
+
+## end   gnulib module readlink
+
+## begin gnulib module realloc-posix
+
+
+EXTRA_DIST += realloc.c
+
+EXTRA_libgnu_la_SOURCES += realloc.c
+
+## end   gnulib module realloc-posix
+
+## begin gnulib module rename
+
+
+EXTRA_DIST += rename.c
+
+EXTRA_libgnu_la_SOURCES += rename.c
+
+## end   gnulib module rename
+
+## begin gnulib module rewinddir
+
+
+EXTRA_DIST += dirent-private.h rewinddir.c
+
+EXTRA_libgnu_la_SOURCES += rewinddir.c
+
+## end   gnulib module rewinddir
+
+## begin gnulib module rmdir
+
+
+EXTRA_DIST += rmdir.c
+
+EXTRA_libgnu_la_SOURCES += rmdir.c
+
+## end   gnulib module rmdir
+
+## begin gnulib module round
+
+
+EXTRA_DIST += round.c
+
+EXTRA_libgnu_la_SOURCES += round.c
+
+## end   gnulib module round
+
+## begin gnulib module roundf
+
+
+EXTRA_DIST += round.c roundf.c
+
+EXTRA_libgnu_la_SOURCES += round.c roundf.c
+
+## end   gnulib module roundf
+
+## begin gnulib module same-inode
+
+
+EXTRA_DIST += same-inode.h
+
+## end   gnulib module same-inode
+
+## begin gnulib module save-cwd
+
+libgnu_la_SOURCES += save-cwd.c
+
+EXTRA_DIST += save-cwd.h
+
+## end   gnulib module save-cwd
+
+## begin gnulib module select
+
+
+EXTRA_DIST += select.c
+
+EXTRA_libgnu_la_SOURCES += select.c
+
+## end   gnulib module select
+
+## begin gnulib module sigaction
+
+
+EXTRA_DIST += sig-handler.h sigaction.c
+
+EXTRA_libgnu_la_SOURCES += sigaction.c
+
+## end   gnulib module sigaction
+
+## begin gnulib module signal-h
+
+BUILT_SOURCES += signal.h
+
+# We need the following in order to create <signal.h> when the system
+# doesn't have a complete one.
+signal.h: signal.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_SIGNAL_H''@|$(NEXT_SIGNAL_H)|g' \
+	      -e 's|@''GNULIB_PTHREAD_SIGMASK''@|$(GNULIB_PTHREAD_SIGMASK)|g' \
+	      -e 's|@''GNULIB_RAISE''@|$(GNULIB_RAISE)|g' \
+	      -e 's/@''GNULIB_SIGNAL_H_SIGPIPE''@/$(GNULIB_SIGNAL_H_SIGPIPE)/g' \
+	      -e 's/@''GNULIB_SIGPROCMASK''@/$(GNULIB_SIGPROCMASK)/g' \
+	      -e 's/@''GNULIB_SIGACTION''@/$(GNULIB_SIGACTION)/g' \
+	      -e 's|@''HAVE_POSIX_SIGNALBLOCKING''@|$(HAVE_POSIX_SIGNALBLOCKING)|g' \
+	      -e 's|@''HAVE_PTHREAD_SIGMASK''@|$(HAVE_PTHREAD_SIGMASK)|g' \
+	      -e 's|@''HAVE_RAISE''@|$(HAVE_RAISE)|g' \
+	      -e 's|@''HAVE_SIGSET_T''@|$(HAVE_SIGSET_T)|g' \
+	      -e 's|@''HAVE_SIGINFO_T''@|$(HAVE_SIGINFO_T)|g' \
+	      -e 's|@''HAVE_SIGACTION''@|$(HAVE_SIGACTION)|g' \
+	      -e 's|@''HAVE_STRUCT_SIGACTION_SA_SIGACTION''@|$(HAVE_STRUCT_SIGACTION_SA_SIGACTION)|g' \
+	      -e 's|@''HAVE_TYPE_VOLATILE_SIG_ATOMIC_T''@|$(HAVE_TYPE_VOLATILE_SIG_ATOMIC_T)|g' \
+	      -e 's|@''HAVE_SIGHANDLER_T''@|$(HAVE_SIGHANDLER_T)|g' \
+	      -e 's|@''REPLACE_PTHREAD_SIGMASK''@|$(REPLACE_PTHREAD_SIGMASK)|g' \
+	      -e 's|@''REPLACE_RAISE''@|$(REPLACE_RAISE)|g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+	      < $(srcdir)/signal.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += signal.h signal.h-t
+
+EXTRA_DIST += signal.in.h
+
+## end   gnulib module signal-h
+
+## begin gnulib module signbit
+
+
+EXTRA_DIST += float+.h signbitd.c signbitf.c signbitl.c
+
+EXTRA_libgnu_la_SOURCES += signbitd.c signbitf.c signbitl.c
+
+## end   gnulib module signbit
+
+## begin gnulib module sigprocmask
+
+
+EXTRA_DIST += sigprocmask.c
+
+EXTRA_libgnu_la_SOURCES += sigprocmask.c
+
+## end   gnulib module sigprocmask
+
+## begin gnulib module size_max
+
+libgnu_la_SOURCES += size_max.h
+
+## end   gnulib module size_max
+
+## begin gnulib module sleep
+
+
+EXTRA_DIST += sleep.c
+
+EXTRA_libgnu_la_SOURCES += sleep.c
+
+## end   gnulib module sleep
+
+## begin gnulib module snippet/_Noreturn
+
+# Because this Makefile snippet defines a variable used by other
+# gnulib Makefile snippets, it must be present in all Makefile.am that
+# need it. This is ensured by the applicability 'all' defined above.
+
+_NORETURN_H=$(top_srcdir)/build-aux/snippet/_Noreturn.h
+
+EXTRA_DIST += $(top_srcdir)/build-aux/snippet/_Noreturn.h
+
+## end   gnulib module snippet/_Noreturn
+
+## begin gnulib module snippet/arg-nonnull
+
+# The BUILT_SOURCES created by this Makefile snippet are not used via #include
+# statements but through direct file reference. Therefore this snippet must be
+# present in all Makefile.am that need it. This is ensured by the applicability
+# 'all' defined above.
+
+BUILT_SOURCES += arg-nonnull.h
+# The arg-nonnull.h that gets inserted into generated .h files is the same as
+# build-aux/snippet/arg-nonnull.h, except that it has the copyright header cut
+# off.
+arg-nonnull.h: $(top_srcdir)/build-aux/snippet/arg-nonnull.h
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	sed -n -e '/GL_ARG_NONNULL/,$$p' \
+	  < $(top_srcdir)/build-aux/snippet/arg-nonnull.h \
+	  > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += arg-nonnull.h arg-nonnull.h-t
+
+ARG_NONNULL_H=arg-nonnull.h
+
+EXTRA_DIST += $(top_srcdir)/build-aux/snippet/arg-nonnull.h
+
+## end   gnulib module snippet/arg-nonnull
+
+## begin gnulib module snippet/c++defs
+
+# The BUILT_SOURCES created by this Makefile snippet are not used via #include
+# statements but through direct file reference. Therefore this snippet must be
+# present in all Makefile.am that need it. This is ensured by the applicability
+# 'all' defined above.
+
+BUILT_SOURCES += c++defs.h
+# The c++defs.h that gets inserted into generated .h files is the same as
+# build-aux/snippet/c++defs.h, except that it has the copyright header cut off.
+c++defs.h: $(top_srcdir)/build-aux/snippet/c++defs.h
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	sed -n -e '/_GL_CXXDEFS/,$$p' \
+	  < $(top_srcdir)/build-aux/snippet/c++defs.h \
+	  > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += c++defs.h c++defs.h-t
+
+CXXDEFS_H=c++defs.h
+
+EXTRA_DIST += $(top_srcdir)/build-aux/snippet/c++defs.h
+
+## end   gnulib module snippet/c++defs
+
+## begin gnulib module snippet/unused-parameter
+
+# The BUILT_SOURCES created by this Makefile snippet are not used via #include
+# statements but through direct file reference. Therefore this snippet must be
+# present in all Makefile.am that need it. This is ensured by the applicability
+# 'all' defined above.
+
+BUILT_SOURCES += unused-parameter.h
+# The unused-parameter.h that gets inserted into generated .h files is the same
+# as build-aux/snippet/unused-parameter.h, except that it has the copyright
+# header cut off.
+unused-parameter.h: $(top_srcdir)/build-aux/snippet/unused-parameter.h
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	sed -n -e '/GL_UNUSED_PARAMETER/,$$p' \
+	  < $(top_srcdir)/build-aux/snippet/unused-parameter.h \
+	  > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += unused-parameter.h unused-parameter.h-t
+
+UNUSED_PARAMETER_H=unused-parameter.h
+
+EXTRA_DIST += $(top_srcdir)/build-aux/snippet/unused-parameter.h
+
+## end   gnulib module snippet/unused-parameter
+
+## begin gnulib module snippet/warn-on-use
+
+BUILT_SOURCES += warn-on-use.h
+# The warn-on-use.h that gets inserted into generated .h files is the same as
+# build-aux/snippet/warn-on-use.h, except that it has the copyright header cut
+# off.
+warn-on-use.h: $(top_srcdir)/build-aux/snippet/warn-on-use.h
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	sed -n -e '/^.ifndef/,$$p' \
+	  < $(top_srcdir)/build-aux/snippet/warn-on-use.h \
+	  > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += warn-on-use.h warn-on-use.h-t
+
+WARN_ON_USE_H=warn-on-use.h
+
+EXTRA_DIST += $(top_srcdir)/build-aux/snippet/warn-on-use.h
+
+## end   gnulib module snippet/warn-on-use
+
+## begin gnulib module sockets
+
+libgnu_la_SOURCES += sockets.h sockets.c
+
+EXTRA_DIST += w32sock.h
+
+## end   gnulib module sockets
+
+## begin gnulib module stat
+
+
+EXTRA_DIST += stat.c
+
+EXTRA_libgnu_la_SOURCES += stat.c
+
+## end   gnulib module stat
+
+## begin gnulib module stdalign
+
+BUILT_SOURCES += $(STDALIGN_H)
+
+# We need the following in order to create <stdalign.h> when the system
+# doesn't have one that works.
+if GL_GENERATE_STDALIGN_H
+stdalign.h: stdalign.in.h $(top_builddir)/config.status
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  cat $(srcdir)/stdalign.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+else
+stdalign.h: $(top_builddir)/config.status
+	rm -f $@
+endif
+MOSTLYCLEANFILES += stdalign.h stdalign.h-t
+
+EXTRA_DIST += stdalign.in.h
+
+## end   gnulib module stdalign
+
+## begin gnulib module stdbool
+
+BUILT_SOURCES += $(STDBOOL_H)
+
+# We need the following in order to create <stdbool.h> when the system
+# doesn't have one that works.
+if GL_GENERATE_STDBOOL_H
+stdbool.h: stdbool.in.h $(top_builddir)/config.status
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+else
+stdbool.h: $(top_builddir)/config.status
+	rm -f $@
+endif
+MOSTLYCLEANFILES += stdbool.h stdbool.h-t
+
+EXTRA_DIST += stdbool.in.h
+
+## end   gnulib module stdbool
+
+## begin gnulib module stddef
+
+BUILT_SOURCES += $(STDDEF_H)
+
+# We need the following in order to create <stddef.h> when the system
+# doesn't have one that works with the given compiler.
+if GL_GENERATE_STDDEF_H
+stddef.h: stddef.in.h $(top_builddir)/config.status
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \
+	      -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \
+	      -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \
+	      < $(srcdir)/stddef.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+else
+stddef.h: $(top_builddir)/config.status
+	rm -f $@
+endif
+MOSTLYCLEANFILES += stddef.h stddef.h-t
+
+EXTRA_DIST += stddef.in.h
+
+## end   gnulib module stddef
+
+## begin gnulib module stdint
+
+BUILT_SOURCES += $(STDINT_H)
+
+# We need the following in order to create <stdint.h> when the system
+# doesn't have one that works with the given compiler.
+if GL_GENERATE_STDINT_H
+stdint.h: stdint.in.h $(top_builddir)/config.status
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \
+	      -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \
+	      -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
+	      -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \
+	      -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \
+	      -e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \
+	      -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \
+	      -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \
+	      -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \
+	      -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \
+	      -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \
+	      -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \
+	      -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \
+	      -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \
+	      -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \
+	      -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \
+	      -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \
+	      -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \
+	      -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \
+	      -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \
+	      -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \
+	      -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \
+	      < $(srcdir)/stdint.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+else
+stdint.h: $(top_builddir)/config.status
+	rm -f $@
+endif
+MOSTLYCLEANFILES += stdint.h stdint.h-t
+
+EXTRA_DIST += stdint.in.h
+
+## end   gnulib module stdint
+
+## begin gnulib module stdio
+
+BUILT_SOURCES += stdio.h
+
+# We need the following in order to create <stdio.h> when the system
+# doesn't have one that works with the given compiler.
+stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_STDIO_H''@|$(NEXT_STDIO_H)|g' \
+	      -e 's/@''GNULIB_DPRINTF''@/$(GNULIB_DPRINTF)/g' \
+	      -e 's/@''GNULIB_FCLOSE''@/$(GNULIB_FCLOSE)/g' \
+	      -e 's/@''GNULIB_FDOPEN''@/$(GNULIB_FDOPEN)/g' \
+	      -e 's/@''GNULIB_FFLUSH''@/$(GNULIB_FFLUSH)/g' \
+	      -e 's/@''GNULIB_FGETC''@/$(GNULIB_FGETC)/g' \
+	      -e 's/@''GNULIB_FGETS''@/$(GNULIB_FGETS)/g' \
+	      -e 's/@''GNULIB_FOPEN''@/$(GNULIB_FOPEN)/g' \
+	      -e 's/@''GNULIB_FPRINTF''@/$(GNULIB_FPRINTF)/g' \
+	      -e 's/@''GNULIB_FPRINTF_POSIX''@/$(GNULIB_FPRINTF_POSIX)/g' \
+	      -e 's/@''GNULIB_FPURGE''@/$(GNULIB_FPURGE)/g' \
+	      -e 's/@''GNULIB_FPUTC''@/$(GNULIB_FPUTC)/g' \
+	      -e 's/@''GNULIB_FPUTS''@/$(GNULIB_FPUTS)/g' \
+	      -e 's/@''GNULIB_FREAD''@/$(GNULIB_FREAD)/g' \
+	      -e 's/@''GNULIB_FREOPEN''@/$(GNULIB_FREOPEN)/g' \
+	      -e 's/@''GNULIB_FSCANF''@/$(GNULIB_FSCANF)/g' \
+	      -e 's/@''GNULIB_FSEEK''@/$(GNULIB_FSEEK)/g' \
+	      -e 's/@''GNULIB_FSEEKO''@/$(GNULIB_FSEEKO)/g' \
+	      -e 's/@''GNULIB_FTELL''@/$(GNULIB_FTELL)/g' \
+	      -e 's/@''GNULIB_FTELLO''@/$(GNULIB_FTELLO)/g' \
+	      -e 's/@''GNULIB_FWRITE''@/$(GNULIB_FWRITE)/g' \
+	      -e 's/@''GNULIB_GETC''@/$(GNULIB_GETC)/g' \
+	      -e 's/@''GNULIB_GETCHAR''@/$(GNULIB_GETCHAR)/g' \
+	      -e 's/@''GNULIB_GETDELIM''@/$(GNULIB_GETDELIM)/g' \
+	      -e 's/@''GNULIB_GETLINE''@/$(GNULIB_GETLINE)/g' \
+	      -e 's/@''GNULIB_OBSTACK_PRINTF''@/$(GNULIB_OBSTACK_PRINTF)/g' \
+	      -e 's/@''GNULIB_OBSTACK_PRINTF_POSIX''@/$(GNULIB_OBSTACK_PRINTF_POSIX)/g' \
+	      -e 's/@''GNULIB_PCLOSE''@/$(GNULIB_PCLOSE)/g' \
+	      -e 's/@''GNULIB_PERROR''@/$(GNULIB_PERROR)/g' \
+	      -e 's/@''GNULIB_POPEN''@/$(GNULIB_POPEN)/g' \
+	      -e 's/@''GNULIB_PRINTF''@/$(GNULIB_PRINTF)/g' \
+	      -e 's/@''GNULIB_PRINTF_POSIX''@/$(GNULIB_PRINTF_POSIX)/g' \
+	      -e 's/@''GNULIB_PUTC''@/$(GNULIB_PUTC)/g' \
+	      -e 's/@''GNULIB_PUTCHAR''@/$(GNULIB_PUTCHAR)/g' \
+	      -e 's/@''GNULIB_PUTS''@/$(GNULIB_PUTS)/g' \
+	      -e 's/@''GNULIB_REMOVE''@/$(GNULIB_REMOVE)/g' \
+	      -e 's/@''GNULIB_RENAME''@/$(GNULIB_RENAME)/g' \
+	      -e 's/@''GNULIB_RENAMEAT''@/$(GNULIB_RENAMEAT)/g' \
+	      -e 's/@''GNULIB_SCANF''@/$(GNULIB_SCANF)/g' \
+	      -e 's/@''GNULIB_SNPRINTF''@/$(GNULIB_SNPRINTF)/g' \
+	      -e 's/@''GNULIB_SPRINTF_POSIX''@/$(GNULIB_SPRINTF_POSIX)/g' \
+	      -e 's/@''GNULIB_STDIO_H_NONBLOCKING''@/$(GNULIB_STDIO_H_NONBLOCKING)/g' \
+	      -e 's/@''GNULIB_STDIO_H_SIGPIPE''@/$(GNULIB_STDIO_H_SIGPIPE)/g' \
+	      -e 's/@''GNULIB_TMPFILE''@/$(GNULIB_TMPFILE)/g' \
+	      -e 's/@''GNULIB_VASPRINTF''@/$(GNULIB_VASPRINTF)/g' \
+	      -e 's/@''GNULIB_VDPRINTF''@/$(GNULIB_VDPRINTF)/g' \
+	      -e 's/@''GNULIB_VFPRINTF''@/$(GNULIB_VFPRINTF)/g' \
+	      -e 's/@''GNULIB_VFPRINTF_POSIX''@/$(GNULIB_VFPRINTF_POSIX)/g' \
+	      -e 's/@''GNULIB_VFSCANF''@/$(GNULIB_VFSCANF)/g' \
+	      -e 's/@''GNULIB_VSCANF''@/$(GNULIB_VSCANF)/g' \
+	      -e 's/@''GNULIB_VPRINTF''@/$(GNULIB_VPRINTF)/g' \
+	      -e 's/@''GNULIB_VPRINTF_POSIX''@/$(GNULIB_VPRINTF_POSIX)/g' \
+	      -e 's/@''GNULIB_VSNPRINTF''@/$(GNULIB_VSNPRINTF)/g' \
+	      -e 's/@''GNULIB_VSPRINTF_POSIX''@/$(GNULIB_VSPRINTF_POSIX)/g' \
+	      < $(srcdir)/stdio.in.h | \
+	  sed -e 's|@''HAVE_DECL_FPURGE''@|$(HAVE_DECL_FPURGE)|g' \
+	      -e 's|@''HAVE_DECL_FSEEKO''@|$(HAVE_DECL_FSEEKO)|g' \
+	      -e 's|@''HAVE_DECL_FTELLO''@|$(HAVE_DECL_FTELLO)|g' \
+	      -e 's|@''HAVE_DECL_GETDELIM''@|$(HAVE_DECL_GETDELIM)|g' \
+	      -e 's|@''HAVE_DECL_GETLINE''@|$(HAVE_DECL_GETLINE)|g' \
+	      -e 's|@''HAVE_DECL_OBSTACK_PRINTF''@|$(HAVE_DECL_OBSTACK_PRINTF)|g' \
+	      -e 's|@''HAVE_DECL_SNPRINTF''@|$(HAVE_DECL_SNPRINTF)|g' \
+	      -e 's|@''HAVE_DECL_VSNPRINTF''@|$(HAVE_DECL_VSNPRINTF)|g' \
+	      -e 's|@''HAVE_DPRINTF''@|$(HAVE_DPRINTF)|g' \
+	      -e 's|@''HAVE_FSEEKO''@|$(HAVE_FSEEKO)|g' \
+	      -e 's|@''HAVE_FTELLO''@|$(HAVE_FTELLO)|g' \
+	      -e 's|@''HAVE_PCLOSE''@|$(HAVE_PCLOSE)|g' \
+	      -e 's|@''HAVE_POPEN''@|$(HAVE_POPEN)|g' \
+	      -e 's|@''HAVE_RENAMEAT''@|$(HAVE_RENAMEAT)|g' \
+	      -e 's|@''HAVE_VASPRINTF''@|$(HAVE_VASPRINTF)|g' \
+	      -e 's|@''HAVE_VDPRINTF''@|$(HAVE_VDPRINTF)|g' \
+	      -e 's|@''REPLACE_DPRINTF''@|$(REPLACE_DPRINTF)|g' \
+	      -e 's|@''REPLACE_FCLOSE''@|$(REPLACE_FCLOSE)|g' \
+	      -e 's|@''REPLACE_FDOPEN''@|$(REPLACE_FDOPEN)|g' \
+	      -e 's|@''REPLACE_FFLUSH''@|$(REPLACE_FFLUSH)|g' \
+	      -e 's|@''REPLACE_FOPEN''@|$(REPLACE_FOPEN)|g' \
+	      -e 's|@''REPLACE_FPRINTF''@|$(REPLACE_FPRINTF)|g' \
+	      -e 's|@''REPLACE_FPURGE''@|$(REPLACE_FPURGE)|g' \
+	      -e 's|@''REPLACE_FREOPEN''@|$(REPLACE_FREOPEN)|g' \
+	      -e 's|@''REPLACE_FSEEK''@|$(REPLACE_FSEEK)|g' \
+	      -e 's|@''REPLACE_FSEEKO''@|$(REPLACE_FSEEKO)|g' \
+	      -e 's|@''REPLACE_FTELL''@|$(REPLACE_FTELL)|g' \
+	      -e 's|@''REPLACE_FTELLO''@|$(REPLACE_FTELLO)|g' \
+	      -e 's|@''REPLACE_GETDELIM''@|$(REPLACE_GETDELIM)|g' \
+	      -e 's|@''REPLACE_GETLINE''@|$(REPLACE_GETLINE)|g' \
+	      -e 's|@''REPLACE_OBSTACK_PRINTF''@|$(REPLACE_OBSTACK_PRINTF)|g' \
+	      -e 's|@''REPLACE_PERROR''@|$(REPLACE_PERROR)|g' \
+	      -e 's|@''REPLACE_POPEN''@|$(REPLACE_POPEN)|g' \
+	      -e 's|@''REPLACE_PRINTF''@|$(REPLACE_PRINTF)|g' \
+	      -e 's|@''REPLACE_REMOVE''@|$(REPLACE_REMOVE)|g' \
+	      -e 's|@''REPLACE_RENAME''@|$(REPLACE_RENAME)|g' \
+	      -e 's|@''REPLACE_RENAMEAT''@|$(REPLACE_RENAMEAT)|g' \
+	      -e 's|@''REPLACE_SNPRINTF''@|$(REPLACE_SNPRINTF)|g' \
+	      -e 's|@''REPLACE_SPRINTF''@|$(REPLACE_SPRINTF)|g' \
+	      -e 's|@''REPLACE_STDIO_READ_FUNCS''@|$(REPLACE_STDIO_READ_FUNCS)|g' \
+	      -e 's|@''REPLACE_STDIO_WRITE_FUNCS''@|$(REPLACE_STDIO_WRITE_FUNCS)|g' \
+	      -e 's|@''REPLACE_TMPFILE''@|$(REPLACE_TMPFILE)|g' \
+	      -e 's|@''REPLACE_VASPRINTF''@|$(REPLACE_VASPRINTF)|g' \
+	      -e 's|@''REPLACE_VDPRINTF''@|$(REPLACE_VDPRINTF)|g' \
+	      -e 's|@''REPLACE_VFPRINTF''@|$(REPLACE_VFPRINTF)|g' \
+	      -e 's|@''REPLACE_VPRINTF''@|$(REPLACE_VPRINTF)|g' \
+	      -e 's|@''REPLACE_VSNPRINTF''@|$(REPLACE_VSNPRINTF)|g' \
+	      -e 's|@''REPLACE_VSPRINTF''@|$(REPLACE_VSPRINTF)|g' \
+	      -e 's|@''ASM_SYMBOL_PREFIX''@|$(ASM_SYMBOL_PREFIX)|g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
+	} > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += stdio.h stdio.h-t
+
+EXTRA_DIST += stdio.in.h
+
+## end   gnulib module stdio
+
+## begin gnulib module stdlib
+
+BUILT_SOURCES += stdlib.h
+
+# We need the following in order to create <stdlib.h> when the system
+# doesn't have one that works with the given compiler.
+stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \
+  $(_NORETURN_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|g' \
+	      -e 's/@''GNULIB__EXIT''@/$(GNULIB__EXIT)/g' \
+	      -e 's/@''GNULIB_ATOLL''@/$(GNULIB_ATOLL)/g' \
+	      -e 's/@''GNULIB_CALLOC_POSIX''@/$(GNULIB_CALLOC_POSIX)/g' \
+	      -e 's/@''GNULIB_CANONICALIZE_FILE_NAME''@/$(GNULIB_CANONICALIZE_FILE_NAME)/g' \
+	      -e 's/@''GNULIB_GETLOADAVG''@/$(GNULIB_GETLOADAVG)/g' \
+	      -e 's/@''GNULIB_GETSUBOPT''@/$(GNULIB_GETSUBOPT)/g' \
+	      -e 's/@''GNULIB_GRANTPT''@/$(GNULIB_GRANTPT)/g' \
+	      -e 's/@''GNULIB_MALLOC_POSIX''@/$(GNULIB_MALLOC_POSIX)/g' \
+	      -e 's/@''GNULIB_MBTOWC''@/$(GNULIB_MBTOWC)/g' \
+	      -e 's/@''GNULIB_MKDTEMP''@/$(GNULIB_MKDTEMP)/g' \
+	      -e 's/@''GNULIB_MKOSTEMP''@/$(GNULIB_MKOSTEMP)/g' \
+	      -e 's/@''GNULIB_MKOSTEMPS''@/$(GNULIB_MKOSTEMPS)/g' \
+	      -e 's/@''GNULIB_MKSTEMP''@/$(GNULIB_MKSTEMP)/g' \
+	      -e 's/@''GNULIB_MKSTEMPS''@/$(GNULIB_MKSTEMPS)/g' \
+	      -e 's/@''GNULIB_POSIX_OPENPT''@/$(GNULIB_POSIX_OPENPT)/g' \
+	      -e 's/@''GNULIB_PTSNAME''@/$(GNULIB_PTSNAME)/g' \
+	      -e 's/@''GNULIB_PTSNAME_R''@/$(GNULIB_PTSNAME_R)/g' \
+	      -e 's/@''GNULIB_PUTENV''@/$(GNULIB_PUTENV)/g' \
+	      -e 's/@''GNULIB_RANDOM''@/$(GNULIB_RANDOM)/g' \
+	      -e 's/@''GNULIB_RANDOM_R''@/$(GNULIB_RANDOM_R)/g' \
+	      -e 's/@''GNULIB_REALLOC_POSIX''@/$(GNULIB_REALLOC_POSIX)/g' \
+	      -e 's/@''GNULIB_REALPATH''@/$(GNULIB_REALPATH)/g' \
+	      -e 's/@''GNULIB_RPMATCH''@/$(GNULIB_RPMATCH)/g' \
+	      -e 's/@''GNULIB_SETENV''@/$(GNULIB_SETENV)/g' \
+	      -e 's/@''GNULIB_STRTOD''@/$(GNULIB_STRTOD)/g' \
+	      -e 's/@''GNULIB_STRTOLL''@/$(GNULIB_STRTOLL)/g' \
+	      -e 's/@''GNULIB_STRTOULL''@/$(GNULIB_STRTOULL)/g' \
+	      -e 's/@''GNULIB_SYSTEM_POSIX''@/$(GNULIB_SYSTEM_POSIX)/g' \
+	      -e 's/@''GNULIB_UNLOCKPT''@/$(GNULIB_UNLOCKPT)/g' \
+	      -e 's/@''GNULIB_UNSETENV''@/$(GNULIB_UNSETENV)/g' \
+	      -e 's/@''GNULIB_WCTOMB''@/$(GNULIB_WCTOMB)/g' \
+	      < $(srcdir)/stdlib.in.h | \
+	  sed -e 's|@''HAVE__EXIT''@|$(HAVE__EXIT)|g' \
+	      -e 's|@''HAVE_ATOLL''@|$(HAVE_ATOLL)|g' \
+	      -e 's|@''HAVE_CANONICALIZE_FILE_NAME''@|$(HAVE_CANONICALIZE_FILE_NAME)|g' \
+	      -e 's|@''HAVE_DECL_GETLOADAVG''@|$(HAVE_DECL_GETLOADAVG)|g' \
+	      -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \
+	      -e 's|@''HAVE_GRANTPT''@|$(HAVE_GRANTPT)|g' \
+	      -e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \
+	      -e 's|@''HAVE_MKOSTEMP''@|$(HAVE_MKOSTEMP)|g' \
+	      -e 's|@''HAVE_MKOSTEMPS''@|$(HAVE_MKOSTEMPS)|g' \
+	      -e 's|@''HAVE_MKSTEMP''@|$(HAVE_MKSTEMP)|g' \
+	      -e 's|@''HAVE_MKSTEMPS''@|$(HAVE_MKSTEMPS)|g' \
+	      -e 's|@''HAVE_POSIX_OPENPT''@|$(HAVE_POSIX_OPENPT)|g' \
+	      -e 's|@''HAVE_PTSNAME''@|$(HAVE_PTSNAME)|g' \
+	      -e 's|@''HAVE_PTSNAME_R''@|$(HAVE_PTSNAME_R)|g' \
+	      -e 's|@''HAVE_RANDOM''@|$(HAVE_RANDOM)|g' \
+	      -e 's|@''HAVE_RANDOM_H''@|$(HAVE_RANDOM_H)|g' \
+	      -e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \
+	      -e 's|@''HAVE_REALPATH''@|$(HAVE_REALPATH)|g' \
+	      -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \
+	      -e 's|@''HAVE_DECL_SETENV''@|$(HAVE_DECL_SETENV)|g' \
+	      -e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \
+	      -e 's|@''HAVE_STRTOLL''@|$(HAVE_STRTOLL)|g' \
+	      -e 's|@''HAVE_STRTOULL''@|$(HAVE_STRTOULL)|g' \
+	      -e 's|@''HAVE_STRUCT_RANDOM_DATA''@|$(HAVE_STRUCT_RANDOM_DATA)|g' \
+	      -e 's|@''HAVE_SYS_LOADAVG_H''@|$(HAVE_SYS_LOADAVG_H)|g' \
+	      -e 's|@''HAVE_UNLOCKPT''@|$(HAVE_UNLOCKPT)|g' \
+	      -e 's|@''HAVE_DECL_UNSETENV''@|$(HAVE_DECL_UNSETENV)|g' \
+	      -e 's|@''REPLACE_CALLOC''@|$(REPLACE_CALLOC)|g' \
+	      -e 's|@''REPLACE_CANONICALIZE_FILE_NAME''@|$(REPLACE_CANONICALIZE_FILE_NAME)|g' \
+	      -e 's|@''REPLACE_MALLOC''@|$(REPLACE_MALLOC)|g' \
+	      -e 's|@''REPLACE_MBTOWC''@|$(REPLACE_MBTOWC)|g' \
+	      -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \
+	      -e 's|@''REPLACE_PTSNAME_R''@|$(REPLACE_PTSNAME_R)|g' \
+	      -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \
+	      -e 's|@''REPLACE_RANDOM_R''@|$(REPLACE_RANDOM_R)|g' \
+	      -e 's|@''REPLACE_REALLOC''@|$(REPLACE_REALLOC)|g' \
+	      -e 's|@''REPLACE_REALPATH''@|$(REPLACE_REALPATH)|g' \
+	      -e 's|@''REPLACE_SETENV''@|$(REPLACE_SETENV)|g' \
+	      -e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \
+	      -e 's|@''REPLACE_UNSETENV''@|$(REPLACE_UNSETENV)|g' \
+	      -e 's|@''REPLACE_WCTOMB''@|$(REPLACE_WCTOMB)|g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _Noreturn/r $(_NORETURN_H)' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
+	} > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += stdlib.h stdlib.h-t
+
+EXTRA_DIST += stdlib.in.h
+
+## end   gnulib module stdlib
+
+## begin gnulib module strcase
+
+
+EXTRA_DIST += strcasecmp.c strncasecmp.c
+
+EXTRA_libgnu_la_SOURCES += strcasecmp.c strncasecmp.c
+
+## end   gnulib module strcase
+
+## begin gnulib module strdup-posix
+
+
+EXTRA_DIST += strdup.c
+
+EXTRA_libgnu_la_SOURCES += strdup.c
+
+## end   gnulib module strdup-posix
+
+## begin gnulib module streq
+
+
+EXTRA_DIST += streq.h
+
+## end   gnulib module streq
+
+## begin gnulib module strerror
+
+
+EXTRA_DIST += strerror.c
+
+EXTRA_libgnu_la_SOURCES += strerror.c
+
+## end   gnulib module strerror
+
+## begin gnulib module strerror-override
+
+
+EXTRA_DIST += strerror-override.c strerror-override.h
+
+EXTRA_libgnu_la_SOURCES += strerror-override.c
+
+## end   gnulib module strerror-override
+
+## begin gnulib module strftime
+
+libgnu_la_SOURCES += strftime.c
+
+EXTRA_DIST += strftime.h
+
+## end   gnulib module strftime
+
+## begin gnulib module string
+
+BUILT_SOURCES += string.h
+
+# We need the following in order to create <string.h> when the system
+# doesn't have one that works with the given compiler.
+string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \
+	      -e 's/@''GNULIB_FFSL''@/$(GNULIB_FFSL)/g' \
+	      -e 's/@''GNULIB_FFSLL''@/$(GNULIB_FFSLL)/g' \
+	      -e 's/@''GNULIB_MBSLEN''@/$(GNULIB_MBSLEN)/g' \
+	      -e 's/@''GNULIB_MBSNLEN''@/$(GNULIB_MBSNLEN)/g' \
+	      -e 's/@''GNULIB_MBSCHR''@/$(GNULIB_MBSCHR)/g' \
+	      -e 's/@''GNULIB_MBSRCHR''@/$(GNULIB_MBSRCHR)/g' \
+	      -e 's/@''GNULIB_MBSSTR''@/$(GNULIB_MBSSTR)/g' \
+	      -e 's/@''GNULIB_MBSCASECMP''@/$(GNULIB_MBSCASECMP)/g' \
+	      -e 's/@''GNULIB_MBSNCASECMP''@/$(GNULIB_MBSNCASECMP)/g' \
+	      -e 's/@''GNULIB_MBSPCASECMP''@/$(GNULIB_MBSPCASECMP)/g' \
+	      -e 's/@''GNULIB_MBSCASESTR''@/$(GNULIB_MBSCASESTR)/g' \
+	      -e 's/@''GNULIB_MBSCSPN''@/$(GNULIB_MBSCSPN)/g' \
+	      -e 's/@''GNULIB_MBSPBRK''@/$(GNULIB_MBSPBRK)/g' \
+	      -e 's/@''GNULIB_MBSSPN''@/$(GNULIB_MBSSPN)/g' \
+	      -e 's/@''GNULIB_MBSSEP''@/$(GNULIB_MBSSEP)/g' \
+	      -e 's/@''GNULIB_MBSTOK_R''@/$(GNULIB_MBSTOK_R)/g' \
+	      -e 's/@''GNULIB_MEMCHR''@/$(GNULIB_MEMCHR)/g' \
+	      -e 's/@''GNULIB_MEMMEM''@/$(GNULIB_MEMMEM)/g' \
+	      -e 's/@''GNULIB_MEMPCPY''@/$(GNULIB_MEMPCPY)/g' \
+	      -e 's/@''GNULIB_MEMRCHR''@/$(GNULIB_MEMRCHR)/g' \
+	      -e 's/@''GNULIB_RAWMEMCHR''@/$(GNULIB_RAWMEMCHR)/g' \
+	      -e 's/@''GNULIB_STPCPY''@/$(GNULIB_STPCPY)/g' \
+	      -e 's/@''GNULIB_STPNCPY''@/$(GNULIB_STPNCPY)/g' \
+	      -e 's/@''GNULIB_STRCHRNUL''@/$(GNULIB_STRCHRNUL)/g' \
+	      -e 's/@''GNULIB_STRDUP''@/$(GNULIB_STRDUP)/g' \
+	      -e 's/@''GNULIB_STRNCAT''@/$(GNULIB_STRNCAT)/g' \
+	      -e 's/@''GNULIB_STRNDUP''@/$(GNULIB_STRNDUP)/g' \
+	      -e 's/@''GNULIB_STRNLEN''@/$(GNULIB_STRNLEN)/g' \
+	      -e 's/@''GNULIB_STRPBRK''@/$(GNULIB_STRPBRK)/g' \
+	      -e 's/@''GNULIB_STRSEP''@/$(GNULIB_STRSEP)/g' \
+	      -e 's/@''GNULIB_STRSTR''@/$(GNULIB_STRSTR)/g' \
+	      -e 's/@''GNULIB_STRCASESTR''@/$(GNULIB_STRCASESTR)/g' \
+	      -e 's/@''GNULIB_STRTOK_R''@/$(GNULIB_STRTOK_R)/g' \
+	      -e 's/@''GNULIB_STRERROR''@/$(GNULIB_STRERROR)/g' \
+	      -e 's/@''GNULIB_STRERROR_R''@/$(GNULIB_STRERROR_R)/g' \
+	      -e 's/@''GNULIB_STRSIGNAL''@/$(GNULIB_STRSIGNAL)/g' \
+	      -e 's/@''GNULIB_STRVERSCMP''@/$(GNULIB_STRVERSCMP)/g' \
+	      < $(srcdir)/string.in.h | \
+	  sed -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \
+	      -e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \
+	      -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \
+	      -e 's|@''HAVE_MEMCHR''@|$(HAVE_MEMCHR)|g' \
+	      -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \
+	      -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \
+	      -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \
+	      -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \
+	      -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \
+	      -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \
+	      -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \
+	      -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \
+	      -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \
+	      -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \
+	      -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \
+	      -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \
+	      -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \
+	      -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \
+	      -e 's|@''HAVE_DECL_STRERROR_R''@|$(HAVE_DECL_STRERROR_R)|g' \
+	      -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \
+	      -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \
+	      -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \
+	      -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \
+	      -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \
+	      -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \
+	      -e 's|@''REPLACE_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|g' \
+	      -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \
+	      -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \
+	      -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \
+	      -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \
+	      -e 's|@''REPLACE_STRNCAT''@|$(REPLACE_STRNCAT)|g' \
+	      -e 's|@''REPLACE_STRNDUP''@|$(REPLACE_STRNDUP)|g' \
+	      -e 's|@''REPLACE_STRNLEN''@|$(REPLACE_STRNLEN)|g' \
+	      -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \
+	      -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \
+	      -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
+	      < $(srcdir)/string.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += string.h string.h-t
+
+EXTRA_DIST += string.in.h
+
+## end   gnulib module string
+
+## begin gnulib module strings
+
+BUILT_SOURCES += strings.h
+
+# We need the following in order to create <strings.h> when the system
+# doesn't have one that works with the given compiler.
+strings.h: strings.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''HAVE_STRINGS_H''@|$(HAVE_STRINGS_H)|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_STRINGS_H''@|$(NEXT_STRINGS_H)|g' \
+	      -e 's|@''GNULIB_FFS''@|$(GNULIB_FFS)|g' \
+	      -e 's|@''HAVE_FFS''@|$(HAVE_FFS)|g' \
+	      -e 's|@''HAVE_STRCASECMP''@|$(HAVE_STRCASECMP)|g' \
+	      -e 's|@''HAVE_DECL_STRNCASECMP''@|$(HAVE_DECL_STRNCASECMP)|g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+	      < $(srcdir)/strings.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += strings.h strings.h-t
+
+EXTRA_DIST += strings.in.h
+
+## end   gnulib module strings
+
+## begin gnulib module strnlen1
+
+libgnu_la_SOURCES += strnlen1.h strnlen1.c
+
+## end   gnulib module strnlen1
+
+## begin gnulib module strptime
+
+
+EXTRA_DIST += strptime.c
+
+EXTRA_libgnu_la_SOURCES += strptime.c
+
+## end   gnulib module strptime
+
+## begin gnulib module symlink
+
+
+EXTRA_DIST += symlink.c
+
+EXTRA_libgnu_la_SOURCES += symlink.c
+
+## end   gnulib module symlink
+
+## begin gnulib module sys_select
+
+BUILT_SOURCES += sys/select.h
+
+# We need the following in order to create <sys/select.h> when the system
+# doesn't have one that works with the given compiler.
+sys/select.h: sys_select.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H)
+	$(AM_V_at)$(MKDIR_P) sys
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_SYS_SELECT_H''@|$(NEXT_SYS_SELECT_H)|g' \
+	      -e 's|@''HAVE_SYS_SELECT_H''@|$(HAVE_SYS_SELECT_H)|g' \
+	      -e 's/@''GNULIB_PSELECT''@/$(GNULIB_PSELECT)/g' \
+	      -e 's/@''GNULIB_SELECT''@/$(GNULIB_SELECT)/g' \
+	      -e 's|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \
+	      -e 's|@''HAVE_PSELECT''@|$(HAVE_PSELECT)|g' \
+	      -e 's|@''REPLACE_PSELECT''@|$(REPLACE_PSELECT)|g' \
+	      -e 's|@''REPLACE_SELECT''@|$(REPLACE_SELECT)|g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+	      < $(srcdir)/sys_select.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += sys/select.h sys/select.h-t
+MOSTLYCLEANDIRS += sys
+
+EXTRA_DIST += sys_select.in.h
+
+## end   gnulib module sys_select
+
+## begin gnulib module sys_socket
+
+BUILT_SOURCES += sys/socket.h
+
+# We need the following in order to create <sys/socket.h> when the system
+# doesn't have one that works with the given compiler.
+sys/socket.h: sys_socket.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H)
+	$(AM_V_at)$(MKDIR_P) sys
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_SYS_SOCKET_H''@|$(NEXT_SYS_SOCKET_H)|g' \
+	      -e 's|@''HAVE_SYS_SOCKET_H''@|$(HAVE_SYS_SOCKET_H)|g' \
+	      -e 's/@''GNULIB_CLOSE''@/$(GNULIB_CLOSE)/g' \
+	      -e 's/@''GNULIB_SOCKET''@/$(GNULIB_SOCKET)/g' \
+	      -e 's/@''GNULIB_CONNECT''@/$(GNULIB_CONNECT)/g' \
+	      -e 's/@''GNULIB_ACCEPT''@/$(GNULIB_ACCEPT)/g' \
+	      -e 's/@''GNULIB_BIND''@/$(GNULIB_BIND)/g' \
+	      -e 's/@''GNULIB_GETPEERNAME''@/$(GNULIB_GETPEERNAME)/g' \
+	      -e 's/@''GNULIB_GETSOCKNAME''@/$(GNULIB_GETSOCKNAME)/g' \
+	      -e 's/@''GNULIB_GETSOCKOPT''@/$(GNULIB_GETSOCKOPT)/g' \
+	      -e 's/@''GNULIB_LISTEN''@/$(GNULIB_LISTEN)/g' \
+	      -e 's/@''GNULIB_RECV''@/$(GNULIB_RECV)/g' \
+	      -e 's/@''GNULIB_SEND''@/$(GNULIB_SEND)/g' \
+	      -e 's/@''GNULIB_RECVFROM''@/$(GNULIB_RECVFROM)/g' \
+	      -e 's/@''GNULIB_SENDTO''@/$(GNULIB_SENDTO)/g' \
+	      -e 's/@''GNULIB_SETSOCKOPT''@/$(GNULIB_SETSOCKOPT)/g' \
+	      -e 's/@''GNULIB_SHUTDOWN''@/$(GNULIB_SHUTDOWN)/g' \
+	      -e 's/@''GNULIB_ACCEPT4''@/$(GNULIB_ACCEPT4)/g' \
+	      -e 's|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \
+	      -e 's|@''HAVE_WS2TCPIP_H''@|$(HAVE_WS2TCPIP_H)|g' \
+	      -e 's|@''HAVE_STRUCT_SOCKADDR_STORAGE''@|$(HAVE_STRUCT_SOCKADDR_STORAGE)|g' \
+	      -e 's|@''HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY''@|$(HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY)|g' \
+	      -e 's|@''HAVE_SA_FAMILY_T''@|$(HAVE_SA_FAMILY_T)|g' \
+	      -e 's|@''HAVE_ACCEPT4''@|$(HAVE_ACCEPT4)|g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+	      < $(srcdir)/sys_socket.in.h; \
+	} > $@-t && \
+	mv -f $@-t $@
+MOSTLYCLEANFILES += sys/socket.h sys/socket.h-t
+MOSTLYCLEANDIRS += sys
+
+EXTRA_DIST += sys_socket.in.h
+
+## end   gnulib module sys_socket
+
+## begin gnulib module sys_stat
+
+BUILT_SOURCES += sys/stat.h
+
+# We need the following in order to create <sys/stat.h> when the system
+# has one that is incomplete.
+sys/stat.h: sys_stat.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+	$(AM_V_at)$(MKDIR_P) sys
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_SYS_STAT_H''@|$(NEXT_SYS_STAT_H)|g' \
+	      -e 's|@''WINDOWS_64_BIT_ST_SIZE''@|$(WINDOWS_64_BIT_ST_SIZE)|g' \
+	      -e 's/@''GNULIB_FCHMODAT''@/$(GNULIB_FCHMODAT)/g' \
+	      -e 's/@''GNULIB_FSTAT''@/$(GNULIB_FSTAT)/g' \
+	      -e 's/@''GNULIB_FSTATAT''@/$(GNULIB_FSTATAT)/g' \
+	      -e 's/@''GNULIB_FUTIMENS''@/$(GNULIB_FUTIMENS)/g' \
+	      -e 's/@''GNULIB_LCHMOD''@/$(GNULIB_LCHMOD)/g' \
+	      -e 's/@''GNULIB_LSTAT''@/$(GNULIB_LSTAT)/g' \
+	      -e 's/@''GNULIB_MKDIRAT''@/$(GNULIB_MKDIRAT)/g' \
+	      -e 's/@''GNULIB_MKFIFO''@/$(GNULIB_MKFIFO)/g' \
+	      -e 's/@''GNULIB_MKFIFOAT''@/$(GNULIB_MKFIFOAT)/g' \
+	      -e 's/@''GNULIB_MKNOD''@/$(GNULIB_MKNOD)/g' \
+	      -e 's/@''GNULIB_MKNODAT''@/$(GNULIB_MKNODAT)/g' \
+	      -e 's/@''GNULIB_STAT''@/$(GNULIB_STAT)/g' \
+	      -e 's/@''GNULIB_UTIMENSAT''@/$(GNULIB_UTIMENSAT)/g' \
+	      -e 's|@''HAVE_FCHMODAT''@|$(HAVE_FCHMODAT)|g' \
+	      -e 's|@''HAVE_FSTATAT''@|$(HAVE_FSTATAT)|g' \
+	      -e 's|@''HAVE_FUTIMENS''@|$(HAVE_FUTIMENS)|g' \
+	      -e 's|@''HAVE_LCHMOD''@|$(HAVE_LCHMOD)|g' \
+	      -e 's|@''HAVE_LSTAT''@|$(HAVE_LSTAT)|g' \
+	      -e 's|@''HAVE_MKDIRAT''@|$(HAVE_MKDIRAT)|g' \
+	      -e 's|@''HAVE_MKFIFO''@|$(HAVE_MKFIFO)|g' \
+	      -e 's|@''HAVE_MKFIFOAT''@|$(HAVE_MKFIFOAT)|g' \
+	      -e 's|@''HAVE_MKNOD''@|$(HAVE_MKNOD)|g' \
+	      -e 's|@''HAVE_MKNODAT''@|$(HAVE_MKNODAT)|g' \
+	      -e 's|@''HAVE_UTIMENSAT''@|$(HAVE_UTIMENSAT)|g' \
+	      -e 's|@''REPLACE_FSTAT''@|$(REPLACE_FSTAT)|g' \
+	      -e 's|@''REPLACE_FSTATAT''@|$(REPLACE_FSTATAT)|g' \
+	      -e 's|@''REPLACE_FUTIMENS''@|$(REPLACE_FUTIMENS)|g' \
+	      -e 's|@''REPLACE_LSTAT''@|$(REPLACE_LSTAT)|g' \
+	      -e 's|@''REPLACE_MKDIR''@|$(REPLACE_MKDIR)|g' \
+	      -e 's|@''REPLACE_MKFIFO''@|$(REPLACE_MKFIFO)|g' \
+	      -e 's|@''REPLACE_MKNOD''@|$(REPLACE_MKNOD)|g' \
+	      -e 's|@''REPLACE_STAT''@|$(REPLACE_STAT)|g' \
+	      -e 's|@''REPLACE_UTIMENSAT''@|$(REPLACE_UTIMENSAT)|g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+	      < $(srcdir)/sys_stat.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += sys/stat.h sys/stat.h-t
+MOSTLYCLEANDIRS += sys
+
+EXTRA_DIST += sys_stat.in.h
+
+## end   gnulib module sys_stat
+
+## begin gnulib module sys_time
+
+BUILT_SOURCES += sys/time.h
+
+# We need the following in order to create <sys/time.h> when the system
+# doesn't have one that works with the given compiler.
+sys/time.h: sys_time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+	$(AM_V_at)$(MKDIR_P) sys
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's/@''HAVE_SYS_TIME_H''@/$(HAVE_SYS_TIME_H)/g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_SYS_TIME_H''@|$(NEXT_SYS_TIME_H)|g' \
+	      -e 's/@''GNULIB_GETTIMEOFDAY''@/$(GNULIB_GETTIMEOFDAY)/g' \
+	      -e 's|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \
+	      -e 's/@''HAVE_GETTIMEOFDAY''@/$(HAVE_GETTIMEOFDAY)/g' \
+	      -e 's/@''HAVE_STRUCT_TIMEVAL''@/$(HAVE_STRUCT_TIMEVAL)/g' \
+	      -e 's/@''REPLACE_GETTIMEOFDAY''@/$(REPLACE_GETTIMEOFDAY)/g' \
+	      -e 's/@''REPLACE_STRUCT_TIMEVAL''@/$(REPLACE_STRUCT_TIMEVAL)/g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+	      < $(srcdir)/sys_time.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += sys/time.h sys/time.h-t
+
+EXTRA_DIST += sys_time.in.h
+
+## end   gnulib module sys_time
+
+## begin gnulib module sys_times
+
+BUILT_SOURCES += sys/times.h
+
+# We need the following in order to create <sys/times.h> when the system
+# doesn't have one that works with the given compiler.
+sys/times.h: sys_times.in.h $(top_builddir)/config.status $(WARN_ON_USE_H) $(ARG_NONNULL_H)
+	$(AM_V_at)$(MKDIR_P) sys
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's/@''HAVE_SYS_TIMES_H''@/$(HAVE_SYS_TIMES_H)/g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_SYS_TIMES_H''@|$(NEXT_SYS_TIMES_H)|g' \
+	      -e 's/@''GNULIB_TIMES''@/$(GNULIB_TIMES)/g' \
+	      -e 's|@''HAVE_STRUCT_TMS''@|$(HAVE_STRUCT_TMS)|g' \
+	      -e 's|@''HAVE_TIMES''@|$(HAVE_TIMES)|g' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+	      < $(srcdir)/sys_times.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += sys/times.h sys/times.h-t
+MOSTLYCLEANDIRS += sys
+
+EXTRA_DIST += sys_times.in.h
+
+## end   gnulib module sys_times
+
+## begin gnulib module sys_types
+
+BUILT_SOURCES += sys/types.h
+
+# We need the following in order to create <sys/types.h> when the system
+# doesn't have one that works with the given compiler.
+sys/types.h: sys_types.in.h $(top_builddir)/config.status
+	$(AM_V_at)$(MKDIR_P) sys
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_SYS_TYPES_H''@|$(NEXT_SYS_TYPES_H)|g' \
+	      -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \
+	      < $(srcdir)/sys_types.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += sys/types.h sys/types.h-t
+
+EXTRA_DIST += sys_types.in.h
+
+## end   gnulib module sys_types
+
+## begin gnulib module sys_uio
+
+BUILT_SOURCES += sys/uio.h
+
+# We need the following in order to create <sys/uio.h> when the system
+# doesn't have one that works with the given compiler.
+sys/uio.h: sys_uio.in.h $(top_builddir)/config.status
+	$(AM_V_at)$(MKDIR_P) sys
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_SYS_UIO_H''@|$(NEXT_SYS_UIO_H)|g' \
+	      -e 's|@''HAVE_SYS_UIO_H''@|$(HAVE_SYS_UIO_H)|g' \
+	      < $(srcdir)/sys_uio.in.h; \
+	} > $@-t && \
+	mv -f $@-t $@
+MOSTLYCLEANFILES += sys/uio.h sys/uio.h-t
+MOSTLYCLEANDIRS += sys
+
+EXTRA_DIST += sys_uio.in.h
+
+## end   gnulib module sys_uio
+
+## begin gnulib module tempname
+
+libgnu_la_SOURCES += tempname.c
+
+EXTRA_DIST += tempname.h
+
+## end   gnulib module tempname
+
+## begin gnulib module time
+
+BUILT_SOURCES += time.h
+
+# We need the following in order to create <time.h> when the system
+# doesn't have one that works with the given compiler.
+time.h: time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_TIME_H''@|$(NEXT_TIME_H)|g' \
+	      -e 's/@''GNULIB_MKTIME''@/$(GNULIB_MKTIME)/g' \
+	      -e 's/@''GNULIB_NANOSLEEP''@/$(GNULIB_NANOSLEEP)/g' \
+	      -e 's/@''GNULIB_STRPTIME''@/$(GNULIB_STRPTIME)/g' \
+	      -e 's/@''GNULIB_TIMEGM''@/$(GNULIB_TIMEGM)/g' \
+	      -e 's/@''GNULIB_TIME_R''@/$(GNULIB_TIME_R)/g' \
+	      -e 's|@''HAVE_DECL_LOCALTIME_R''@|$(HAVE_DECL_LOCALTIME_R)|g' \
+	      -e 's|@''HAVE_NANOSLEEP''@|$(HAVE_NANOSLEEP)|g' \
+	      -e 's|@''HAVE_STRPTIME''@|$(HAVE_STRPTIME)|g' \
+	      -e 's|@''HAVE_TIMEGM''@|$(HAVE_TIMEGM)|g' \
+	      -e 's|@''REPLACE_LOCALTIME_R''@|$(REPLACE_LOCALTIME_R)|g' \
+	      -e 's|@''REPLACE_MKTIME''@|$(REPLACE_MKTIME)|g' \
+	      -e 's|@''REPLACE_NANOSLEEP''@|$(REPLACE_NANOSLEEP)|g' \
+	      -e 's|@''REPLACE_TIMEGM''@|$(REPLACE_TIMEGM)|g' \
+	      -e 's|@''PTHREAD_H_DEFINES_STRUCT_TIMESPEC''@|$(PTHREAD_H_DEFINES_STRUCT_TIMESPEC)|g' \
+	      -e 's|@''SYS_TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(SYS_TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \
+	      -e 's|@''TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+	      < $(srcdir)/time.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += time.h time.h-t
+
+EXTRA_DIST += time.in.h
+
+## end   gnulib module time
+
+## begin gnulib module time_r
+
+
+EXTRA_DIST += time_r.c
+
+EXTRA_libgnu_la_SOURCES += time_r.c
+
+## end   gnulib module time_r
+
+## begin gnulib module times
+
+
+EXTRA_DIST += times.c
+
+EXTRA_libgnu_la_SOURCES += times.c
+
+## end   gnulib module times
+
+## begin gnulib module tmpdir
+
+libgnu_la_SOURCES += tmpdir.h tmpdir.c
+
+## end   gnulib module tmpdir
+
+## begin gnulib module tmpfile
+
+
+EXTRA_DIST += tmpfile.c
+
+EXTRA_libgnu_la_SOURCES += tmpfile.c
+
+## end   gnulib module tmpfile
+
+## begin gnulib module trunc
+
+
+EXTRA_DIST += trunc.c
+
+EXTRA_libgnu_la_SOURCES += trunc.c
+
+## end   gnulib module trunc
+
+## begin gnulib module truncf
+
+
+EXTRA_DIST += trunc.c truncf.c
+
+EXTRA_libgnu_la_SOURCES += trunc.c truncf.c
+
+## end   gnulib module truncf
+
+## begin gnulib module unistd
+
+BUILT_SOURCES += unistd.h
+
+# We need the following in order to create an empty placeholder for
+# <unistd.h> when the system doesn't have one.
+unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \
+	      -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \
+	      -e 's/@''GNULIB_CHDIR''@/$(GNULIB_CHDIR)/g' \
+	      -e 's/@''GNULIB_CHOWN''@/$(GNULIB_CHOWN)/g' \
+	      -e 's/@''GNULIB_CLOSE''@/$(GNULIB_CLOSE)/g' \
+	      -e 's/@''GNULIB_DUP''@/$(GNULIB_DUP)/g' \
+	      -e 's/@''GNULIB_DUP2''@/$(GNULIB_DUP2)/g' \
+	      -e 's/@''GNULIB_DUP3''@/$(GNULIB_DUP3)/g' \
+	      -e 's/@''GNULIB_ENVIRON''@/$(GNULIB_ENVIRON)/g' \
+	      -e 's/@''GNULIB_EUIDACCESS''@/$(GNULIB_EUIDACCESS)/g' \
+	      -e 's/@''GNULIB_FACCESSAT''@/$(GNULIB_FACCESSAT)/g' \
+	      -e 's/@''GNULIB_FCHDIR''@/$(GNULIB_FCHDIR)/g' \
+	      -e 's/@''GNULIB_FCHOWNAT''@/$(GNULIB_FCHOWNAT)/g' \
+	      -e 's/@''GNULIB_FDATASYNC''@/$(GNULIB_FDATASYNC)/g' \
+	      -e 's/@''GNULIB_FSYNC''@/$(GNULIB_FSYNC)/g' \
+	      -e 's/@''GNULIB_FTRUNCATE''@/$(GNULIB_FTRUNCATE)/g' \
+	      -e 's/@''GNULIB_GETCWD''@/$(GNULIB_GETCWD)/g' \
+	      -e 's/@''GNULIB_GETDOMAINNAME''@/$(GNULIB_GETDOMAINNAME)/g' \
+	      -e 's/@''GNULIB_GETDTABLESIZE''@/$(GNULIB_GETDTABLESIZE)/g' \
+	      -e 's/@''GNULIB_GETGROUPS''@/$(GNULIB_GETGROUPS)/g' \
+	      -e 's/@''GNULIB_GETHOSTNAME''@/$(GNULIB_GETHOSTNAME)/g' \
+	      -e 's/@''GNULIB_GETLOGIN''@/$(GNULIB_GETLOGIN)/g' \
+	      -e 's/@''GNULIB_GETLOGIN_R''@/$(GNULIB_GETLOGIN_R)/g' \
+	      -e 's/@''GNULIB_GETPAGESIZE''@/$(GNULIB_GETPAGESIZE)/g' \
+	      -e 's/@''GNULIB_GETUSERSHELL''@/$(GNULIB_GETUSERSHELL)/g' \
+	      -e 's/@''GNULIB_GROUP_MEMBER''@/$(GNULIB_GROUP_MEMBER)/g' \
+	      -e 's/@''GNULIB_ISATTY''@/$(GNULIB_ISATTY)/g' \
+	      -e 's/@''GNULIB_LCHOWN''@/$(GNULIB_LCHOWN)/g' \
+	      -e 's/@''GNULIB_LINK''@/$(GNULIB_LINK)/g' \
+	      -e 's/@''GNULIB_LINKAT''@/$(GNULIB_LINKAT)/g' \
+	      -e 's/@''GNULIB_LSEEK''@/$(GNULIB_LSEEK)/g' \
+	      -e 's/@''GNULIB_PIPE''@/$(GNULIB_PIPE)/g' \
+	      -e 's/@''GNULIB_PIPE2''@/$(GNULIB_PIPE2)/g' \
+	      -e 's/@''GNULIB_PREAD''@/$(GNULIB_PREAD)/g' \
+	      -e 's/@''GNULIB_PWRITE''@/$(GNULIB_PWRITE)/g' \
+	      -e 's/@''GNULIB_READ''@/$(GNULIB_READ)/g' \
+	      -e 's/@''GNULIB_READLINK''@/$(GNULIB_READLINK)/g' \
+	      -e 's/@''GNULIB_READLINKAT''@/$(GNULIB_READLINKAT)/g' \
+	      -e 's/@''GNULIB_RMDIR''@/$(GNULIB_RMDIR)/g' \
+	      -e 's/@''GNULIB_SETHOSTNAME''@/$(GNULIB_SETHOSTNAME)/g' \
+	      -e 's/@''GNULIB_SLEEP''@/$(GNULIB_SLEEP)/g' \
+	      -e 's/@''GNULIB_SYMLINK''@/$(GNULIB_SYMLINK)/g' \
+	      -e 's/@''GNULIB_SYMLINKAT''@/$(GNULIB_SYMLINKAT)/g' \
+	      -e 's/@''GNULIB_TTYNAME_R''@/$(GNULIB_TTYNAME_R)/g' \
+	      -e 's/@''GNULIB_UNISTD_H_GETOPT''@/0$(GNULIB_GL_UNISTD_H_GETOPT)/g' \
+	      -e 's/@''GNULIB_UNISTD_H_NONBLOCKING''@/$(GNULIB_UNISTD_H_NONBLOCKING)/g' \
+	      -e 's/@''GNULIB_UNISTD_H_SIGPIPE''@/$(GNULIB_UNISTD_H_SIGPIPE)/g' \
+	      -e 's/@''GNULIB_UNLINK''@/$(GNULIB_UNLINK)/g' \
+	      -e 's/@''GNULIB_UNLINKAT''@/$(GNULIB_UNLINKAT)/g' \
+	      -e 's/@''GNULIB_USLEEP''@/$(GNULIB_USLEEP)/g' \
+	      -e 's/@''GNULIB_WRITE''@/$(GNULIB_WRITE)/g' \
+	      < $(srcdir)/unistd.in.h | \
+	  sed -e 's|@''HAVE_CHOWN''@|$(HAVE_CHOWN)|g' \
+	      -e 's|@''HAVE_DUP2''@|$(HAVE_DUP2)|g' \
+	      -e 's|@''HAVE_DUP3''@|$(HAVE_DUP3)|g' \
+	      -e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \
+	      -e 's|@''HAVE_FACCESSAT''@|$(HAVE_FACCESSAT)|g' \
+	      -e 's|@''HAVE_FCHDIR''@|$(HAVE_FCHDIR)|g' \
+	      -e 's|@''HAVE_FCHOWNAT''@|$(HAVE_FCHOWNAT)|g' \
+	      -e 's|@''HAVE_FDATASYNC''@|$(HAVE_FDATASYNC)|g' \
+	      -e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \
+	      -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \
+	      -e 's|@''HAVE_GETDTABLESIZE''@|$(HAVE_GETDTABLESIZE)|g' \
+	      -e 's|@''HAVE_GETGROUPS''@|$(HAVE_GETGROUPS)|g' \
+	      -e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \
+	      -e 's|@''HAVE_GETLOGIN''@|$(HAVE_GETLOGIN)|g' \
+	      -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \
+	      -e 's|@''HAVE_GROUP_MEMBER''@|$(HAVE_GROUP_MEMBER)|g' \
+	      -e 's|@''HAVE_LCHOWN''@|$(HAVE_LCHOWN)|g' \
+	      -e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \
+	      -e 's|@''HAVE_LINKAT''@|$(HAVE_LINKAT)|g' \
+	      -e 's|@''HAVE_PIPE''@|$(HAVE_PIPE)|g' \
+	      -e 's|@''HAVE_PIPE2''@|$(HAVE_PIPE2)|g' \
+	      -e 's|@''HAVE_PREAD''@|$(HAVE_PREAD)|g' \
+	      -e 's|@''HAVE_PWRITE''@|$(HAVE_PWRITE)|g' \
+	      -e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \
+	      -e 's|@''HAVE_READLINKAT''@|$(HAVE_READLINKAT)|g' \
+	      -e 's|@''HAVE_SETHOSTNAME''@|$(HAVE_SETHOSTNAME)|g' \
+	      -e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \
+	      -e 's|@''HAVE_SYMLINK''@|$(HAVE_SYMLINK)|g' \
+	      -e 's|@''HAVE_SYMLINKAT''@|$(HAVE_SYMLINKAT)|g' \
+	      -e 's|@''HAVE_UNLINKAT''@|$(HAVE_UNLINKAT)|g' \
+	      -e 's|@''HAVE_USLEEP''@|$(HAVE_USLEEP)|g' \
+	      -e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \
+	      -e 's|@''HAVE_DECL_FCHDIR''@|$(HAVE_DECL_FCHDIR)|g' \
+	      -e 's|@''HAVE_DECL_FDATASYNC''@|$(HAVE_DECL_FDATASYNC)|g' \
+	      -e 's|@''HAVE_DECL_GETDOMAINNAME''@|$(HAVE_DECL_GETDOMAINNAME)|g' \
+	      -e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \
+	      -e 's|@''HAVE_DECL_GETPAGESIZE''@|$(HAVE_DECL_GETPAGESIZE)|g' \
+	      -e 's|@''HAVE_DECL_GETUSERSHELL''@|$(HAVE_DECL_GETUSERSHELL)|g' \
+	      -e 's|@''HAVE_DECL_SETHOSTNAME''@|$(HAVE_DECL_SETHOSTNAME)|g' \
+	      -e 's|@''HAVE_DECL_TTYNAME_R''@|$(HAVE_DECL_TTYNAME_R)|g' \
+	      -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \
+	      -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \
+	  | \
+	  sed -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \
+	      -e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \
+	      -e 's|@''REPLACE_DUP''@|$(REPLACE_DUP)|g' \
+	      -e 's|@''REPLACE_DUP2''@|$(REPLACE_DUP2)|g' \
+	      -e 's|@''REPLACE_FCHOWNAT''@|$(REPLACE_FCHOWNAT)|g' \
+	      -e 's|@''REPLACE_FTRUNCATE''@|$(REPLACE_FTRUNCATE)|g' \
+	      -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \
+	      -e 's|@''REPLACE_GETDOMAINNAME''@|$(REPLACE_GETDOMAINNAME)|g' \
+	      -e 's|@''REPLACE_GETLOGIN_R''@|$(REPLACE_GETLOGIN_R)|g' \
+	      -e 's|@''REPLACE_GETGROUPS''@|$(REPLACE_GETGROUPS)|g' \
+	      -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \
+	      -e 's|@''REPLACE_ISATTY''@|$(REPLACE_ISATTY)|g' \
+	      -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \
+	      -e 's|@''REPLACE_LINK''@|$(REPLACE_LINK)|g' \
+	      -e 's|@''REPLACE_LINKAT''@|$(REPLACE_LINKAT)|g' \
+	      -e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \
+	      -e 's|@''REPLACE_PREAD''@|$(REPLACE_PREAD)|g' \
+	      -e 's|@''REPLACE_PWRITE''@|$(REPLACE_PWRITE)|g' \
+	      -e 's|@''REPLACE_READ''@|$(REPLACE_READ)|g' \
+	      -e 's|@''REPLACE_READLINK''@|$(REPLACE_READLINK)|g' \
+	      -e 's|@''REPLACE_RMDIR''@|$(REPLACE_RMDIR)|g' \
+	      -e 's|@''REPLACE_SLEEP''@|$(REPLACE_SLEEP)|g' \
+	      -e 's|@''REPLACE_SYMLINK''@|$(REPLACE_SYMLINK)|g' \
+	      -e 's|@''REPLACE_TTYNAME_R''@|$(REPLACE_TTYNAME_R)|g' \
+	      -e 's|@''REPLACE_UNLINK''@|$(REPLACE_UNLINK)|g' \
+	      -e 's|@''REPLACE_UNLINKAT''@|$(REPLACE_UNLINKAT)|g' \
+	      -e 's|@''REPLACE_USLEEP''@|$(REPLACE_USLEEP)|g' \
+	      -e 's|@''REPLACE_WRITE''@|$(REPLACE_WRITE)|g' \
+	      -e 's|@''UNISTD_H_HAVE_WINSOCK2_H''@|$(UNISTD_H_HAVE_WINSOCK2_H)|g' \
+	      -e 's|@''UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS''@|$(UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS)|g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
+	} > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += unistd.h unistd.h-t
+
+EXTRA_DIST += unistd.in.h
+
+## end   gnulib module unistd
+
+## begin gnulib module unistd-safer
+
+libgnu_la_SOURCES += dup-safer.c fd-safer.c pipe-safer.c
+
+EXTRA_DIST += unistd--.h unistd-safer.h
+
+## end   gnulib module unistd-safer
+
+## begin gnulib module unlink
+
+
+EXTRA_DIST += unlink.c
+
+EXTRA_libgnu_la_SOURCES += unlink.c
+
+## end   gnulib module unlink
+
+## begin gnulib module vasnprintf
+
+
+EXTRA_DIST += asnprintf.c float+.h printf-args.c printf-args.h printf-parse.c printf-parse.h vasnprintf.c vasnprintf.h
+
+EXTRA_libgnu_la_SOURCES += asnprintf.c printf-args.c printf-parse.c vasnprintf.c
+
+## end   gnulib module vasnprintf
+
+## begin gnulib module vasprintf
+
+
+EXTRA_DIST += asprintf.c vasprintf.c
+
+EXTRA_libgnu_la_SOURCES += asprintf.c vasprintf.c
+
+## end   gnulib module vasprintf
+
+## begin gnulib module verify
+
+
+EXTRA_DIST += verify.h
+
+## end   gnulib module verify
+
+## begin gnulib module wchar
+
+BUILT_SOURCES += wchar.h
+
+# We need the following in order to create <wchar.h> when the system
+# version does not work standalone.
+wchar.h: wchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \
+	      -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \
+	      -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \
+	      -e 's/@''GNULIB_BTOWC''@/$(GNULIB_BTOWC)/g' \
+	      -e 's/@''GNULIB_WCTOB''@/$(GNULIB_WCTOB)/g' \
+	      -e 's/@''GNULIB_MBSINIT''@/$(GNULIB_MBSINIT)/g' \
+	      -e 's/@''GNULIB_MBRTOWC''@/$(GNULIB_MBRTOWC)/g' \
+	      -e 's/@''GNULIB_MBRLEN''@/$(GNULIB_MBRLEN)/g' \
+	      -e 's/@''GNULIB_MBSRTOWCS''@/$(GNULIB_MBSRTOWCS)/g' \
+	      -e 's/@''GNULIB_MBSNRTOWCS''@/$(GNULIB_MBSNRTOWCS)/g' \
+	      -e 's/@''GNULIB_WCRTOMB''@/$(GNULIB_WCRTOMB)/g' \
+	      -e 's/@''GNULIB_WCSRTOMBS''@/$(GNULIB_WCSRTOMBS)/g' \
+	      -e 's/@''GNULIB_WCSNRTOMBS''@/$(GNULIB_WCSNRTOMBS)/g' \
+	      -e 's/@''GNULIB_WCWIDTH''@/$(GNULIB_WCWIDTH)/g' \
+	      -e 's/@''GNULIB_WMEMCHR''@/$(GNULIB_WMEMCHR)/g' \
+	      -e 's/@''GNULIB_WMEMCMP''@/$(GNULIB_WMEMCMP)/g' \
+	      -e 's/@''GNULIB_WMEMCPY''@/$(GNULIB_WMEMCPY)/g' \
+	      -e 's/@''GNULIB_WMEMMOVE''@/$(GNULIB_WMEMMOVE)/g' \
+	      -e 's/@''GNULIB_WMEMSET''@/$(GNULIB_WMEMSET)/g' \
+	      -e 's/@''GNULIB_WCSLEN''@/$(GNULIB_WCSLEN)/g' \
+	      -e 's/@''GNULIB_WCSNLEN''@/$(GNULIB_WCSNLEN)/g' \
+	      -e 's/@''GNULIB_WCSCPY''@/$(GNULIB_WCSCPY)/g' \
+	      -e 's/@''GNULIB_WCPCPY''@/$(GNULIB_WCPCPY)/g' \
+	      -e 's/@''GNULIB_WCSNCPY''@/$(GNULIB_WCSNCPY)/g' \
+	      -e 's/@''GNULIB_WCPNCPY''@/$(GNULIB_WCPNCPY)/g' \
+	      -e 's/@''GNULIB_WCSCAT''@/$(GNULIB_WCSCAT)/g' \
+	      -e 's/@''GNULIB_WCSNCAT''@/$(GNULIB_WCSNCAT)/g' \
+	      -e 's/@''GNULIB_WCSCMP''@/$(GNULIB_WCSCMP)/g' \
+	      -e 's/@''GNULIB_WCSNCMP''@/$(GNULIB_WCSNCMP)/g' \
+	      -e 's/@''GNULIB_WCSCASECMP''@/$(GNULIB_WCSCASECMP)/g' \
+	      -e 's/@''GNULIB_WCSNCASECMP''@/$(GNULIB_WCSNCASECMP)/g' \
+	      -e 's/@''GNULIB_WCSCOLL''@/$(GNULIB_WCSCOLL)/g' \
+	      -e 's/@''GNULIB_WCSXFRM''@/$(GNULIB_WCSXFRM)/g' \
+	      -e 's/@''GNULIB_WCSDUP''@/$(GNULIB_WCSDUP)/g' \
+	      -e 's/@''GNULIB_WCSCHR''@/$(GNULIB_WCSCHR)/g' \
+	      -e 's/@''GNULIB_WCSRCHR''@/$(GNULIB_WCSRCHR)/g' \
+	      -e 's/@''GNULIB_WCSCSPN''@/$(GNULIB_WCSCSPN)/g' \
+	      -e 's/@''GNULIB_WCSSPN''@/$(GNULIB_WCSSPN)/g' \
+	      -e 's/@''GNULIB_WCSPBRK''@/$(GNULIB_WCSPBRK)/g' \
+	      -e 's/@''GNULIB_WCSSTR''@/$(GNULIB_WCSSTR)/g' \
+	      -e 's/@''GNULIB_WCSTOK''@/$(GNULIB_WCSTOK)/g' \
+	      -e 's/@''GNULIB_WCSWIDTH''@/$(GNULIB_WCSWIDTH)/g' \
+	      < $(srcdir)/wchar.in.h | \
+	  sed -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \
+	      -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \
+	      -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \
+	      -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \
+	      -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \
+	      -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \
+	      -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \
+	      -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \
+	      -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \
+	      -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \
+	      -e 's|@''HAVE_WMEMCHR''@|$(HAVE_WMEMCHR)|g' \
+	      -e 's|@''HAVE_WMEMCMP''@|$(HAVE_WMEMCMP)|g' \
+	      -e 's|@''HAVE_WMEMCPY''@|$(HAVE_WMEMCPY)|g' \
+	      -e 's|@''HAVE_WMEMMOVE''@|$(HAVE_WMEMMOVE)|g' \
+	      -e 's|@''HAVE_WMEMSET''@|$(HAVE_WMEMSET)|g' \
+	      -e 's|@''HAVE_WCSLEN''@|$(HAVE_WCSLEN)|g' \
+	      -e 's|@''HAVE_WCSNLEN''@|$(HAVE_WCSNLEN)|g' \
+	      -e 's|@''HAVE_WCSCPY''@|$(HAVE_WCSCPY)|g' \
+	      -e 's|@''HAVE_WCPCPY''@|$(HAVE_WCPCPY)|g' \
+	      -e 's|@''HAVE_WCSNCPY''@|$(HAVE_WCSNCPY)|g' \
+	      -e 's|@''HAVE_WCPNCPY''@|$(HAVE_WCPNCPY)|g' \
+	      -e 's|@''HAVE_WCSCAT''@|$(HAVE_WCSCAT)|g' \
+	      -e 's|@''HAVE_WCSNCAT''@|$(HAVE_WCSNCAT)|g' \
+	      -e 's|@''HAVE_WCSCMP''@|$(HAVE_WCSCMP)|g' \
+	      -e 's|@''HAVE_WCSNCMP''@|$(HAVE_WCSNCMP)|g' \
+	      -e 's|@''HAVE_WCSCASECMP''@|$(HAVE_WCSCASECMP)|g' \
+	      -e 's|@''HAVE_WCSNCASECMP''@|$(HAVE_WCSNCASECMP)|g' \
+	      -e 's|@''HAVE_WCSCOLL''@|$(HAVE_WCSCOLL)|g' \
+	      -e 's|@''HAVE_WCSXFRM''@|$(HAVE_WCSXFRM)|g' \
+	      -e 's|@''HAVE_WCSDUP''@|$(HAVE_WCSDUP)|g' \
+	      -e 's|@''HAVE_WCSCHR''@|$(HAVE_WCSCHR)|g' \
+	      -e 's|@''HAVE_WCSRCHR''@|$(HAVE_WCSRCHR)|g' \
+	      -e 's|@''HAVE_WCSCSPN''@|$(HAVE_WCSCSPN)|g' \
+	      -e 's|@''HAVE_WCSSPN''@|$(HAVE_WCSSPN)|g' \
+	      -e 's|@''HAVE_WCSPBRK''@|$(HAVE_WCSPBRK)|g' \
+	      -e 's|@''HAVE_WCSSTR''@|$(HAVE_WCSSTR)|g' \
+	      -e 's|@''HAVE_WCSTOK''@|$(HAVE_WCSTOK)|g' \
+	      -e 's|@''HAVE_WCSWIDTH''@|$(HAVE_WCSWIDTH)|g' \
+	      -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \
+	      -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \
+	  | \
+	  sed -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \
+	      -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \
+	      -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \
+	      -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \
+	      -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \
+	      -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \
+	      -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \
+	      -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \
+	      -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \
+	      -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \
+	      -e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \
+	      -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \
+	      -e 's|@''REPLACE_WCSWIDTH''@|$(REPLACE_WCSWIDTH)|g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
+	} > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += wchar.h wchar.h-t
+
+EXTRA_DIST += wchar.in.h
+
+## end   gnulib module wchar
+
+## begin gnulib module wctype-h
+
+BUILT_SOURCES += wctype.h
+
+# We need the following in order to create <wctype.h> when the system
+# doesn't have one that works with the given compiler.
+wctype.h: wctype.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H)
+	$(AM_V_GEN)rm -f $@-t $@ && \
+	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+	  sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+	      -e 's/@''HAVE_WCTYPE_H''@/$(HAVE_WCTYPE_H)/g' \
+	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+	      -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+	      -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+	      -e 's|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \
+	      -e 's/@''GNULIB_ISWBLANK''@/$(GNULIB_ISWBLANK)/g' \
+	      -e 's/@''GNULIB_WCTYPE''@/$(GNULIB_WCTYPE)/g' \
+	      -e 's/@''GNULIB_ISWCTYPE''@/$(GNULIB_ISWCTYPE)/g' \
+	      -e 's/@''GNULIB_WCTRANS''@/$(GNULIB_WCTRANS)/g' \
+	      -e 's/@''GNULIB_TOWCTRANS''@/$(GNULIB_TOWCTRANS)/g' \
+	      -e 's/@''HAVE_ISWBLANK''@/$(HAVE_ISWBLANK)/g' \
+	      -e 's/@''HAVE_ISWCNTRL''@/$(HAVE_ISWCNTRL)/g' \
+	      -e 's/@''HAVE_WCTYPE_T''@/$(HAVE_WCTYPE_T)/g' \
+	      -e 's/@''HAVE_WCTRANS_T''@/$(HAVE_WCTRANS_T)/g' \
+	      -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \
+	      -e 's/@''REPLACE_ISWBLANK''@/$(REPLACE_ISWBLANK)/g' \
+	      -e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/g' \
+	      -e 's/@''REPLACE_TOWLOWER''@/$(REPLACE_TOWLOWER)/g' \
+	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+	      < $(srcdir)/wctype.in.h; \
+	} > $@-t && \
+	mv $@-t $@
+MOSTLYCLEANFILES += wctype.h wctype.h-t
+
+EXTRA_DIST += wctype.in.h
+
+## end   gnulib module wctype-h
+
+## begin gnulib module xsize
+
+libgnu_la_SOURCES += xsize.h
+
+## end   gnulib module xsize
+
+
+mostlyclean-local: mostlyclean-generic
+	@for dir in '' $(MOSTLYCLEANDIRS); do \
+	  if test -n "$$dir" && test -d $$dir; then \
+	    echo "rmdir $$dir"; rmdir $$dir; \
+	  fi; \
+	done; \
+	:
--- a/liboctave/Array-util.cc
+++ b/liboctave/Array-util.cc
@@ -426,7 +426,7 @@
 {
   int ial = ia.length (), rhdvl = rhdv.length ();
   dim_vector rdv = dim_vector::alloc (ial);
-  bool *scalar = new bool[ial], *colon = new bool[ial];
+  bool *scalar = new bool [ial], *colon = new bool [ial];
   // Mark scalars and colons, count non-scalar indices.
   int nonsc = 0;
   bool all_colons = true;
@@ -445,7 +445,7 @@
   if (all_colons)
     {
       rdv = rhdv;
-      rdv.resize(ial, 1);
+      rdv.resize (ial, 1);
     }
   else if (nonsc == rhdvl)
     {
@@ -466,7 +466,7 @@
         {
           if (scalar[i]) continue;
           if (colon[i])
-            rdv(i) =  (j < rhdv0l) ? rhdv0(j++) : 1;
+            rdv(i) = (j < rhdv0l) ? rhdv0(j++) : 1;
         }
     }
 
--- a/liboctave/Array.cc
+++ b/liboctave/Array.cc
@@ -649,7 +649,7 @@
       int i = 0;
       for (; i < l-1 && ndv(i) == odv(i); i++) ld *= ndv(i);
       n = l - i;
-      cext = new octave_idx_type[3*n];
+      cext = new octave_idx_type [3*n];
       // Trick to avoid three allocations
       sext = cext + n;
       dext = sext + n;
@@ -723,17 +723,17 @@
 
       // FIXME -- this is for Matlab compatibility.  Matlab 2007 given
       //
-      //   b = ones(3,1)
+      //   b = ones (3,1)
       //
       // yields the following:
       //
-      //   b(zeros(0,0)) gives []
-      //   b(zeros(1,0)) gives zeros(0,1)
-      //   b(zeros(0,1)) gives zeros(0,1)
-      //   b(zeros(0,m)) gives zeros(0,m)
-      //   b(zeros(m,0)) gives zeros(m,0)
-      //   b(1:2) gives ones(2,1)
-      //   b(ones(2)) gives ones(2) etc.
+      //   b(zeros (0,0)) gives []
+      //   b(zeros (1,0)) gives zeros (0,1)
+      //   b(zeros (0,1)) gives zeros (0,1)
+      //   b(zeros (0,m)) gives zeros (0,m)
+      //   b(zeros (m,0)) gives zeros (m,0)
+      //   b(1:2) gives ones (2,1)
+      //   b(ones (2)) gives ones (2) etc.
       //
       // As you can see, the behaviour is weird, but the tests end up pretty
       // simple.  Nah, I don't want to suggest that this is ad hoc :)
@@ -2223,13 +2223,13 @@
     }
 
   // Fixup return dimensions, for Matlab compatibility.
-  // find(zeros(0,0)) -> zeros(0,0)
-  // find(zeros(1,0)) -> zeros(1,0)
-  // find(zeros(0,1)) -> zeros(0,1)
-  // find(zeros(0,X)) -> zeros(0,1)
-  // find(zeros(1,1)) -> zeros(0,0) !!!! WHY?
-  // find(zeros(0,1,0)) -> zeros(0,0)
-  // find(zeros(0,1,0,1)) -> zeros(0,0) etc
+  // find (zeros (0,0)) -> zeros (0,0)
+  // find (zeros (1,0)) -> zeros (1,0)
+  // find (zeros (0,1)) -> zeros (0,1)
+  // find (zeros (0,X)) -> zeros (0,1)
+  // find (zeros (1,1)) -> zeros (0,0) !!!! WHY?
+  // find (zeros (0,1,0)) -> zeros (0,0)
+  // find (zeros (0,1,0,1)) -> zeros (0,0) etc
 
   if ((numel () == 1 && retval.is_empty ())
       || (rows () == 0 && dims ().numel (1) == 0))
@@ -2741,7 +2741,7 @@
                   for (octave_idx_type k = 0; k < cols; k++)
                     {
                       ra_idx(1) = k;
-                      os << " " << a.elem(ra_idx);
+                      os << " " << a.elem (ra_idx);
                     }
                   os << "\n";
                 }
@@ -2753,7 +2753,7 @@
               for (octave_idx_type k = 0; k < rows; k++)
                 {
                   ra_idx(0) = k;
-                  os << " " << a.elem(ra_idx);
+                  os << " " << a.elem (ra_idx);
                 }
               break;
             }
@@ -2781,7 +2781,7 @@
                   for (octave_idx_type k = 0; k < cols; k++)
                     {
                       ra_idx(1) = k;
-                      os << " " << a.elem(ra_idx);
+                      os << " " << a.elem (ra_idx);
                     }
 
                   os << "\n";
--- a/liboctave/Array.h
+++ b/liboctave/Array.h
@@ -164,6 +164,14 @@
       return &nr;
     }
 
+protected:
+
+  // For jit support
+  Array (T *sdata, octave_idx_type slen, octave_idx_type *adims, void *arep)
+    : dimensions (adims),
+      rep (reinterpret_cast<typename Array<T>::ArrayRep *> (arep)),
+      slice_data (sdata), slice_len (slen) {}
+
 public:
 
   // Empty ctor (0x0).
@@ -324,8 +332,8 @@
 
   // No checking, even for multiple references, ever.
 
-  T& xelem (octave_idx_type n) { return slice_data [n]; }
-  crefT xelem (octave_idx_type n) const { return slice_data [n]; }
+  T& xelem (octave_idx_type n) { return slice_data[n]; }
+  crefT xelem (octave_idx_type n) const { return slice_data[n]; }
 
   T& xelem (octave_idx_type i, octave_idx_type j) { return xelem (dim1 ()*j+i); }
   crefT xelem (octave_idx_type i, octave_idx_type j) const { return xelem (dim1 ()*j+i); }
@@ -693,6 +701,16 @@
   // supposedly equal dimensions (e.g. structs in the interpreter).
   bool optimize_dimensions (const dim_vector& dv);
 
+  // WARNING: Only call these functions from jit
+
+  int *jit_ref_count (void) { return rep->count.get (); }
+
+  T *jit_slice_data (void) const { return slice_data; }
+
+  octave_idx_type *jit_dimensions (void) const { return dimensions.to_jit (); }
+
+  void *jit_array_rep (void) const { return rep; }
+
 private:
 
   void resize2 (octave_idx_type nr, octave_idx_type nc, const T& rfv);
--- a/liboctave/CMatrix.cc
+++ b/liboctave/CMatrix.cc
@@ -1079,7 +1079,7 @@
       F77_XFCN (zgetri, ZGETRI, (nc, tmp_data, nr, pipvt,
                                  z.fortran_vec (), lwork, info));
 
-      lwork = static_cast<octave_idx_type> (std::real(z(0)));
+      lwork = static_cast<octave_idx_type> (std::real (z(0)));
       lwork = (lwork <  2 *nc ? 2*nc : lwork);
       z.resize (dim_vector (lwork, 1));
       Complex *pz = z.fortran_vec ();
@@ -1089,7 +1089,7 @@
       // Calculate the norm of the matrix, for later use.
       double anorm;
       if (calc_cond)
-        anorm  = retval.abs ().sum ().row(static_cast<octave_idx_type>(0)).max ();
+        anorm = retval.abs ().sum ().row (static_cast<octave_idx_type>(0)).max ();
 
       F77_XFCN (zgetrf, ZGETRF, (nc, nc, tmp_data, nr, pipvt, info));
 
@@ -1163,7 +1163,7 @@
         }
 
       if (!mattype.is_hermitian ())
-        ret = finverse(mattype, info, rcon, force, calc_cond);
+        ret = finverse (mattype, info, rcon, force, calc_cond);
 
       if ((mattype.is_hermitian () || calc_cond) && rcon == 0.)
         ret = ComplexMatrix (rows (), columns (), Complex (octave_Inf, 0.));
@@ -1832,7 +1832,7 @@
               Array<octave_idx_type> ipvt (dim_vector (nr, 1));
               octave_idx_type *pipvt = ipvt.fortran_vec ();
 
-              if(anorm < 0.)
+              if (anorm < 0.)
                 anorm = atmp.abs ().sum ().
                   row(static_cast<octave_idx_type>(0)).max ();
 
@@ -2100,7 +2100,7 @@
           char job = 'L';
           ComplexMatrix atmp = *this;
           Complex *tmp_data = atmp.fortran_vec ();
-          anorm = atmp.abs ().sum ().row(static_cast<octave_idx_type>(0)).max ();
+          anorm = atmp.abs ().sum ().row (static_cast<octave_idx_type>(0)).max ();
 
           F77_XFCN (zpotrf, ZPOTRF, (F77_CONST_CHAR_ARG2 (&job, 1), nr,
                                      tmp_data, nr, info
@@ -2184,7 +2184,7 @@
 
           // Calculate the norm of the matrix, for later use.
           if (anorm < 0.)
-            anorm = atmp.abs ().sum ().row(static_cast<octave_idx_type>(0)).max ();
+            anorm = atmp.abs ().sum ().row (static_cast<octave_idx_type>(0)).max ();
 
           F77_XFCN (zgetrf, ZGETRF, (nr, nr, tmp_data, nr, pipvt, info));
 
@@ -2410,7 +2410,7 @@
 
   ComplexMatrix tmp (b);
   tmp = solve (typ, tmp, info, rcon, sing_handler, true, transt);
-  return tmp.column(static_cast<octave_idx_type> (0));
+  return tmp.column (static_cast<octave_idx_type> (0));
 }
 
 ComplexMatrix
--- a/liboctave/CNDArray.cc
+++ b/liboctave/CNDArray.cc
@@ -240,7 +240,7 @@
           octave_quit ();
 
           for (octave_idx_type i = 0; i < npts; i++)
-            tmp[i] = elem((i + k*npts)*stride + j*dist);
+            tmp[i] = elem ((i + k*npts)*stride + j*dist);
 
           F77_FUNC (zfftf, ZFFTF) (npts, tmp, pwsave);
 
@@ -287,7 +287,7 @@
           octave_quit ();
 
           for (octave_idx_type i = 0; i < npts; i++)
-            tmp[i] = elem((i + k*npts)*stride + j*dist);
+            tmp[i] = elem ((i + k*npts)*stride + j*dist);
 
           F77_FUNC (zfftb, ZFFTB) (npts, tmp, pwsave);
 
--- a/liboctave/CSparse.cc
+++ b/liboctave/CSparse.cc
@@ -172,7 +172,7 @@
         }
     }
   for (octave_idx_type i = l; i <= a.cols (); i++)
-    cidx(i) = j;
+    cidx (i) = j;
 }
 bool
 SparseComplexMatrix::operator == (const SparseComplexMatrix& a) const
@@ -188,11 +188,11 @@
     return false;
 
   for (octave_idx_type i = 0; i < nc + 1; i++)
-    if (cidx(i) != a.cidx(i))
+    if (cidx (i) != a.cidx (i))
         return false;
 
   for (octave_idx_type i = 0; i < nz; i++)
-    if (data(i) != a.data(i) || ridx(i) != a.ridx(i))
+    if (data (i) != a.data (i) || ridx (i) != a.ridx (i))
       return false;
 
   return true;
@@ -214,19 +214,19 @@
     {
       for (octave_idx_type j = 0; j < nc; j++)
         {
-          for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
-            {
-              octave_idx_type ri = ridx(i);
+          for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
+            {
+              octave_idx_type ri = ridx (i);
 
               if (ri != j)
                 {
                   bool found = false;
 
-                  for (octave_idx_type k = cidx(ri); k < cidx(ri+1); k++)
+                  for (octave_idx_type k = cidx (ri); k < cidx (ri+1); k++)
                     {
-                      if (ridx(k) == j)
+                      if (ridx (k) == j)
                         {
-                          if (data(i) == conj(data(k)))
+                          if (data (i) == conj (data (k)))
                             found = true;
                           break;
                         }
@@ -277,9 +277,9 @@
           Complex tmp_max;
           double abs_max = octave_NaN;
           octave_idx_type idx_j = 0;
-          for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
-            {
-              if (ridx(i) != idx_j)
+          for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
+            {
+              if (ridx (i) != idx_j)
                 break;
               else
                 idx_j++;
@@ -291,7 +291,7 @@
               abs_max = 0.;
             }
 
-          for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
+          for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
             {
               Complex tmp = data (i);
 
@@ -332,30 +332,30 @@
     {
       idx_arg.resize (dim_vector (nr, 1), 0);
 
-      for (octave_idx_type i = cidx(0); i < cidx(1); i++)
-        idx_arg.elem(ridx(i)) = -1;
+      for (octave_idx_type i = cidx (0); i < cidx (1); i++)
+        idx_arg.elem (ridx (i)) = -1;
 
       for (octave_idx_type j = 0; j < nc; j++)
         for (octave_idx_type i = 0; i < nr; i++)
           {
-            if (idx_arg.elem(i) != -1)
+            if (idx_arg.elem (i) != -1)
               continue;
             bool found = false;
-            for (octave_idx_type k = cidx(j); k < cidx(j+1); k++)
-              if (ridx(k) == i)
+            for (octave_idx_type k = cidx (j); k < cidx (j+1); k++)
+              if (ridx (k) == i)
                 {
                   found = true;
                   break;
                 }
 
             if (!found)
-              idx_arg.elem(i) = j;
+              idx_arg.elem (i) = j;
 
           }
 
       for (octave_idx_type j = 0; j < nc; j++)
         {
-          for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
+          for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
             {
               octave_idx_type ir = ridx (i);
               octave_idx_type ix = idx_arg.elem (ir);
@@ -363,14 +363,14 @@
 
               if (xisnan (tmp))
                 continue;
-              else if (ix == -1 || std::abs(tmp) > std::abs(elem (ir, ix)))
+              else if (ix == -1 || std::abs (tmp) > std::abs (elem (ir, ix)))
                 idx_arg.elem (ir) = j;
             }
         }
 
       octave_idx_type nel = 0;
       for (octave_idx_type j = 0; j < nr; j++)
-        if (idx_arg.elem(j) == -1 || elem (j, idx_arg.elem (j)) != 0.)
+        if (idx_arg.elem (j) == -1 || elem (j, idx_arg.elem (j)) != 0.)
           nel++;
 
       result = SparseComplexMatrix (nr, 1, nel);
@@ -432,9 +432,9 @@
           Complex tmp_min;
           double abs_min = octave_NaN;
           octave_idx_type idx_j = 0;
-          for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
-            {
-              if (ridx(i) != idx_j)
+          for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
+            {
+              if (ridx (i) != idx_j)
                 break;
               else
                 idx_j++;
@@ -446,7 +446,7 @@
               abs_min = 0.;
             }
 
-          for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
+          for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
             {
               Complex tmp = data (i);
 
@@ -487,30 +487,30 @@
     {
       idx_arg.resize (dim_vector (nr, 1), 0);
 
-      for (octave_idx_type i = cidx(0); i < cidx(1); i++)
-        idx_arg.elem(ridx(i)) = -1;
+      for (octave_idx_type i = cidx (0); i < cidx (1); i++)
+        idx_arg.elem (ridx (i)) = -1;
 
       for (octave_idx_type j = 0; j < nc; j++)
         for (octave_idx_type i = 0; i < nr; i++)
           {
-            if (idx_arg.elem(i) != -1)
+            if (idx_arg.elem (i) != -1)
               continue;
             bool found = false;
-            for (octave_idx_type k = cidx(j); k < cidx(j+1); k++)
-              if (ridx(k) == i)
+            for (octave_idx_type k = cidx (j); k < cidx (j+1); k++)
+              if (ridx (k) == i)
                 {
                   found = true;
                   break;
                 }
 
             if (!found)
-              idx_arg.elem(i) = j;
+              idx_arg.elem (i) = j;
 
           }
 
       for (octave_idx_type j = 0; j < nc; j++)
         {
-          for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
+          for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
             {
               octave_idx_type ir = ridx (i);
               octave_idx_type ix = idx_arg.elem (ir);
@@ -518,14 +518,14 @@
 
               if (xisnan (tmp))
                 continue;
-              else if (ix == -1 || std::abs(tmp) < std::abs(elem (ir, ix)))
+              else if (ix == -1 || std::abs (tmp) < std::abs (elem (ir, ix)))
                 idx_arg.elem (ir) = j;
             }
         }
 
       octave_idx_type nel = 0;
       for (octave_idx_type j = 0; j < nr; j++)
-        if (idx_arg.elem(j) == -1 || elem (j, idx_arg.elem (j)) != 0.)
+        if (idx_arg.elem (j) == -1 || elem (j, idx_arg.elem (j)) != 0.)
           nel++;
 
       result = SparseComplexMatrix (nr, 1, nel);
@@ -663,7 +663,7 @@
   // retval.xcidx[1:nr] holds row entry *start* offsets for rows 0:(nr-1)
 
   for (octave_idx_type j = 0; j < nc; j++)
-    for (octave_idx_type k = cidx(j); k < cidx(j+1); k++)
+    for (octave_idx_type k = cidx (j); k < cidx (j+1); k++)
       {
         octave_idx_type q = retval.xcidx (ridx (k) + 1)++;
         retval.xridx (q) = j;
@@ -755,7 +755,7 @@
               double dmax = 0., dmin = octave_Inf;
               for (octave_idx_type i = 0; i < nr; i++)
                 {
-                  double tmp = std::abs(v[i]);
+                  double tmp = std::abs (v[i]);
                   if (tmp > dmax)
                     dmax = tmp;
                   if (tmp < dmin)
@@ -805,8 +805,8 @@
               for (octave_idx_type j = 0; j < nr; j++)
                 {
                   double atmp = 0.;
-                  for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
-                    atmp += std::abs(data(i));
+                  for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
+                    atmp += std::abs (data (i));
                   if (atmp > anorm)
                     anorm = atmp;
                 }
@@ -831,9 +831,9 @@
                       retval.change_capacity (nz2);
                     }
 
-                  retval.xcidx(i) = cx;
-                  retval.xridx(cx) = i;
-                  retval.xdata(cx) = 1.0;
+                  retval.xcidx (i) = cx;
+                  retval.xridx (cx) = i;
+                  retval.xdata (cx) = 1.0;
                   cx++;
 
                   // iterate accross columns of input matrix
@@ -841,11 +841,11 @@
                     {
                       Complex v = 0.;
                       // iterate to calculate sum
-                      octave_idx_type colXp = retval.xcidx(i);
-                      octave_idx_type colUp = cidx(j);
+                      octave_idx_type colXp = retval.xcidx (i);
+                      octave_idx_type colUp = cidx (j);
                       octave_idx_type rpX, rpU;
 
-                      if (cidx(j) == cidx(j+1))
+                      if (cidx (j) == cidx (j+1))
                         {
                           (*current_liboctave_error_handler)
                             ("division by zero");
@@ -855,8 +855,8 @@
                       do
                         {
                           octave_quit ();
-                          rpX = retval.xridx(colXp);
-                          rpU = ridx(colUp);
+                          rpX = retval.xridx (colXp);
+                          rpU = ridx (colUp);
 
                           if (rpX < rpU)
                             colXp++;
@@ -864,7 +864,7 @@
                             colUp++;
                           else
                             {
-                              v -= retval.xdata(colXp) * data(colUp);
+                              v -= retval.xdata (colXp) * data (colUp);
                               colXp++;
                               colUp++;
                             }
@@ -874,11 +874,11 @@
 
                       // get A(m,m)
                       if (typ == MatrixType::Upper)
-                        colUp = cidx(j+1) - 1;
+                        colUp = cidx (j+1) - 1;
                       else
-                        colUp = cidx(j);
-                      Complex pivot = data(colUp);
-                      if (pivot == 0. || ridx(colUp) != j)
+                        colUp = cidx (j);
+                      Complex pivot = data (colUp);
+                      if (pivot == 0. || ridx (colUp) != j)
                         {
                           (*current_liboctave_error_handler)
                             ("division by zero");
@@ -893,8 +893,8 @@
                               retval.change_capacity (nz2);
                             }
 
-                          retval.xridx(cx) = j;
-                          retval.xdata(cx) = v / pivot;
+                          retval.xridx (cx) = j;
+                          retval.xdata (cx) = v / pivot;
                           cx++;
                         }
                     }
@@ -902,11 +902,11 @@
                   // get A(m,m)
                   octave_idx_type colUp;
                   if (typ == MatrixType::Upper)
-                    colUp = cidx(i+1) - 1;
+                    colUp = cidx (i+1) - 1;
                   else
-                    colUp = cidx(i);
-                  Complex pivot = data(colUp);
-                  if (pivot == 0. || ridx(colUp) != i)
+                    colUp = cidx (i);
+                  Complex pivot = data (colUp);
+                  if (pivot == 0. || ridx (colUp) != i)
                     {
                       (*current_liboctave_error_handler) ("division by zero");
                       goto inverse_singular;
@@ -914,9 +914,9 @@
 
                   if (pivot != 1.0)
                     for (octave_idx_type j = cx_colstart; j < cx; j++)
-                      retval.xdata(j) /= pivot;
-                }
-              retval.xcidx(nr) = cx;
+                      retval.xdata (j) /= pivot;
+                }
+              retval.xcidx (nr) = cx;
               retval.maybe_compress ();
             }
           else
@@ -960,19 +960,19 @@
                       Complex v = 0.;
                       octave_idx_type jidx = perm[j];
                       // iterate to calculate sum
-                      for (octave_idx_type k = cidx(jidx);
-                           k < cidx(jidx+1); k++)
+                      for (octave_idx_type k = cidx (jidx);
+                           k < cidx (jidx+1); k++)
                         {
                           octave_quit ();
-                          v -= work[ridx(k)] * data(k);
+                          v -= work[ridx (k)] * data (k);
                         }
 
                       // get A(m,m)
                       Complex pivot;
                       if (typ == MatrixType::Permuted_Upper)
-                        pivot = data(cidx(jidx+1) - 1);
+                        pivot = data (cidx (jidx+1) - 1);
                       else
-                        pivot = data(cidx(jidx));
+                        pivot = data (cidx (jidx));
                       if (pivot == 0.)
                         {
                           (*current_liboctave_error_handler)
@@ -986,11 +986,11 @@
                   // get A(m,m)
                   octave_idx_type colUp;
                   if (typ == MatrixType::Permuted_Upper)
-                    colUp = cidx(perm[iidx]+1) - 1;
+                    colUp = cidx (perm[iidx]+1) - 1;
                   else
-                    colUp = cidx(perm[iidx]);
-
-                  Complex pivot = data(colUp);
+                    colUp = cidx (perm[iidx]);
+
+                  Complex pivot = data (colUp);
                   if (pivot == 0.)
                     {
                       (*current_liboctave_error_handler)
@@ -1013,16 +1013,16 @@
                       retval.change_capacity (nz2);
                     }
 
-                  retval.xcidx(i) = cx;
+                  retval.xcidx (i) = cx;
                   for (octave_idx_type j = iidx; j < nr; j++)
                     if (work[j] != 0.)
                       {
-                        retval.xridx(cx) = j;
-                        retval.xdata(cx++) = work[j];
+                        retval.xridx (cx) = j;
+                        retval.xdata (cx++) = work[j];
                       }
                 }
 
-              retval.xcidx(nr) = cx;
+              retval.xcidx (nr) = cx;
               retval.maybe_compress ();
             }
 
@@ -1032,9 +1032,9 @@
               for (octave_idx_type j = 0; j < nr; j++)
                 {
                   double atmp = 0.;
-                  for (octave_idx_type i = retval.cidx(j);
-                       i < retval.cidx(j+1); i++)
-                    atmp += std::abs(retval.data(i));
+                  for (octave_idx_type i = retval.cidx (j);
+                       i < retval.cidx (j+1); i++)
+                    atmp += std::abs (retval.data (i));
                   if (atmp > ainvnorm)
                     ainvnorm = atmp;
                 }
@@ -1083,7 +1083,7 @@
               double rcond2;
               SparseMatrix Q = fact.Q ();
               SparseComplexMatrix InvL = fact.L ().transpose ().
-                tinverse(tmp_typ, info, rcond2, true, false);
+                tinverse (tmp_typ, info, rcond2, true, false);
               ret = Q * InvL.hermitian () * InvL * Q.transpose ();
             }
           else
@@ -1106,9 +1106,9 @@
           rcond = fact.rcond ();
           double rcond2;
           SparseComplexMatrix InvL = fact.L ().transpose ().
-            tinverse(tmp_typ, info, rcond2, true, false);
+            tinverse (tmp_typ, info, rcond2, true, false);
           SparseComplexMatrix InvU = fact.U ().
-            tinverse(tmp_typ, info, rcond2, true, false).transpose ();
+            tinverse (tmp_typ, info, rcond2, true, false).transpose ();
           ret = fact.Pc ().transpose () * InvU * InvL * fact.Pr ();
         }
     }
@@ -1279,7 +1279,7 @@
       if (typ == MatrixType::Diagonal ||
           typ == MatrixType::Permuted_Diagonal)
         {
-          retval.resize (nc, b.cols (), Complex(0.,0.));
+          retval.resize (nc, b.cols (), Complex (0.,0.));
           if (typ == MatrixType::Diagonal)
             for (octave_idx_type j = 0; j < b.cols (); j++)
                 for (octave_idx_type i = 0; i < nm; i++)
@@ -1287,15 +1287,15 @@
           else
             for (octave_idx_type j = 0; j < b.cols (); j++)
               for (octave_idx_type k = 0; k < nc; k++)
-                for (octave_idx_type i = cidx(k); i < cidx(k+1); i++)
-                  retval(k,j) = b(ridx(i),j) / data (i);
+                for (octave_idx_type i = cidx (k); i < cidx (k+1); i++)
+                  retval(k,j) = b(ridx (i),j) / data (i);
 
           if (calc_cond)
             {
               double dmax = 0., dmin = octave_Inf;
               for (octave_idx_type i = 0; i < nm; i++)
                 {
-                  double tmp = std::abs(data(i));
+                  double tmp = std::abs (data (i));
                   if (tmp > dmax)
                     dmax = tmp;
                   if (tmp < dmin)
@@ -1344,30 +1344,30 @@
           octave_idx_type b_nz = b.nnz ();
           retval = SparseComplexMatrix (nc, b_nc, b_nz);
 
-          retval.xcidx(0) = 0;
+          retval.xcidx (0) = 0;
           octave_idx_type ii = 0;
           if (typ == MatrixType::Diagonal)
             for (octave_idx_type j = 0; j < b.cols (); j++)
               {
-                for (octave_idx_type i = b.cidx(j); i < b.cidx(j+1); i++)
+                for (octave_idx_type i = b.cidx (j); i < b.cidx (j+1); i++)
                   {
-                    if (b.ridx(i) >= nm)
+                    if (b.ridx (i) >= nm)
                       break;
-                    retval.xridx (ii) = b.ridx(i);
-                    retval.xdata (ii++) = b.data(i) / data (b.ridx (i));
+                    retval.xridx (ii) = b.ridx (i);
+                    retval.xdata (ii++) = b.data (i) / data (b.ridx (i));
                   }
-                retval.xcidx(j+1) = ii;
+                retval.xcidx (j+1) = ii;
               }
           else
             for (octave_idx_type j = 0; j < b.cols (); j++)
               {
                 for (octave_idx_type l = 0; l < nc; l++)
-                  for (octave_idx_type i = cidx(l); i < cidx(l+1); i++)
+                  for (octave_idx_type i = cidx (l); i < cidx (l+1); i++)
                     {
                       bool found = false;
                       octave_idx_type k;
-                      for (k = b.cidx(j); k < b.cidx(j+1); k++)
-                        if (ridx(i) == b.ridx(k))
+                      for (k = b.cidx (j); k < b.cidx (j+1); k++)
+                        if (ridx (i) == b.ridx (k))
                           {
                             found = true;
                             break;
@@ -1375,10 +1375,10 @@
                       if (found)
                         {
                           retval.xridx (ii) = l;
-                          retval.xdata (ii++) = b.data(k) / data (i);
+                          retval.xdata (ii++) = b.data (k) / data (i);
                         }
                     }
-                retval.xcidx(j+1) = ii;
+                retval.xcidx (j+1) = ii;
               }
 
           if (calc_cond)
@@ -1386,7 +1386,7 @@
               double dmax = 0., dmin = octave_Inf;
               for (octave_idx_type i = 0; i < nm; i++)
                 {
-                  double tmp = std::abs(data(i));
+                  double tmp = std::abs (data (i));
                   if (tmp > dmax)
                     dmax = tmp;
                   if (tmp < dmin)
@@ -1431,7 +1431,7 @@
       if (typ == MatrixType::Diagonal ||
           typ == MatrixType::Permuted_Diagonal)
         {
-          retval.resize (nc, b.cols (), Complex(0.,0.));
+          retval.resize (nc, b.cols (), Complex (0.,0.));
           if (typ == MatrixType::Diagonal)
             for (octave_idx_type j = 0; j < b.cols (); j++)
               for (octave_idx_type i = 0; i < nm; i++)
@@ -1439,15 +1439,15 @@
           else
             for (octave_idx_type j = 0; j < b.cols (); j++)
               for (octave_idx_type k = 0; k < nc; k++)
-                for (octave_idx_type i = cidx(k); i < cidx(k+1); i++)
-                  retval(k,j) = b(ridx(i),j) / data (i);
+                for (octave_idx_type i = cidx (k); i < cidx (k+1); i++)
+                  retval(k,j) = b(ridx (i),j) / data (i);
 
           if (calc_cond)
             {
               double dmax = 0., dmin = octave_Inf;
               for (octave_idx_type i = 0; i < nr; i++)
                 {
-                  double tmp = std::abs(data(i));
+                  double tmp = std::abs (data (i));
                   if (tmp > dmax)
                     dmax = tmp;
                   if (tmp < dmin)
@@ -1496,30 +1496,30 @@
           octave_idx_type b_nz = b.nnz ();
           retval = SparseComplexMatrix (nc, b_nc, b_nz);
 
-          retval.xcidx(0) = 0;
+          retval.xcidx (0) = 0;
           octave_idx_type ii = 0;
           if (typ == MatrixType::Diagonal)
             for (octave_idx_type j = 0; j < b.cols (); j++)
               {
-                for (octave_idx_type i = b.cidx(j); i < b.cidx(j+1); i++)
+                for (octave_idx_type i = b.cidx (j); i < b.cidx (j+1); i++)
                   {
-                    if (b.ridx(i) >= nm)
+                    if (b.ridx (i) >= nm)
                       break;
-                    retval.xridx (ii) = b.ridx(i);
-                    retval.xdata (ii++) = b.data(i) / data (b.ridx (i));
+                    retval.xridx (ii) = b.ridx (i);
+                    retval.xdata (ii++) = b.data (i) / data (b.ridx (i));
                   }
-                retval.xcidx(j+1) = ii;
+                retval.xcidx (j+1) = ii;
               }
           else
             for (octave_idx_type j = 0; j < b.cols (); j++)
               {
                 for (octave_idx_type l = 0; l < nc; l++)
-                  for (octave_idx_type i = cidx(l); i < cidx(l+1); i++)
+                  for (octave_idx_type i = cidx (l); i < cidx (l+1); i++)
                     {
                       bool found = false;
                       octave_idx_type k;
-                      for (k = b.cidx(j); k < b.cidx(j+1); k++)
-                        if (ridx(i) == b.ridx(k))
+                      for (k = b.cidx (j); k < b.cidx (j+1); k++)
+                        if (ridx (i) == b.ridx (k))
                           {
                             found = true;
                             break;
@@ -1527,10 +1527,10 @@
                       if (found)
                         {
                           retval.xridx (ii) = l;
-                          retval.xdata (ii++) = b.data(k) / data (i);
+                          retval.xdata (ii++) = b.data (k) / data (i);
                         }
                     }
-                retval.xcidx(j+1) = ii;
+                retval.xcidx (j+1) = ii;
               }
 
           if (calc_cond)
@@ -1538,7 +1538,7 @@
               double dmax = 0., dmin = octave_Inf;
               for (octave_idx_type i = 0; i < nm; i++)
                 {
-                  double tmp = std::abs(data(i));
+                  double tmp = std::abs (data (i));
                   if (tmp > dmax)
                     dmax = tmp;
                   if (tmp < dmin)
@@ -1594,8 +1594,8 @@
               for (octave_idx_type j = 0; j < nc; j++)
                 {
                   double atmp = 0.;
-                  for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
-                    atmp += std::abs(data(i));
+                  for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
+                    atmp += std::abs (data (i));
                   if (atmp > anorm)
                     anorm = atmp;
                 }
@@ -1620,20 +1620,20 @@
 
                       if (work[k] != 0.)
                         {
-                          if (ridx(cidx(kidx+1)-1) != k ||
-                              data(cidx(kidx+1)-1) == 0.)
+                          if (ridx (cidx (kidx+1)-1) != k ||
+                              data (cidx (kidx+1)-1) == 0.)
                             {
                               err = -2;
                               goto triangular_error;
                             }
 
-                          Complex tmp = work[k] / data(cidx(kidx+1)-1);
+                          Complex tmp = work[k] / data (cidx (kidx+1)-1);
                           work[k] = tmp;
-                          for (octave_idx_type i = cidx(kidx);
-                               i < cidx(kidx+1)-1; i++)
+                          for (octave_idx_type i = cidx (kidx);
+                               i < cidx (kidx+1)-1; i++)
                             {
-                              octave_idx_type iidx = ridx(i);
-                              work[iidx] = work[iidx] - tmp * data(i);
+                              octave_idx_type iidx = ridx (i);
+                              work[iidx] = work[iidx] - tmp * data (i);
                             }
                         }
                     }
@@ -1658,20 +1658,20 @@
 
                           if (work[k] != 0.)
                             {
-                              Complex tmp = work[k] / data(cidx(iidx+1)-1);
+                              Complex tmp = work[k] / data (cidx (iidx+1)-1);
                               work[k] = tmp;
-                              for (octave_idx_type i = cidx(iidx);
-                                   i < cidx(iidx+1)-1; i++)
+                              for (octave_idx_type i = cidx (iidx);
+                                   i < cidx (iidx+1)-1; i++)
                                 {
-                                  octave_idx_type idx2 = ridx(i);
-                                  work[idx2] = work[idx2] - tmp * data(i);
+                                  octave_idx_type idx2 = ridx (i);
+                                  work[idx2] = work[idx2] - tmp * data (i);
                                 }
                             }
                         }
                       double atmp = 0;
                       for (octave_idx_type i = 0; i < j+1; i++)
                         {
-                          atmp += std::abs(work[i]);
+                          atmp += std::abs (work[i]);
                           work[i] = 0.;
                         }
                       if (atmp > ainvnorm)
@@ -1696,19 +1696,19 @@
                     {
                       if (work[k] != 0.)
                         {
-                          if (ridx(cidx(k+1)-1) != k ||
-                              data(cidx(k+1)-1) == 0.)
+                          if (ridx (cidx (k+1)-1) != k ||
+                              data (cidx (k+1)-1) == 0.)
                             {
                               err = -2;
                               goto triangular_error;
                             }
 
-                          Complex tmp = work[k] / data(cidx(k+1)-1);
+                          Complex tmp = work[k] / data (cidx (k+1)-1);
                           work[k] = tmp;
-                          for (octave_idx_type i = cidx(k); i < cidx(k+1)-1; i++)
+                          for (octave_idx_type i = cidx (k); i < cidx (k+1)-1; i++)
                             {
-                              octave_idx_type iidx = ridx(i);
-                              work[iidx] = work[iidx] - tmp * data(i);
+                              octave_idx_type iidx = ridx (i);
+                              work[iidx] = work[iidx] - tmp * data (i);
                             }
                         }
                     }
@@ -1731,20 +1731,20 @@
                         {
                           if (work[k] != 0.)
                             {
-                              Complex tmp = work[k] / data(cidx(k+1)-1);
+                              Complex tmp = work[k] / data (cidx (k+1)-1);
                               work[k] = tmp;
-                              for (octave_idx_type i = cidx(k);
-                                   i < cidx(k+1)-1; i++)
+                              for (octave_idx_type i = cidx (k);
+                                   i < cidx (k+1)-1; i++)
                                 {
-                                  octave_idx_type iidx = ridx(i);
-                                  work[iidx] = work[iidx] - tmp * data(i);
+                                  octave_idx_type iidx = ridx (i);
+                                  work[iidx] = work[iidx] - tmp * data (i);
                                 }
                             }
                         }
                       double atmp = 0;
                       for (octave_idx_type i = 0; i < j+1; i++)
                         {
-                          atmp += std::abs(work[i]);
+                          atmp += std::abs (work[i]);
                           work[i] = 0.;
                         }
                       if (atmp > ainvnorm)
@@ -1829,8 +1829,8 @@
               for (octave_idx_type j = 0; j < nc; j++)
                 {
                   double atmp = 0.;
-                  for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
-                    atmp += std::abs(data(i));
+                  for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
+                    atmp += std::abs (data (i));
                   if (atmp > anorm)
                     anorm = atmp;
                 }
@@ -1839,7 +1839,7 @@
           octave_idx_type b_nc = b.cols ();
           octave_idx_type b_nz = b.nnz ();
           retval = SparseComplexMatrix (nc, b_nc, b_nz);
-          retval.xcidx(0) = 0;
+          retval.xcidx (0) = 0;
           octave_idx_type ii = 0;
           octave_idx_type x_nz = b_nz;
 
@@ -1856,8 +1856,8 @@
                 {
                   for (octave_idx_type i = 0; i < nm; i++)
                     work[i] = 0.;
-                  for (octave_idx_type i = b.cidx(j); i < b.cidx(j+1); i++)
-                    work[b.ridx(i)] = b.data(i);
+                  for (octave_idx_type i = b.cidx (j); i < b.cidx (j+1); i++)
+                    work[b.ridx (i)] = b.data (i);
 
                   for (octave_idx_type k = nc-1; k >= 0; k--)
                     {
@@ -1865,20 +1865,20 @@
 
                       if (work[k] != 0.)
                         {
-                          if (ridx(cidx(kidx+1)-1) != k ||
-                              data(cidx(kidx+1)-1) == 0.)
+                          if (ridx (cidx (kidx+1)-1) != k ||
+                              data (cidx (kidx+1)-1) == 0.)
                             {
                               err = -2;
                               goto triangular_error;
                             }
 
-                          Complex tmp = work[k] / data(cidx(kidx+1)-1);
+                          Complex tmp = work[k] / data (cidx (kidx+1)-1);
                           work[k] = tmp;
-                          for (octave_idx_type i = cidx(kidx);
-                               i < cidx(kidx+1)-1; i++)
+                          for (octave_idx_type i = cidx (kidx);
+                               i < cidx (kidx+1)-1; i++)
                             {
-                              octave_idx_type iidx = ridx(i);
-                              work[iidx] = work[iidx] - tmp * data(i);
+                              octave_idx_type iidx = ridx (i);
+                              work[iidx] = work[iidx] - tmp * data (i);
                             }
                         }
                     }
@@ -1901,10 +1901,10 @@
                   for (octave_idx_type i = 0; i < nc; i++)
                     if (work[rperm[i]] != 0.)
                       {
-                        retval.xridx(ii) = i;
-                        retval.xdata(ii++) = work[rperm[i]];
+                        retval.xridx (ii) = i;
+                        retval.xdata (ii++) = work[rperm[i]];
                       }
-                  retval.xcidx(j+1) = ii;
+                  retval.xcidx (j+1) = ii;
                 }
 
               retval.maybe_compress ();
@@ -1925,20 +1925,20 @@
 
                           if (work[k] != 0.)
                             {
-                              Complex tmp = work[k] / data(cidx(iidx+1)-1);
+                              Complex tmp = work[k] / data (cidx (iidx+1)-1);
                               work[k] = tmp;
-                              for (octave_idx_type i = cidx(iidx);
-                                   i < cidx(iidx+1)-1; i++)
+                              for (octave_idx_type i = cidx (iidx);
+                                   i < cidx (iidx+1)-1; i++)
                                 {
-                                  octave_idx_type idx2 = ridx(i);
-                                  work[idx2] = work[idx2] - tmp * data(i);
+                                  octave_idx_type idx2 = ridx (i);
+                                  work[idx2] = work[idx2] - tmp * data (i);
                                 }
                             }
                         }
                       double atmp = 0;
                       for (octave_idx_type i = 0; i < j+1; i++)
                         {
-                          atmp += std::abs(work[i]);
+                          atmp += std::abs (work[i]);
                           work[i] = 0.;
                         }
                       if (atmp > ainvnorm)
@@ -1955,26 +1955,26 @@
                 {
                   for (octave_idx_type i = 0; i < nm; i++)
                     work[i] = 0.;
-                  for (octave_idx_type i = b.cidx(j); i < b.cidx(j+1); i++)
-                    work[b.ridx(i)] = b.data(i);
+                  for (octave_idx_type i = b.cidx (j); i < b.cidx (j+1); i++)
+                    work[b.ridx (i)] = b.data (i);
 
                   for (octave_idx_type k = nc-1; k >= 0; k--)
                     {
                       if (work[k] != 0.)
                         {
-                          if (ridx(cidx(k+1)-1) != k ||
-                              data(cidx(k+1)-1) == 0.)
+                          if (ridx (cidx (k+1)-1) != k ||
+                              data (cidx (k+1)-1) == 0.)
                             {
                               err = -2;
                               goto triangular_error;
                             }
 
-                          Complex tmp = work[k] / data(cidx(k+1)-1);
+                          Complex tmp = work[k] / data (cidx (k+1)-1);
                           work[k] = tmp;
-                          for (octave_idx_type i = cidx(k); i < cidx(k+1)-1; i++)
+                          for (octave_idx_type i = cidx (k); i < cidx (k+1)-1; i++)
                             {
-                              octave_idx_type iidx = ridx(i);
-                              work[iidx] = work[iidx] - tmp * data(i);
+                              octave_idx_type iidx = ridx (i);
+                              work[iidx] = work[iidx] - tmp * data (i);
                             }
                         }
                     }
@@ -1997,10 +1997,10 @@
                   for (octave_idx_type i = 0; i < nc; i++)
                     if (work[i] != 0.)
                       {
-                        retval.xridx(ii) = i;
-                        retval.xdata(ii++) = work[i];
+                        retval.xridx (ii) = i;
+                        retval.xdata (ii++) = work[i];
                       }
-                  retval.xcidx(j+1) = ii;
+                  retval.xcidx (j+1) = ii;
                 }
 
               retval.maybe_compress ();
@@ -2019,20 +2019,20 @@
                         {
                           if (work[k] != 0.)
                             {
-                              Complex tmp = work[k] / data(cidx(k+1)-1);
+                              Complex tmp = work[k] / data (cidx (k+1)-1);
                               work[k] = tmp;
-                              for (octave_idx_type i = cidx(k);
-                                   i < cidx(k+1)-1; i++)
+                              for (octave_idx_type i = cidx (k);
+                                   i < cidx (k+1)-1; i++)
                                 {
-                                  octave_idx_type iidx = ridx(i);
-                                  work[iidx] = work[iidx] - tmp * data(i);
+                                  octave_idx_type iidx = ridx (i);
+                                  work[iidx] = work[iidx] - tmp * data (i);
                                 }
                             }
                         }
                       double atmp = 0;
                       for (octave_idx_type i = 0; i < j+1; i++)
                         {
-                          atmp += std::abs(work[i]);
+                          atmp += std::abs (work[i]);
                           work[i] = 0.;
                         }
                       if (atmp > ainvnorm)
@@ -2117,8 +2117,8 @@
               for (octave_idx_type j = 0; j < nc; j++)
                 {
                   double atmp = 0.;
-                  for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
-                    atmp += std::abs(data(i));
+                  for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
+                    atmp += std::abs (data (i));
                   if (atmp > anorm)
                     anorm = atmp;
                 }
@@ -2143,20 +2143,20 @@
 
                       if (work[k] != 0.)
                         {
-                          if (ridx(cidx(kidx+1)-1) != k ||
-                              data(cidx(kidx+1)-1) == 0.)
+                          if (ridx (cidx (kidx+1)-1) != k ||
+                              data (cidx (kidx+1)-1) == 0.)
                             {
                               err = -2;
                               goto triangular_error;
                             }
 
-                          Complex tmp = work[k] / data(cidx(kidx+1)-1);
+                          Complex tmp = work[k] / data (cidx (kidx+1)-1);
                           work[k] = tmp;
-                          for (octave_idx_type i = cidx(kidx);
-                               i < cidx(kidx+1)-1; i++)
+                          for (octave_idx_type i = cidx (kidx);
+                               i < cidx (kidx+1)-1; i++)
                             {
-                              octave_idx_type iidx = ridx(i);
-                              work[iidx] = work[iidx] - tmp * data(i);
+                              octave_idx_type iidx = ridx (i);
+                              work[iidx] = work[iidx] - tmp * data (i);
                             }
                         }
                     }
@@ -2181,20 +2181,20 @@
 
                           if (work[k] != 0.)
                             {
-                              Complex tmp = work[k] / data(cidx(iidx+1)-1);
+                              Complex tmp = work[k] / data (cidx (iidx+1)-1);
                               work[k] = tmp;
-                              for (octave_idx_type i = cidx(iidx);
-                                   i < cidx(iidx+1)-1; i++)
+                              for (octave_idx_type i = cidx (iidx);
+                                   i < cidx (iidx+1)-1; i++)
                                 {
-                                  octave_idx_type idx2 = ridx(i);
-                                  work[idx2] = work[idx2] - tmp * data(i);
+                                  octave_idx_type idx2 = ridx (i);
+                                  work[idx2] = work[idx2] - tmp * data (i);
                                 }
                             }
                         }
                       double atmp = 0;
                       for (octave_idx_type i = 0; i < j+1; i++)
                         {
-                          atmp += std::abs(work[i]);
+                          atmp += std::abs (work[i]);
                           work[i] = 0.;
                         }
                       if (atmp > ainvnorm)
@@ -2219,19 +2219,19 @@
                     {
                       if (work[k] != 0.)
                         {
-                          if (ridx(cidx(k+1)-1) != k ||
-                              data(cidx(k+1)-1) == 0.)
+                          if (ridx (cidx (k+1)-1) != k ||
+                              data (cidx (k+1)-1) == 0.)
                             {
                               err = -2;
                               goto triangular_error;
                             }
 
-                          Complex tmp = work[k] / data(cidx(k+1)-1);
+                          Complex tmp = work[k] / data (cidx (k+1)-1);
                           work[k] = tmp;
-                          for (octave_idx_type i = cidx(k); i < cidx(k+1)-1; i++)
+                          for (octave_idx_type i = cidx (k); i < cidx (k+1)-1; i++)
                             {
-                              octave_idx_type iidx = ridx(i);
-                              work[iidx] = work[iidx] - tmp * data(i);
+                              octave_idx_type iidx = ridx (i);
+                              work[iidx] = work[iidx] - tmp * data (i);
                             }
                         }
                     }
@@ -2254,20 +2254,20 @@
                         {
                           if (work[k] != 0.)
                             {
-                              Complex tmp = work[k] / data(cidx(k+1)-1);
+                              Complex tmp = work[k] / data (cidx (k+1)-1);
                               work[k] = tmp;
-                              for (octave_idx_type i = cidx(k);
-                                   i < cidx(k+1)-1; i++)
+                              for (octave_idx_type i = cidx (k);
+                                   i < cidx (k+1)-1; i++)
                                 {
-                                  octave_idx_type iidx = ridx(i);
-                                  work[iidx] = work[iidx] - tmp * data(i);
+                                  octave_idx_type iidx = ridx (i);
+                                  work[iidx] = work[iidx] - tmp * data (i);
                                 }
                             }
                         }
                       double atmp = 0;
                       for (octave_idx_type i = 0; i < j+1; i++)
                         {
-                          atmp += std::abs(work[i]);
+                          atmp += std::abs (work[i]);
                           work[i] = 0.;
                         }
                       if (atmp > ainvnorm)
@@ -2352,8 +2352,8 @@
               for (octave_idx_type j = 0; j < nc; j++)
                 {
                   double atmp = 0.;
-                  for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
-                    atmp += std::abs(data(i));
+                  for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
+                    atmp += std::abs (data (i));
                   if (atmp > anorm)
                     anorm = atmp;
                 }
@@ -2362,7 +2362,7 @@
           octave_idx_type b_nc = b.cols ();
           octave_idx_type b_nz = b.nnz ();
           retval = SparseComplexMatrix (nc, b_nc, b_nz);
-          retval.xcidx(0) = 0;
+          retval.xcidx (0) = 0;
           octave_idx_type ii = 0;
           octave_idx_type x_nz = b_nz;
 
@@ -2379,8 +2379,8 @@
                 {
                   for (octave_idx_type i = 0; i < nm; i++)
                     work[i] = 0.;
-                  for (octave_idx_type i = b.cidx(j); i < b.cidx(j+1); i++)
-                    work[b.ridx(i)] = b.data(i);
+                  for (octave_idx_type i = b.cidx (j); i < b.cidx (j+1); i++)
+                    work[b.ridx (i)] = b.data (i);
 
                   for (octave_idx_type k = nc-1; k >= 0; k--)
                     {
@@ -2388,20 +2388,20 @@
 
                       if (work[k] != 0.)
                         {
-                          if (ridx(cidx(kidx+1)-1) != k ||
-                              data(cidx(kidx+1)-1) == 0.)
+                          if (ridx (cidx (kidx+1)-1) != k ||
+                              data (cidx (kidx+1)-1) == 0.)
                             {
                               err = -2;
                               goto triangular_error;
                             }
 
-                          Complex tmp = work[k] / data(cidx(kidx+1)-1);
+                          Complex tmp = work[k] / data (cidx (kidx+1)-1);
                           work[k] = tmp;
-                          for (octave_idx_type i = cidx(kidx);
-                               i < cidx(kidx+1)-1; i++)
+                          for (octave_idx_type i = cidx (kidx);
+                               i < cidx (kidx+1)-1; i++)
                             {
-                              octave_idx_type iidx = ridx(i);
-                              work[iidx] = work[iidx] - tmp * data(i);
+                              octave_idx_type iidx = ridx (i);
+                              work[iidx] = work[iidx] - tmp * data (i);
                             }
                         }
                     }
@@ -2424,10 +2424,10 @@
                   for (octave_idx_type i = 0; i < nc; i++)
                     if (work[rperm[i]] != 0.)
                       {
-                        retval.xridx(ii) = i;
-                        retval.xdata(ii++) = work[rperm[i]];
+                        retval.xridx (ii) = i;
+                        retval.xdata (ii++) = work[rperm[i]];
                       }
-                  retval.xcidx(j+1) = ii;
+                  retval.xcidx (j+1) = ii;
                 }
 
               retval.maybe_compress ();
@@ -2448,20 +2448,20 @@
 
                           if (work[k] != 0.)
                             {
-                              Complex tmp = work[k] / data(cidx(iidx+1)-1);
+                              Complex tmp = work[k] / data (cidx (iidx+1)-1);
                               work[k] = tmp;
-                              for (octave_idx_type i = cidx(iidx);
-                                   i < cidx(iidx+1)-1; i++)
+                              for (octave_idx_type i = cidx (iidx);
+                                   i < cidx (iidx+1)-1; i++)
                                 {
-                                  octave_idx_type idx2 = ridx(i);
-                                  work[idx2] = work[idx2] - tmp * data(i);
+                                  octave_idx_type idx2 = ridx (i);
+                                  work[idx2] = work[idx2] - tmp * data (i);
                                 }
                             }
                         }
                       double atmp = 0;
                       for (octave_idx_type i = 0; i < j+1; i++)
                         {
-                          atmp += std::abs(work[i]);
+                          atmp += std::abs (work[i]);
                           work[i] = 0.;
                         }
                       if (atmp > ainvnorm)
@@ -2478,26 +2478,26 @@
                 {
                   for (octave_idx_type i = 0; i < nm; i++)
                     work[i] = 0.;
-                  for (octave_idx_type i = b.cidx(j); i < b.cidx(j+1); i++)
-                    work[b.ridx(i)] = b.data(i);
+                  for (octave_idx_type i = b.cidx (j); i < b.cidx (j+1); i++)
+                    work[b.ridx (i)] = b.data (i);
 
                   for (octave_idx_type k = nr-1; k >= 0; k--)
                     {
                       if (work[k] != 0.)
                         {
-                          if (ridx(cidx(k+1)-1) != k ||
-                              data(cidx(k+1)-1) == 0.)
+                          if (ridx (cidx (k+1)-1) != k ||
+                              data (cidx (k+1)-1) == 0.)
                             {
                               err = -2;
                               goto triangular_error;
                             }
 
-                          Complex tmp = work[k] / data(cidx(k+1)-1);
+                          Complex tmp = work[k] / data (cidx (k+1)-1);
                           work[k] = tmp;
-                          for (octave_idx_type i = cidx(k); i < cidx(k+1)-1; i++)
+                          for (octave_idx_type i = cidx (k); i < cidx (k+1)-1; i++)
                             {
-                              octave_idx_type iidx = ridx(i);
-                              work[iidx] = work[iidx] - tmp * data(i);
+                              octave_idx_type iidx = ridx (i);
+                              work[iidx] = work[iidx] - tmp * data (i);
                             }
                         }
                     }
@@ -2520,10 +2520,10 @@
                   for (octave_idx_type i = 0; i < nc; i++)
                     if (work[i] != 0.)
                       {
-                        retval.xridx(ii) = i;
-                        retval.xdata(ii++) = work[i];
+                        retval.xridx (ii) = i;
+                        retval.xdata (ii++) = work[i];
                       }
-                  retval.xcidx(j+1) = ii;
+                  retval.xcidx (j+1) = ii;
                 }
 
               retval.maybe_compress ();
@@ -2542,20 +2542,20 @@
                         {
                           if (work[k] != 0.)
                             {
-                              Complex tmp = work[k] / data(cidx(k+1)-1);
+                              Complex tmp = work[k] / data (cidx (k+1)-1);
                               work[k] = tmp;
-                              for (octave_idx_type i = cidx(k);
-                                   i < cidx(k+1)-1; i++)
+                              for (octave_idx_type i = cidx (k);
+                                   i < cidx (k+1)-1; i++)
                                 {
-                                  octave_idx_type iidx = ridx(i);
-                                  work[iidx] = work[iidx] - tmp * data(i);
+                                  octave_idx_type iidx = ridx (i);
+                                  work[iidx] = work[iidx] - tmp * data (i);
                                 }
                             }
                         }
                       double atmp = 0;
                       for (octave_idx_type i = 0; i < j+1; i++)
                         {
-                          atmp += std::abs(work[i]);
+                          atmp += std::abs (work[i]);
                           work[i] = 0.;
                         }
                       if (atmp > ainvnorm)
@@ -2641,8 +2641,8 @@
               for (octave_idx_type j = 0; j < nc; j++)
                 {
                   double atmp = 0.;
-                  for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
-                    atmp += std::abs(data(i));
+                  for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
+                    atmp += std::abs (data (i));
                   if (atmp > anorm)
                     anorm = atmp;
                 }
@@ -2668,10 +2668,10 @@
                           octave_idx_type minr = nr;
                           octave_idx_type mini = 0;
 
-                          for (octave_idx_type i = cidx(k); i < cidx(k+1); i++)
-                            if (perm[ridx(i)] < minr)
+                          for (octave_idx_type i = cidx (k); i < cidx (k+1); i++)
+                            if (perm[ridx (i)] < minr)
                               {
-                                minr = perm[ridx(i)];
+                                minr = perm[ridx (i)];
                                 mini = i;
                               }
 
@@ -2681,15 +2681,15 @@
                               goto triangular_error;
                             }
 
-                          Complex tmp = work[k] / data(mini);
+                          Complex tmp = work[k] / data (mini);
                           work[k] = tmp;
-                          for (octave_idx_type i = cidx(k); i < cidx(k+1); i++)
+                          for (octave_idx_type i = cidx (k); i < cidx (k+1); i++)
                             {
                               if (i == mini)
                                 continue;
 
-                              octave_idx_type iidx = perm[ridx(i)];
-                              work[iidx] = work[iidx] - tmp * data(i);
+                              octave_idx_type iidx = perm[ridx (i)];
+                              work[iidx] = work[iidx] - tmp * data (i);
                             }
                         }
                     }
@@ -2715,24 +2715,24 @@
                               octave_idx_type minr = nr;
                               octave_idx_type mini = 0;
 
-                              for (octave_idx_type i = cidx(k);
-                                   i < cidx(k+1); i++)
-                                if (perm[ridx(i)] < minr)
+                              for (octave_idx_type i = cidx (k);
+                                   i < cidx (k+1); i++)
+                                if (perm[ridx (i)] < minr)
                                   {
-                                    minr = perm[ridx(i)];
+                                    minr = perm[ridx (i)];
                                     mini = i;
                                   }
 
-                              Complex tmp = work[k] / data(mini);
+                              Complex tmp = work[k] / data (mini);
                               work[k] = tmp;
-                              for (octave_idx_type i = cidx(k);
-                                   i < cidx(k+1); i++)
+                              for (octave_idx_type i = cidx (k);
+                                   i < cidx (k+1); i++)
                                 {
                                   if (i == mini)
                                     continue;
 
-                                  octave_idx_type iidx = perm[ridx(i)];
-                                  work[iidx] = work[iidx] - tmp * data(i);
+                                  octave_idx_type iidx = perm[ridx (i)];
+                                  work[iidx] = work[iidx] - tmp * data (i);
                                 }
                             }
                         }
@@ -2740,7 +2740,7 @@
                       double atmp = 0;
                       for (octave_idx_type i = j; i < nc; i++)
                         {
-                          atmp += std::abs(work[i]);
+                          atmp += std::abs (work[i]);
                           work[i] = 0.;
                         }
                       if (atmp > ainvnorm)
@@ -2764,19 +2764,19 @@
                     {
                       if (work[k] != 0.)
                         {
-                          if (ridx(cidx(k)) != k ||
-                              data(cidx(k)) == 0.)
+                          if (ridx (cidx (k)) != k ||
+                              data (cidx (k)) == 0.)
                             {
                               err = -2;
                               goto triangular_error;
                             }
 
-                          Complex tmp = work[k] / data(cidx(k));
+                          Complex tmp = work[k] / data (cidx (k));
                           work[k] = tmp;
-                          for (octave_idx_type i = cidx(k)+1; i < cidx(k+1); i++)
+                          for (octave_idx_type i = cidx (k)+1; i < cidx (k+1); i++)
                             {
-                              octave_idx_type iidx = ridx(i);
-                              work[iidx] = work[iidx] - tmp * data(i);
+                              octave_idx_type iidx = ridx (i);
+                              work[iidx] = work[iidx] - tmp * data (i);
                             }
                         }
                     }
@@ -2799,20 +2799,20 @@
 
                           if (work[k] != 0.)
                             {
-                              Complex tmp = work[k] / data(cidx(k));
+                              Complex tmp = work[k] / data (cidx (k));
                               work[k] = tmp;
-                              for (octave_idx_type i = cidx(k)+1;
-                                   i < cidx(k+1); i++)
+                              for (octave_idx_type i = cidx (k)+1;
+                                   i < cidx (k+1); i++)
                                 {
-                                  octave_idx_type iidx = ridx(i);
-                                  work[iidx] = work[iidx] - tmp * data(i);
+                                  octave_idx_type iidx = ridx (i);
+                                  work[iidx] = work[iidx] - tmp * data (i);
                                 }
                             }
                         }
                       double atmp = 0;
                       for (octave_idx_type i = j; i < nc; i++)
                         {
-                          atmp += std::abs(work[i]);
+                          atmp += std::abs (work[i]);
                           work[i] = 0.;
                         }
                       if (atmp > ainvnorm)
@@ -2897,8 +2897,8 @@
               for (octave_idx_type j = 0; j < nc; j++)
                 {
                   double atmp = 0.;
-                  for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
-                    atmp += std::abs(data(i));
+                  for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
+                    atmp += std::abs (data (i));
                   if (atmp > anorm)
                     anorm = atmp;
                 }
@@ -2907,7 +2907,7 @@
           octave_idx_type b_nc = b.cols ();
           octave_idx_type b_nz = b.nnz ();
           retval = SparseComplexMatrix (nc, b_nc, b_nz);
-          retval.xcidx(0) = 0;
+          retval.xcidx (0) = 0;
           octave_idx_type ii = 0;
           octave_idx_type x_nz = b_nz;
 
@@ -2920,8 +2920,8 @@
                 {
                   for (octave_idx_type i = 0; i < nm; i++)
                     work[i] = 0.;
-                  for (octave_idx_type i = b.cidx(j); i < b.cidx(j+1); i++)
-                    work[perm[b.ridx(i)]] = b.data(i);
+                  for (octave_idx_type i = b.cidx (j); i < b.cidx (j+1); i++)
+                    work[perm[b.ridx (i)]] = b.data (i);
 
                   for (octave_idx_type k = 0; k < nc; k++)
                     {
@@ -2930,10 +2930,10 @@
                           octave_idx_type minr = nr;
                           octave_idx_type mini = 0;
 
-                          for (octave_idx_type i = cidx(k); i < cidx(k+1); i++)
-                            if (perm[ridx(i)] < minr)
+                          for (octave_idx_type i = cidx (k); i < cidx (k+1); i++)
+                            if (perm[ridx (i)] < minr)
                               {
-                                minr = perm[ridx(i)];
+                                minr = perm[ridx (i)];
                                 mini = i;
                               }
 
@@ -2943,15 +2943,15 @@
                               goto triangular_error;
                             }
 
-                          Complex tmp = work[k] / data(mini);
+                          Complex tmp = work[k] / data (mini);
                           work[k] = tmp;
-                          for (octave_idx_type i = cidx(k); i < cidx(k+1); i++)
+                          for (octave_idx_type i = cidx (k); i < cidx (k+1); i++)
                             {
                               if (i == mini)
                                 continue;
 
-                              octave_idx_type iidx = perm[ridx(i)];
-                              work[iidx] = work[iidx] - tmp * data(i);
+                              octave_idx_type iidx = perm[ridx (i)];
+                              work[iidx] = work[iidx] - tmp * data (i);
                             }
                         }
                     }
@@ -2974,10 +2974,10 @@
                   for (octave_idx_type i = 0; i < nc; i++)
                     if (work[i] != 0.)
                       {
-                        retval.xridx(ii) = i;
-                        retval.xdata(ii++) = work[i];
+                        retval.xridx (ii) = i;
+                        retval.xdata (ii++) = work[i];
                       }
-                  retval.xcidx(j+1) = ii;
+                  retval.xcidx (j+1) = ii;
                 }
 
               retval.maybe_compress ();
@@ -2999,24 +2999,24 @@
                               octave_idx_type minr = nr;
                               octave_idx_type mini = 0;
 
-                              for (octave_idx_type i = cidx(k);
-                                   i < cidx(k+1); i++)
-                                if (perm[ridx(i)] < minr)
+                              for (octave_idx_type i = cidx (k);
+                                   i < cidx (k+1); i++)
+                                if (perm[ridx (i)] < minr)
                                   {
-                                    minr = perm[ridx(i)];
+                                    minr = perm[ridx (i)];
                                     mini = i;
                                   }
 
-                              Complex tmp = work[k] / data(mini);
+                              Complex tmp = work[k] / data (mini);
                               work[k] = tmp;
-                              for (octave_idx_type i = cidx(k);
-                                   i < cidx(k+1); i++)
+                              for (octave_idx_type i = cidx (k);
+                                   i < cidx (k+1); i++)
                                 {
                                   if (i == mini)
                                     continue;
 
-                                  octave_idx_type iidx = perm[ridx(i)];
-                                  work[iidx] = work[iidx] - tmp * data(i);
+                                  octave_idx_type iidx = perm[ridx (i)];
+                                  work[iidx] = work[iidx] - tmp * data (i);
                                 }
                             }
                         }
@@ -3024,7 +3024,7 @@
                       double atmp = 0;
                       for (octave_idx_type i = j; i < nc; i++)
                         {
-                          atmp += std::abs(work[i]);
+                          atmp += std::abs (work[i]);
                           work[i] = 0.;
                         }
                       if (atmp > ainvnorm)
@@ -3041,26 +3041,26 @@
                 {
                   for (octave_idx_type i = 0; i < nm; i++)
                     work[i] = 0.;
-                  for (octave_idx_type i = b.cidx(j); i < b.cidx(j+1); i++)
-                    work[b.ridx(i)] = b.data(i);
+                  for (octave_idx_type i = b.cidx (j); i < b.cidx (j+1); i++)
+                    work[b.ridx (i)] = b.data (i);
 
                   for (octave_idx_type k = 0; k < nc; k++)
                     {
                       if (work[k] != 0.)
                         {
-                          if (ridx(cidx(k)) != k ||
-                              data(cidx(k)) == 0.)
+                          if (ridx (cidx (k)) != k ||
+                              data (cidx (k)) == 0.)
                             {
                               err = -2;
                               goto triangular_error;
                             }
 
-                          Complex tmp = work[k] / data(cidx(k));
+                          Complex tmp = work[k] / data (cidx (k));
                           work[k] = tmp;
-                          for (octave_idx_type i = cidx(k)+1; i < cidx(k+1); i++)
+                          for (octave_idx_type i = cidx (k)+1; i < cidx (k+1); i++)
                             {
-                              octave_idx_type iidx = ridx(i);
-                              work[iidx] = work[iidx] - tmp * data(i);
+                              octave_idx_type iidx = ridx (i);
+                              work[iidx] = work[iidx] - tmp * data (i);
                             }
                         }
                     }
@@ -3083,10 +3083,10 @@
                   for (octave_idx_type i = 0; i < nc; i++)
                     if (work[i] != 0.)
                       {
-                        retval.xridx(ii) = i;
-                        retval.xdata(ii++) = work[i];
+                        retval.xridx (ii) = i;
+                        retval.xdata (ii++) = work[i];
                       }
-                  retval.xcidx(j+1) = ii;
+                  retval.xcidx (j+1) = ii;
                 }
 
               retval.maybe_compress ();
@@ -3106,20 +3106,20 @@
 
                           if (work[k] != 0.)
                             {
-                              Complex tmp = work[k] / data(cidx(k));
+                              Complex tmp = work[k] / data (cidx (k));
                               work[k] = tmp;
-                              for (octave_idx_type i = cidx(k)+1;
-                                   i < cidx(k+1); i++)
+                              for (octave_idx_type i = cidx (k)+1;
+                                   i < cidx (k+1); i++)
                                 {
-                                  octave_idx_type iidx = ridx(i);
-                                  work[iidx] = work[iidx] - tmp * data(i);
+                                  octave_idx_type iidx = ridx (i);
+                                  work[iidx] = work[iidx] - tmp * data (i);
                                 }
                             }
                         }
                       double atmp = 0;
                       for (octave_idx_type i = j; i < nc; i++)
                         {
-                          atmp += std::abs(work[i]);
+                          atmp += std::abs (work[i]);
                           work[i] = 0.;
                         }
                       if (atmp > ainvnorm)
@@ -3205,8 +3205,8 @@
               for (octave_idx_type j = 0; j < nc; j++)
                 {
                   double atmp = 0.;
-                  for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
-                    atmp += std::abs(data(i));
+                  for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
+                    atmp += std::abs (data (i));
                   if (atmp > anorm)
                     anorm = atmp;
                 }
@@ -3232,10 +3232,10 @@
                           octave_idx_type minr = nr;
                           octave_idx_type mini = 0;
 
-                          for (octave_idx_type i = cidx(k); i < cidx(k+1); i++)
-                            if (perm[ridx(i)] < minr)
+                          for (octave_idx_type i = cidx (k); i < cidx (k+1); i++)
+                            if (perm[ridx (i)] < minr)
                               {
-                                minr = perm[ridx(i)];
+                                minr = perm[ridx (i)];
                                 mini = i;
                               }
 
@@ -3245,15 +3245,15 @@
                               goto triangular_error;
                             }
 
-                          Complex tmp = work[k] / data(mini);
+                          Complex tmp = work[k] / data (mini);
                           work[k] = tmp;
-                          for (octave_idx_type i = cidx(k); i < cidx(k+1); i++)
+                          for (octave_idx_type i = cidx (k); i < cidx (k+1); i++)
                             {
                               if (i == mini)
                                 continue;
 
-                              octave_idx_type iidx = perm[ridx(i)];
-                              work[iidx] = work[iidx] - tmp * data(i);
+                              octave_idx_type iidx = perm[ridx (i)];
+                              work[iidx] = work[iidx] - tmp * data (i);
                             }
                         }
                     }
@@ -3279,24 +3279,24 @@
                               octave_idx_type minr = nr;
                               octave_idx_type mini = 0;
 
-                              for (octave_idx_type i = cidx(k);
-                                   i < cidx(k+1); i++)
-                                if (perm[ridx(i)] < minr)
+                              for (octave_idx_type i = cidx (k);
+                                   i < cidx (k+1); i++)
+                                if (perm[ridx (i)] < minr)
                                   {
-                                    minr = perm[ridx(i)];
+                                    minr = perm[ridx (i)];
                                     mini = i;
                                   }
 
-                              Complex tmp = work[k] / data(mini);
+                              Complex tmp = work[k] / data (mini);
                               work[k] = tmp;
-                              for (octave_idx_type i = cidx(k);
-                                   i < cidx(k+1); i++)
+                              for (octave_idx_type i = cidx (k);
+                                   i < cidx (k+1); i++)
                                 {
                                   if (i == mini)
                                     continue;
 
-                                  octave_idx_type iidx = perm[ridx(i)];
-                                  work[iidx] = work[iidx] - tmp * data(i);
+                                  octave_idx_type iidx = perm[ridx (i)];
+                                  work[iidx] = work[iidx] - tmp * data (i);
                                 }
                             }
                         }
@@ -3304,7 +3304,7 @@
                       double atmp = 0;
                       for (octave_idx_type i = j; i < nc; i++)
                         {
-                          atmp += std::abs(work[i]);
+                          atmp += std::abs (work[i]);
                           work[i] = 0.;
                         }
                       if (atmp > ainvnorm)
@@ -3330,19 +3330,19 @@
                     {
                       if (work[k] != 0.)
                         {
-                          if (ridx(cidx(k)) != k ||
-                              data(cidx(k)) == 0.)
+                          if (ridx (cidx (k)) != k ||
+                              data (cidx (k)) == 0.)
                             {
                               err = -2;
                               goto triangular_error;
                             }
 
-                          Complex tmp = work[k] / data(cidx(k));
+                          Complex tmp = work[k] / data (cidx (k));
                           work[k] = tmp;
-                          for (octave_idx_type i = cidx(k)+1; i < cidx(k+1); i++)
+                          for (octave_idx_type i = cidx (k)+1; i < cidx (k+1); i++)
                             {
-                              octave_idx_type iidx = ridx(i);
-                              work[iidx] = work[iidx] - tmp * data(i);
+                              octave_idx_type iidx = ridx (i);
+                              work[iidx] = work[iidx] - tmp * data (i);
                             }
                         }
                     }
@@ -3366,20 +3366,20 @@
 
                           if (work[k] != 0.)
                             {
-                              Complex tmp = work[k] / data(cidx(k));
+                              Complex tmp = work[k] / data (cidx (k));
                               work[k] = tmp;
-                              for (octave_idx_type i = cidx(k)+1;
-                                   i < cidx(k+1); i++)
+                              for (octave_idx_type i = cidx (k)+1;
+                                   i < cidx (k+1); i++)
                                 {
-                                  octave_idx_type iidx = ridx(i);
-                                  work[iidx] = work[iidx] - tmp * data(i);
+                                  octave_idx_type iidx = ridx (i);
+                                  work[iidx] = work[iidx] - tmp * data (i);
                                 }
                             }
                         }
                       double atmp = 0;
                       for (octave_idx_type i = j; i < nc; i++)
                         {
-                          atmp += std::abs(work[i]);
+                          atmp += std::abs (work[i]);
                           work[i] = 0.;
                         }
                       if (atmp > ainvnorm)
@@ -3464,8 +3464,8 @@
               for (octave_idx_type j = 0; j < nc; j++)
                 {
                   double atmp = 0.;
-                  for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
-                    atmp += std::abs(data(i));
+                  for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
+                    atmp += std::abs (data (i));
                   if (atmp > anorm)
                     anorm = atmp;
                 }
@@ -3474,7 +3474,7 @@
           octave_idx_type b_nc = b.cols ();
           octave_idx_type b_nz = b.nnz ();
           retval = SparseComplexMatrix (nc, b_nc, b_nz);
-          retval.xcidx(0) = 0;
+          retval.xcidx (0) = 0;
           octave_idx_type ii = 0;
           octave_idx_type x_nz = b_nz;
 
@@ -3487,8 +3487,8 @@
                 {
                   for (octave_idx_type i = 0; i < nm; i++)
                     work[i] = 0.;
-                  for (octave_idx_type i = b.cidx(j); i < b.cidx(j+1); i++)
-                    work[perm[b.ridx(i)]] = b.data(i);
+                  for (octave_idx_type i = b.cidx (j); i < b.cidx (j+1); i++)
+                    work[perm[b.ridx (i)]] = b.data (i);
 
                   for (octave_idx_type k = 0; k < nc; k++)
                     {
@@ -3497,10 +3497,10 @@
                           octave_idx_type minr = nr;
                           octave_idx_type mini = 0;
 
-                          for (octave_idx_type i = cidx(k); i < cidx(k+1); i++)
-                            if (perm[ridx(i)] < minr)
+                          for (octave_idx_type i = cidx (k); i < cidx (k+1); i++)
+                            if (perm[ridx (i)] < minr)
                               {
-                                minr = perm[ridx(i)];
+                                minr = perm[ridx (i)];
                                 mini = i;
                               }
 
@@ -3510,15 +3510,15 @@
                               goto triangular_error;
                             }
 
-                          Complex tmp = work[k] / data(mini);
+                          Complex tmp = work[k] / data (mini);
                           work[k] = tmp;
-                          for (octave_idx_type i = cidx(k); i < cidx(k+1); i++)
+                          for (octave_idx_type i = cidx (k); i < cidx (k+1); i++)
                             {
                               if (i == mini)
                                 continue;
 
-                              octave_idx_type iidx = perm[ridx(i)];
-                              work[iidx] = work[iidx] - tmp * data(i);
+                              octave_idx_type iidx = perm[ridx (i)];
+                              work[iidx] = work[iidx] - tmp * data (i);
                             }
                         }
                     }
@@ -3541,10 +3541,10 @@
                   for (octave_idx_type i = 0; i < nc; i++)
                     if (work[i] != 0.)
                       {
-                        retval.xridx(ii) = i;
-                        retval.xdata(ii++) = work[i];
+                        retval.xridx (ii) = i;
+                        retval.xdata (ii++) = work[i];
                       }
-                  retval.xcidx(j+1) = ii;
+                  retval.xcidx (j+1) = ii;
                 }
 
               retval.maybe_compress ();
@@ -3566,24 +3566,24 @@
                               octave_idx_type minr = nr;
                               octave_idx_type mini = 0;
 
-                              for (octave_idx_type i = cidx(k);
-                                   i < cidx(k+1); i++)
-                                if (perm[ridx(i)] < minr)
+                              for (octave_idx_type i = cidx (k);
+                                   i < cidx (k+1); i++)
+                                if (perm[ridx (i)] < minr)
                                   {
-                                    minr = perm[ridx(i)];
+                                    minr = perm[ridx (i)];
                                     mini = i;
                                   }
 
-                              Complex tmp = work[k] / data(mini);
+                              Complex tmp = work[k] / data (mini);
                               work[k] = tmp;
-                              for (octave_idx_type i = cidx(k);
-                                   i < cidx(k+1); i++)
+                              for (octave_idx_type i = cidx (k);
+                                   i < cidx (k+1); i++)
                                 {
                                   if (i == mini)
                                     continue;
 
-                                  octave_idx_type iidx = perm[ridx(i)];
-                                  work[iidx] = work[iidx] - tmp * data(i);
+                                  octave_idx_type iidx = perm[ridx (i)];
+                                  work[iidx] = work[iidx] - tmp * data (i);
                                 }
                             }
                         }
@@ -3591,7 +3591,7 @@
                       double atmp = 0;
                       for (octave_idx_type i = j; i < nc; i++)
                         {
-                          atmp += std::abs(work[i]);
+                          atmp += std::abs (work[i]);
                           work[i] = 0.;
                         }
                       if (atmp > ainvnorm)
@@ -3608,26 +3608,26 @@
                 {
                   for (octave_idx_type i = 0; i < nm; i++)
                     work[i] = 0.;
-                  for (octave_idx_type i = b.cidx(j); i < b.cidx(j+1); i++)
-                    work[b.ridx(i)] = b.data(i);
+                  for (octave_idx_type i = b.cidx (j); i < b.cidx (j+1); i++)
+                    work[b.ridx (i)] = b.data (i);
 
                   for (octave_idx_type k = 0; k < nc; k++)
                     {
                       if (work[k] != 0.)
                         {
-                          if (ridx(cidx(k)) != k ||
-                              data(cidx(k)) == 0.)
+                          if (ridx (cidx (k)) != k ||
+                              data (cidx (k)) == 0.)
                             {
                               err = -2;
                               goto triangular_error;
                             }
 
-                          Complex tmp = work[k] / data(cidx(k));
+                          Complex tmp = work[k] / data (cidx (k));
                           work[k] = tmp;
-                          for (octave_idx_type i = cidx(k)+1; i < cidx(k+1); i++)
+                          for (octave_idx_type i = cidx (k)+1; i < cidx (k+1); i++)
                             {
-                              octave_idx_type iidx = ridx(i);
-                              work[iidx] = work[iidx] - tmp * data(i);
+                              octave_idx_type iidx = ridx (i);
+                              work[iidx] = work[iidx] - tmp * data (i);
                             }
                         }
                     }
@@ -3650,10 +3650,10 @@
                   for (octave_idx_type i = 0; i < nc; i++)
                     if (work[i] != 0.)
                       {
-                        retval.xridx(ii) = i;
-                        retval.xdata(ii++) = work[i];
+                        retval.xridx (ii) = i;
+                        retval.xdata (ii++) = work[i];
                       }
-                  retval.xcidx(j+1) = ii;
+                  retval.xcidx (j+1) = ii;
                 }
 
               retval.maybe_compress ();
@@ -3673,20 +3673,20 @@
 
                           if (work[k] != 0.)
                             {
-                              Complex tmp = work[k] / data(cidx(k));
+                              Complex tmp = work[k] / data (cidx (k));
                               work[k] = tmp;
-                              for (octave_idx_type i = cidx(k)+1;
-                                   i < cidx(k+1); i++)
+                              for (octave_idx_type i = cidx (k)+1;
+                                   i < cidx (k+1); i++)
                                 {
-                                  octave_idx_type iidx = ridx(i);
-                                  work[iidx] = work[iidx] - tmp * data(i);
+                                  octave_idx_type iidx = ridx (i);
+                                  work[iidx] = work[iidx] - tmp * data (i);
                                 }
                             }
                         }
                       double atmp = 0;
                       for (octave_idx_type i = j; i < nc; i++)
                         {
-                          atmp += std::abs(work[i]);
+                          atmp += std::abs (work[i]);
                           work[i] = 0.;
                         }
                       if (atmp > ainvnorm)
@@ -3771,11 +3771,11 @@
 
               for (octave_idx_type j = 0; j < nc-1; j++)
                 {
-                  D[j] = std::real(data(ii++));
-                  DL[j] = data(ii);
+                  D[j] = std::real (data (ii++));
+                  DL[j] = data (ii);
                   ii += 2;
                 }
-              D[nc-1] = std::real(data(ii));
+              D[nc-1] = std::real (data (ii));
             }
           else
             {
@@ -3787,12 +3787,12 @@
                 }
 
               for (octave_idx_type j = 0; j < nc; j++)
-                for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
+                for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
                   {
-                    if (ridx(i) == j)
-                      D[j] = std::real(data(i));
-                    else if (ridx(i) == j + 1)
-                      DL[j] = data(i);
+                    if (ridx (i) == j)
+                      D[j] = std::real (data (i));
+                    else if (ridx (i) == j + 1)
+                      DL[j] = data (i);
                   }
             }
 
@@ -3825,11 +3825,11 @@
 
               for (octave_idx_type j = 0; j < nc-1; j++)
                 {
-                  D[j] = data(ii++);
-                  DL[j] = data(ii++);
-                  DU[j] = data(ii++);
-                }
-              D[nc-1] = data(ii);
+                  D[j] = data (ii++);
+                  DL[j] = data (ii++);
+                  DU[j] = data (ii++);
+                }
+              D[nc-1] = data (ii);
             }
           else
             {
@@ -3842,14 +3842,14 @@
                 }
 
               for (octave_idx_type j = 0; j < nc; j++)
-                for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
+                for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
                   {
-                    if (ridx(i) == j)
-                      D[j] = data(i);
-                    else if (ridx(i) == j + 1)
-                      DL[j] = data(i);
-                    else if (ridx(i) == j - 1)
-                      DU[j-1] = data(i);
+                    if (ridx (i) == j)
+                      D[j] = data (i);
+                    else if (ridx (i) == j + 1)
+                      DL[j] = data (i);
+                    else if (ridx (i) == j - 1)
+                      DU[j-1] = data (i);
                   }
             }
 
@@ -3928,11 +3928,11 @@
 
               for (octave_idx_type j = 0; j < nc-1; j++)
                 {
-                  D[j] = data(ii++);
-                  DL[j] = data(ii++);
-                  DU[j] = data(ii++);
-                }
-              D[nc-1] = data(ii);
+                  D[j] = data (ii++);
+                  DL[j] = data (ii++);
+                  DU[j] = data (ii++);
+                }
+              D[nc-1] = data (ii);
             }
           else
             {
@@ -3945,14 +3945,14 @@
                 }
 
               for (octave_idx_type j = 0; j < nc; j++)
-                for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
+                for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
                   {
-                    if (ridx(i) == j)
-                      D[j] = data(i);
-                    else if (ridx(i) == j + 1)
-                      DL[j] = data(i);
-                    else if (ridx(i) == j - 1)
-                      DU[j-1] = data(i);
+                    if (ridx (i) == j)
+                      D[j] = data (i);
+                    else if (ridx (i) == j + 1)
+                      DL[j] = data (i);
+                    else if (ridx (i) == j - 1)
+                      DU[j-1] = data (i);
                   }
             }
 
@@ -3979,7 +3979,7 @@
               volatile octave_idx_type x_nz = b.nnz ();
               octave_idx_type b_nc = b.cols ();
               retval = SparseComplexMatrix (nr, b_nc, x_nz);
-              retval.xcidx(0) = 0;
+              retval.xcidx (0) = 0;
               volatile octave_idx_type ii = 0;
               rcond = 1.0;
 
@@ -3989,8 +3989,8 @@
                 {
                   for (octave_idx_type i = 0; i < nr; i++)
                     work[i] = 0.;
-                  for (octave_idx_type i = b.cidx(j); i < b.cidx(j+1); i++)
-                    work[b.ridx(i)] = b.data(i);
+                  for (octave_idx_type i = b.cidx (j); i < b.cidx (j+1); i++)
+                    work[b.ridx (i)] = b.data (i);
 
                   F77_XFCN (zgttrs, ZGTTRS,
                             (F77_CONST_CHAR_ARG2 (&job, 1),
@@ -4016,10 +4016,10 @@
                   for (octave_idx_type i = 0; i < nr; i++)
                     if (work[i] != 0.)
                       {
-                        retval.xridx(ii) = i;
-                        retval.xdata(ii++) = work[i];
+                        retval.xridx (ii) = i;
+                        retval.xdata (ii++) = work[i];
                       }
-                  retval.xcidx(j+1) = ii;
+                  retval.xcidx (j+1) = ii;
                 }
 
               retval.maybe_compress ();
@@ -4069,11 +4069,11 @@
 
               for (octave_idx_type j = 0; j < nc-1; j++)
                 {
-                  D[j] = std::real(data(ii++));
-                  DL[j] = data(ii);
+                  D[j] = std::real (data (ii++));
+                  DL[j] = data (ii);
                   ii += 2;
                 }
-              D[nc-1] = std::real(data(ii));
+              D[nc-1] = std::real (data (ii));
             }
           else
             {
@@ -4085,12 +4085,12 @@
                 }
 
               for (octave_idx_type j = 0; j < nc; j++)
-                for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
+                for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
                   {
-                    if (ridx(i) == j)
-                      D[j] = std::real (data(i));
-                    else if (ridx(i) == j + 1)
-                      DL[j] = data(i);
+                    if (ridx (i) == j)
+                      D[j] = std::real (data (i));
+                    else if (ridx (i) == j + 1)
+                      DL[j] = data (i);
                   }
             }
 
@@ -4124,11 +4124,11 @@
 
               for (octave_idx_type j = 0; j < nc-1; j++)
                 {
-                  D[j] = data(ii++);
-                  DL[j] = data(ii++);
-                  DU[j] = data(ii++);
-                }
-              D[nc-1] = data(ii);
+                  D[j] = data (ii++);
+                  DL[j] = data (ii++);
+                  DU[j] = data (ii++);
+                }
+              D[nc-1] = data (ii);
             }
           else
             {
@@ -4141,14 +4141,14 @@
                 }
 
               for (octave_idx_type j = 0; j < nc; j++)
-                for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
+                for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
                   {
-                    if (ridx(i) == j)
-                      D[j] = data(i);
-                    else if (ridx(i) == j + 1)
-                      DL[j] = data(i);
-                    else if (ridx(i) == j - 1)
-                      DU[j-1] = data(i);
+                    if (ridx (i) == j)
+                      D[j] = data (i);
+                    else if (ridx (i) == j + 1)
+                      DL[j] = data (i);
+                    else if (ridx (i) == j - 1)
+                      DU[j-1] = data (i);
                   }
             }
 
@@ -4228,11 +4228,11 @@
 
               for (octave_idx_type j = 0; j < nc-1; j++)
                 {
-                  D[j] = data(ii++);
-                  DL[j] = data(ii++);
-                  DU[j] = data(ii++);
-                }
-              D[nc-1] = data(ii);
+                  D[j] = data (ii++);
+                  DL[j] = data (ii++);
+                  DU[j] = data (ii++);
+                }
+              D[nc-1] = data (ii);
             }
           else
             {
@@ -4245,14 +4245,14 @@
                 }
 
               for (octave_idx_type j = 0; j < nc; j++)
-                for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
+                for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
                   {
-                    if (ridx(i) == j)
-                      D[j] = data(i);
-                    else if (ridx(i) == j + 1)
-                      DL[j] = data(i);
-                    else if (ridx(i) == j - 1)
-                      DU[j-1] = data(i);
+                    if (ridx (i) == j)
+                      D[j] = data (i);
+                    else if (ridx (i) == j + 1)
+                      DL[j] = data (i);
+                    else if (ridx (i) == j - 1)
+                      DU[j-1] = data (i);
                   }
             }
 
@@ -4286,7 +4286,7 @@
               volatile octave_idx_type ii = 0;
               retval = SparseComplexMatrix (b_nr, b_nc, x_nz);
 
-              retval.xcidx(0) = 0;
+              retval.xcidx (0) = 0;
               for (volatile octave_idx_type j = 0; j < b_nc; j++)
                 {
 
@@ -4326,11 +4326,11 @@
                   for (octave_idx_type i = 0; i < nr; i++)
                     if (Bx[i] != 0.)
                       {
-                        retval.xridx(ii) = i;
-                        retval.xdata(ii++) = Bx[i];
+                        retval.xridx (ii) = i;
+                        retval.xdata (ii++) = Bx[i];
                       }
 
-                  retval.xcidx(j+1) = ii;
+                  retval.xcidx (j+1) = ii;
                 }
 
               retval.maybe_compress ();
@@ -4383,17 +4383,17 @@
             }
 
           for (octave_idx_type j = 0; j < nc; j++)
-            for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
+            for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
               {
                 octave_idx_type ri = ridx (i);
                 if (ri >= j)
-                  m_band(ri - j, j) = data(i);
+                  m_band(ri - j, j) = data (i);
               }
 
           // Calculate the norm of the matrix, for later use.
           double anorm;
           if (calc_cond)
-            anorm = m_band.abs ().sum ().row(0).max ();
+            anorm = m_band.abs ().sum ().row (0).max ();
 
           char job = 'L';
           F77_XFCN (zpbtrf, ZPBTRF, (F77_CONST_CHAR_ARG2 (&job, 1),
@@ -4490,8 +4490,8 @@
             }
 
           for (octave_idx_type j = 0; j < nc; j++)
-            for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
-              m_band(ridx(i) - j + n_lower + n_upper, j) = data(i);
+            for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
+              m_band(ridx (i) - j + n_lower + n_upper, j) = data (i);
 
           // Calculate the norm of the matrix, for later use.
           double anorm;
@@ -4500,8 +4500,8 @@
               for (octave_idx_type j = 0; j < nr; j++)
                 {
                   double atmp = 0.;
-                  for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
-                    atmp += std::abs(data(i));
+                  for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
+                    atmp += std::abs (data (i));
                   if (atmp > anorm)
                     anorm = atmp;
                 }
@@ -4632,17 +4632,17 @@
             }
 
           for (octave_idx_type j = 0; j < nc; j++)
-            for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
+            for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
               {
                 octave_idx_type ri = ridx (i);
                 if (ri >= j)
-                  m_band(ri - j, j) = data(i);
+                  m_band(ri - j, j) = data (i);
               }
 
           // Calculate the norm of the matrix, for later use.
           double anorm;
           if (calc_cond)
-            anorm = m_band.abs ().sum ().row(0).max ();
+            anorm = m_band.abs ().sum ().row (0).max ();
 
           char job = 'L';
           F77_XFCN (zpbtrf, ZPBTRF, (F77_CONST_CHAR_ARG2 (&job, 1),
@@ -4706,7 +4706,7 @@
                   volatile octave_idx_type ii = 0;
                   retval = SparseComplexMatrix (b_nr, b_nc, x_nz);
 
-                  retval.xcidx(0) = 0;
+                  retval.xcidx (0) = 0;
                   for (volatile octave_idx_type j = 0; j < b_nc; j++)
                     {
                       for (octave_idx_type i = 0; i < b_nr; i++)
@@ -4740,11 +4740,11 @@
                                   retval.change_capacity (sz);
                                   x_nz = sz;
                                 }
-                              retval.xdata(ii) = tmp;
-                              retval.xridx(ii++) = i;
+                              retval.xdata (ii) = tmp;
+                              retval.xridx (ii++) = i;
                             }
                         }
-                      retval.xcidx(j+1) = ii;
+                      retval.xcidx (j+1) = ii;
                     }
 
                   retval.maybe_compress ();
@@ -4772,8 +4772,8 @@
             }
 
           for (octave_idx_type j = 0; j < nc; j++)
-            for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
-              m_band(ridx(i) - j + n_lower + n_upper, j) = data(i);
+            for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
+              m_band(ridx (i) - j + n_lower + n_upper, j) = data (i);
 
           // Calculate the norm of the matrix, for later use.
           double anorm;
@@ -4782,8 +4782,8 @@
               for (octave_idx_type j = 0; j < nr; j++)
                 {
                   double atmp = 0.;
-                  for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
-                    atmp += std::abs(data(i));
+                  for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
+                    atmp += std::abs (data (i));
                   if (atmp > anorm)
                     anorm = atmp;
                 }
@@ -4855,7 +4855,7 @@
                   volatile octave_idx_type x_nz = b.nnz ();
                   octave_idx_type b_nc = b.cols ();
                   retval = SparseComplexMatrix (nr, b_nc, x_nz);
-                  retval.xcidx(0) = 0;
+                  retval.xcidx (0) = 0;
                   volatile octave_idx_type ii = 0;
 
                   OCTAVE_LOCAL_BUFFER (Complex, work, nr);
@@ -4864,9 +4864,9 @@
                     {
                       for (octave_idx_type i = 0; i < nr; i++)
                         work[i] = 0.;
-                      for (octave_idx_type i = b.cidx(j);
-                           i < b.cidx(j+1); i++)
-                        work[b.ridx(i)] = b.data(i);
+                      for (octave_idx_type i = b.cidx (j);
+                           i < b.cidx (j+1); i++)
+                        work[b.ridx (i)] = b.data (i);
 
                       F77_XFCN (zgbtrs, ZGBTRS,
                                 (F77_CONST_CHAR_ARG2 (&job, 1),
@@ -4892,10 +4892,10 @@
                       for (octave_idx_type i = 0; i < nr; i++)
                         if (work[i] != 0.)
                           {
-                            retval.xridx(ii) = i;
-                            retval.xdata(ii++) = work[i];
+                            retval.xridx (ii) = i;
+                            retval.xdata (ii++) = work[i];
                           }
-                      retval.xcidx(j+1) = ii;
+                      retval.xcidx (j+1) = ii;
                     }
 
                   retval.maybe_compress ();
@@ -4950,17 +4950,17 @@
             }
 
           for (octave_idx_type j = 0; j < nc; j++)
-            for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
+            for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
               {
                 octave_idx_type ri = ridx (i);
                 if (ri >= j)
-                  m_band(ri - j, j) = data(i);
+                  m_band(ri - j, j) = data (i);
               }
 
           // Calculate the norm of the matrix, for later use.
           double anorm;
           if (calc_cond)
-            anorm = m_band.abs ().sum ().row(0).max ();
+            anorm = m_band.abs ().sum ().row (0).max ();
 
           char job = 'L';
           F77_XFCN (zpbtrf, ZPBTRF, (F77_CONST_CHAR_ARG2 (&job, 1),
@@ -5057,8 +5057,8 @@
             }
 
           for (octave_idx_type j = 0; j < nc; j++)
-            for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
-              m_band(ridx(i) - j + n_lower + n_upper, j) = data(i);
+            for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
+              m_band(ridx (i) - j + n_lower + n_upper, j) = data (i);
 
           // Calculate the norm of the matrix, for later use.
           double anorm;
@@ -5067,8 +5067,8 @@
               for (octave_idx_type j = 0; j < nr; j++)
                 {
                   double atmp = 0.;
-                  for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
-                    atmp += std::abs(data(i));
+                  for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
+                    atmp += std::abs (data (i));
                   if (atmp > anorm)
                     anorm = atmp;
                 }
@@ -5196,17 +5196,17 @@
             }
 
           for (octave_idx_type j = 0; j < nc; j++)
-            for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
+            for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
               {
                 octave_idx_type ri = ridx (i);
                 if (ri >= j)
-                  m_band(ri - j, j) = data(i);
+                  m_band(ri - j, j) = data (i);
               }
 
           // Calculate the norm of the matrix, for later use.
           double anorm;
           if (calc_cond)
-            anorm = m_band.abs ().sum ().row(0).max ();
+            anorm = m_band.abs ().sum ().row (0).max ();
 
           char job = 'L';
           F77_XFCN (zpbtrf, ZPBTRF, (F77_CONST_CHAR_ARG2 (&job, 1),
@@ -5273,7 +5273,7 @@
                   volatile octave_idx_type ii = 0;
                   retval = SparseComplexMatrix (b_nr, b_nc, x_nz);
 
-                  retval.xcidx(0) = 0;
+                  retval.xcidx (0) = 0;
                   for (volatile octave_idx_type j = 0; j < b_nc; j++)
                     {
 
@@ -5312,11 +5312,11 @@
                       for (octave_idx_type i = 0; i < nr; i++)
                         if (Bx[i] != 0.)
                           {
-                            retval.xridx(ii) = i;
-                            retval.xdata(ii++) = Bx[i];
+                            retval.xridx (ii) = i;
+                            retval.xdata (ii++) = Bx[i];
                           }
 
-                      retval.xcidx(j+1) = ii;
+                      retval.xcidx (j+1) = ii;
                     }
 
                   retval.maybe_compress ();
@@ -5344,8 +5344,8 @@
             }
 
           for (octave_idx_type j = 0; j < nc; j++)
-            for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
-              m_band(ridx(i) - j + n_lower + n_upper, j) = data(i);
+            for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
+              m_band(ridx (i) - j + n_lower + n_upper, j) = data (i);
 
           // Calculate the norm of the matrix, for later use.
           double anorm;
@@ -5354,8 +5354,8 @@
               for (octave_idx_type j = 0; j < nr; j++)
                 {
                   double atmp = 0.;
-                  for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
-                    atmp += std::abs(data(i));
+                  for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
+                    atmp += std::abs (data (i));
                   if (atmp > anorm)
                     anorm = atmp;
                 }
@@ -5427,7 +5427,7 @@
                   volatile octave_idx_type x_nz = b.nnz ();
                   octave_idx_type b_nc = b.cols ();
                   retval = SparseComplexMatrix (nr, b_nc, x_nz);
-                  retval.xcidx(0) = 0;
+                  retval.xcidx (0) = 0;
                   volatile octave_idx_type ii = 0;
 
                   OCTAVE_LOCAL_BUFFER (Complex, Bx, nr);
@@ -5437,9 +5437,9 @@
                       for (octave_idx_type i = 0; i < nr; i++)
                         Bx[i] = 0.;
 
-                      for (octave_idx_type i = b.cidx(j);
-                           i < b.cidx(j+1); i++)
-                        Bx[b.ridx(i)] = b.data(i);
+                      for (octave_idx_type i = b.cidx (j);
+                           i < b.cidx (j+1); i++)
+                        Bx[b.ridx (i)] = b.data (i);
 
                       F77_XFCN (zgbtrs, ZGBTRS,
                                 (F77_CONST_CHAR_ARG2 (&job, 1),
@@ -5465,10 +5465,10 @@
                       for (octave_idx_type i = 0; i < nr; i++)
                         if (Bx[i] != 0.)
                           {
-                            retval.xridx(ii) = i;
-                            retval.xdata(ii++) = Bx[i];
+                            retval.xridx (ii) = i;
+                            retval.xdata (ii++) = Bx[i];
                           }
-                      retval.xcidx(j+1) = ii;
+                      retval.xcidx (j+1) = ii;
                     }
 
                   retval.maybe_compress ();
@@ -5736,7 +5736,7 @@
                 {
                   octave_idx_type jr = j * b.rows ();
                   for (octave_idx_type i = 0; i < b.rows (); i++)
-                    retval.xelem(i,j) = static_cast<Complex *>(X->x)[jr + i];
+                    retval.xelem (i,j) = static_cast<Complex *>(X->x)[jr + i];
                 }
 
               BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
@@ -5990,12 +5990,12 @@
                  static_cast<octave_idx_type>(X->nzmax));
               for (octave_idx_type j = 0;
                    j <= static_cast<octave_idx_type>(X->ncol); j++)
-                retval.xcidx(j) = static_cast<octave_idx_type *>(X->p)[j];
+                retval.xcidx (j) = static_cast<octave_idx_type *>(X->p)[j];
               for (octave_idx_type j = 0;
                    j < static_cast<octave_idx_type>(X->nzmax); j++)
                 {
-                  retval.xridx(j) = static_cast<octave_idx_type *>(X->i)[j];
-                  retval.xdata(j) = static_cast<Complex *>(X->x)[j];
+                  retval.xridx (j) = static_cast<octave_idx_type *>(X->i)[j];
+                  retval.xdata (j) = static_cast<Complex *>(X->x)[j];
                 }
 
               BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
@@ -6050,7 +6050,7 @@
 
               OCTAVE_LOCAL_BUFFER (Complex, Xx, b_nr);
 
-              retval.xcidx(0) = 0;
+              retval.xcidx (0) = 0;
               for (octave_idx_type j = 0; j < b_nc; j++)
                 {
 
@@ -6105,11 +6105,11 @@
                               retval.change_capacity (sz);
                               x_nz = sz;
                             }
-                          retval.xdata(ii) = tmp;
-                          retval.xridx(ii++) = i;
+                          retval.xdata (ii) = tmp;
+                          retval.xridx (ii++) = i;
                         }
                     }
-                  retval.xcidx(j+1) = ii;
+                  retval.xcidx (j+1) = ii;
                 }
 
               retval.maybe_compress ();
@@ -6270,7 +6270,7 @@
                 {
                   octave_idx_type jr = j * b.rows ();
                   for (octave_idx_type i = 0; i < b.rows (); i++)
-                    retval.xelem(i,j) = static_cast<Complex *>(X->x)[jr + i];
+                    retval.xelem (i,j) = static_cast<Complex *>(X->x)[jr + i];
                 }
 
               BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
@@ -6503,12 +6503,12 @@
                  static_cast<octave_idx_type>(X->nzmax));
               for (octave_idx_type j = 0;
                    j <= static_cast<octave_idx_type>(X->ncol); j++)
-                retval.xcidx(j) = static_cast<octave_idx_type *>(X->p)[j];
+                retval.xcidx (j) = static_cast<octave_idx_type *>(X->p)[j];
               for (octave_idx_type j = 0;
                    j < static_cast<octave_idx_type>(X->nzmax); j++)
                 {
-                  retval.xridx(j) = static_cast<octave_idx_type *>(X->i)[j];
-                  retval.xdata(j) = static_cast<Complex *>(X->x)[j];
+                  retval.xridx (j) = static_cast<octave_idx_type *>(X->i)[j];
+                  retval.xdata (j) = static_cast<Complex *>(X->x)[j];
                 }
 
               BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
@@ -6556,7 +6556,7 @@
 
               OCTAVE_LOCAL_BUFFER (Complex, Xx, b_nr);
 
-              retval.xcidx(0) = 0;
+              retval.xcidx (0) = 0;
               for (octave_idx_type j = 0; j < b_nc; j++)
                 {
                   for (octave_idx_type i = 0; i < b_nr; i++)
@@ -6596,11 +6596,11 @@
                               retval.change_capacity (sz);
                               x_nz = sz;
                             }
-                          retval.xdata(ii) = tmp;
-                          retval.xridx(ii++) = i;
+                          retval.xdata (ii) = tmp;
+                          retval.xridx (ii++) = i;
                         }
                     }
-                  retval.xcidx(j+1) = ii;
+                  retval.xcidx (j+1) = ii;
                 }
 
               retval.maybe_compress ();
@@ -6694,7 +6694,7 @@
       return ComplexMatrix ();
     }
 
-  if (singular_fallback && mattype.type(false) == MatrixType::Rectangular)
+  if (singular_fallback && mattype.type (false) == MatrixType::Rectangular)
     {
       rcond = 1.;
 #ifdef USE_QRSOLVE
@@ -6762,7 +6762,7 @@
       return SparseComplexMatrix ();
     }
 
-  if (singular_fallback && mattype.type(false) == MatrixType::Rectangular)
+  if (singular_fallback && mattype.type (false) == MatrixType::Rectangular)
     {
       rcond = 1.;
 #ifdef USE_QRSOLVE
@@ -6830,7 +6830,7 @@
       return ComplexMatrix ();
     }
 
-  if (singular_fallback && mattype.type(false) == MatrixType::Rectangular)
+  if (singular_fallback && mattype.type (false) == MatrixType::Rectangular)
     {
       rcond = 1.;
 #ifdef USE_QRSOLVE
@@ -6899,7 +6899,7 @@
       return SparseComplexMatrix ();
     }
 
-  if (singular_fallback && mattype.type(false) == MatrixType::Rectangular)
+  if (singular_fallback && mattype.type (false) == MatrixType::Rectangular)
     {
       rcond = 1.;
 #ifdef USE_QRSOLVE
@@ -7177,12 +7177,12 @@
     {
       for (octave_idx_type j = 0; j < nr; j++)
         {
-          if (jj < cidx(i+1) && ridx(jj) == j)
+          if (jj < cidx (i+1) && ridx (jj) == j)
             jj++;
           else
             {
-              r.data(ii) = true;
-              r.ridx(ii++) = j;
+              r.data (ii) = true;
+              r.ridx (ii++) = j;
             }
         }
       r.cidx (i+1) = ii;
@@ -7267,8 +7267,8 @@
   if (nel == 0)
     return false;
 
-  max_val = std::real(data (0));
-  min_val = std::real(data (0));
+  max_val = std::real (data (0));
+  min_val = std::real (data (0));
 
   for (octave_idx_type i = 0; i < nel; i++)
     {
@@ -7353,7 +7353,7 @@
   else
     {
       SPARSE_REDUCTION_OP (SparseComplexMatrix, Complex, *=,
-                           (cidx(j+1) - cidx(j) < nr ? 0.0 : 1.0), 1.0);
+                           (cidx (j+1) - cidx (j) < nr ? 0.0 : 1.0), 1.0);
     }
 }
 
@@ -7368,11 +7368,11 @@
 {
 #define ROW_EXPR \
   Complex d = data (i); \
-  tmp [ridx(i)] += d * conj (d)
+  tmp[ridx (i)] += d * conj (d)
 
 #define COL_EXPR \
   Complex d = data (i); \
-  tmp [j] += d * conj (d)
+  tmp[j] += d * conj (d)
 
   SPARSE_BASE_REDUCTION_OP (SparseComplexMatrix, Complex, ROW_EXPR,
                             COL_EXPR, 0.0, 0.0);
@@ -7416,10 +7416,10 @@
    for (octave_idx_type j = 0; j < nc; j++)
      {
        octave_quit ();
-       for (octave_idx_type i = a.cidx(j); i < a.cidx(j+1); i++)
+       for (octave_idx_type i = a.cidx (j); i < a.cidx (j+1); i++)
          {
-           os << a.ridx(i) + 1 << " "  << j + 1 << " ";
-           octave_write_complex (os, a.data(i));
+           os << a.ridx (i) + 1 << " "  << j + 1 << " ";
+           octave_write_complex (os, a.data (i));
            os << "\n";
          }
      }
@@ -7640,15 +7640,15 @@
 
   EMPTY_RETURN_CHECK (SparseComplexMatrix);
 
-  if (abs(c) == 0.)
+  if (abs (c) == 0.)
     return SparseComplexMatrix (nr, nc);
   else
     {
       result = SparseComplexMatrix (m);
 
       for (octave_idx_type j = 0; j < nc; j++)
-        for (octave_idx_type i = m.cidx(j); i < m.cidx(j+1); i++)
-          result.data(i) = xmin(c, m.data(i));
+        for (octave_idx_type i = m.cidx (j); i < m.cidx (j+1); i++)
+          result.data (i) = xmin (c, m.data (i));
     }
 
   return result;
@@ -7686,38 +7686,38 @@
           r.cidx (0) = 0;
           for (octave_idx_type i = 0 ; i < a_nc ; i++)
             {
-              octave_idx_type  ja = a.cidx(i);
-              octave_idx_type  ja_max = a.cidx(i+1);
+              octave_idx_type  ja = a.cidx (i);
+              octave_idx_type  ja_max = a.cidx (i+1);
               bool ja_lt_max= ja < ja_max;
 
-              octave_idx_type  jb = b.cidx(i);
-              octave_idx_type  jb_max = b.cidx(i+1);
+              octave_idx_type  jb = b.cidx (i);
+              octave_idx_type  jb_max = b.cidx (i+1);
               bool jb_lt_max = jb < jb_max;
 
               while (ja_lt_max || jb_lt_max )
                 {
                   octave_quit ();
                   if ((! jb_lt_max) ||
-                      (ja_lt_max && (a.ridx(ja) < b.ridx(jb))))
+                      (ja_lt_max && (a.ridx (ja) < b.ridx (jb))))
                     {
-                      Complex tmp = xmin (a.data(ja), 0.);
+                      Complex tmp = xmin (a.data (ja), 0.);
                       if (tmp != 0.)
                         {
-                          r.ridx(jx) = a.ridx(ja);
-                          r.data(jx) = tmp;
+                          r.ridx (jx) = a.ridx (ja);
+                          r.data (jx) = tmp;
                           jx++;
                         }
                       ja++;
                       ja_lt_max= ja < ja_max;
                     }
                   else if (( !ja_lt_max ) ||
-                           (jb_lt_max && (b.ridx(jb) < a.ridx(ja)) ) )
+                           (jb_lt_max && (b.ridx (jb) < a.ridx (ja)) ) )
                     {
-                      Complex tmp = xmin (0., b.data(jb));
+                      Complex tmp = xmin (0., b.data (jb));
                       if (tmp != 0.)
                         {
-                          r.ridx(jx) = b.ridx(jb);
-                          r.data(jx) = tmp;
+                          r.ridx (jx) = b.ridx (jb);
+                          r.data (jx) = tmp;
                           jx++;
                         }
                       jb++;
@@ -7725,11 +7725,11 @@
                     }
                   else
                     {
-                      Complex tmp = xmin (a.data(ja), b.data(jb));
+                      Complex tmp = xmin (a.data (ja), b.data (jb));
                       if (tmp != 0.)
                         {
-                          r.data(jx) = tmp;
-                          r.ridx(jx) = a.ridx(ja);
+                          r.data (jx) = tmp;
+                          r.ridx (jx) = a.ridx (ja);
                           jx++;
                         }
                       ja++;
@@ -7738,7 +7738,7 @@
                       jb_lt_max= jb < jb_max;
                     }
                 }
-              r.cidx(i+1) = jx;
+              r.cidx (i+1) = jx;
             }
 
           r.maybe_compress ();
@@ -7761,12 +7761,12 @@
   EMPTY_RETURN_CHECK (SparseComplexMatrix);
 
   // Count the number of non-zero elements
-  if (xmax(c, 0.) != 0.)
+  if (xmax (c, 0.) != 0.)
     {
       result = SparseComplexMatrix (nr, nc, c);
       for (octave_idx_type j = 0; j < nc; j++)
-        for (octave_idx_type i = m.cidx(j); i < m.cidx(j+1); i++)
-          result.xdata(m.ridx(i) + j * nr) = xmax (c, m.data(i));
+        for (octave_idx_type i = m.cidx (j); i < m.cidx (j+1); i++)
+          result.xdata (m.ridx (i) + j * nr) = xmax (c, m.data (i));
     }
   else
     result = SparseComplexMatrix (m);
@@ -7810,38 +7810,38 @@
           r.cidx (0) = 0;
           for (octave_idx_type i = 0 ; i < a_nc ; i++)
             {
-              octave_idx_type  ja = a.cidx(i);
-              octave_idx_type  ja_max = a.cidx(i+1);
+              octave_idx_type  ja = a.cidx (i);
+              octave_idx_type  ja_max = a.cidx (i+1);
               bool ja_lt_max= ja < ja_max;
 
-              octave_idx_type  jb = b.cidx(i);
-              octave_idx_type  jb_max = b.cidx(i+1);
+              octave_idx_type  jb = b.cidx (i);
+              octave_idx_type  jb_max = b.cidx (i+1);
               bool jb_lt_max = jb < jb_max;
 
               while (ja_lt_max || jb_lt_max )
                 {
                   octave_quit ();
                   if ((! jb_lt_max) ||
-                      (ja_lt_max && (a.ridx(ja) < b.ridx(jb))))
+                      (ja_lt_max && (a.ridx (ja) < b.ridx (jb))))
                     {
-                      Complex tmp = xmax (a.data(ja), 0.);
+                      Complex tmp = xmax (a.data (ja), 0.);
                       if (tmp != 0.)
                         {
-                          r.ridx(jx) = a.ridx(ja);
-                          r.data(jx) = tmp;
+                          r.ridx (jx) = a.ridx (ja);
+                          r.data (jx) = tmp;
                           jx++;
                         }
                       ja++;
                       ja_lt_max= ja < ja_max;
                     }
                   else if (( !ja_lt_max ) ||
-                           (jb_lt_max && (b.ridx(jb) < a.ridx(ja)) ) )
+                           (jb_lt_max && (b.ridx (jb) < a.ridx (ja)) ) )
                     {
-                      Complex tmp = xmax (0., b.data(jb));
+                      Complex tmp = xmax (0., b.data (jb));
                       if (tmp != 0.)
                         {
-                          r.ridx(jx) = b.ridx(jb);
-                          r.data(jx) = tmp;
+                          r.ridx (jx) = b.ridx (jb);
+                          r.data (jx) = tmp;
                           jx++;
                         }
                       jb++;
@@ -7849,11 +7849,11 @@
                     }
                   else
                     {
-                      Complex tmp = xmax (a.data(ja), b.data(jb));
+                      Complex tmp = xmax (a.data (ja), b.data (jb));
                       if (tmp != 0.)
                         {
-                          r.data(jx) = tmp;
-                          r.ridx(jx) = a.ridx(ja);
+                          r.data (jx) = tmp;
+                          r.ridx (jx) = a.ridx (ja);
                           jx++;
                         }
                       ja++;
@@ -7862,7 +7862,7 @@
                       jb_lt_max= jb < jb_max;
                     }
                 }
-              r.cidx(i+1) = jx;
+              r.cidx (i+1) = jx;
             }
 
           r.maybe_compress ();
--- a/liboctave/CmplxQR.cc
+++ b/liboctave/CmplxQR.cc
@@ -469,7 +469,7 @@
 
   if (u.length () == m && v.length () == n)
     {
-      init(q*r + ComplexMatrix (u) * ComplexMatrix (v).hermitian (), get_type ());
+      init (q*r + ComplexMatrix (u) * ComplexMatrix (v).hermitian (), get_type ());
     }
   else
     (*current_liboctave_error_handler) ("qrupdate: dimensions mismatch");
@@ -485,7 +485,7 @@
 
   if (u.rows () == m && v.rows () == n && u.cols () == v.cols ())
     {
-      init(q*r + u * v.hermitian (), get_type ());
+      init (q*r + u * v.hermitian (), get_type ());
     }
   else
     (*current_liboctave_error_handler) ("qrupdate: dimensions mismatch");
--- a/liboctave/CollocWt.cc
+++ b/liboctave/CollocWt.cc
@@ -212,7 +212,7 @@
               xn1 = xp1;
             }
 
-          double zc  = 1.0;
+          double zc = 1.0;
           double z = xn / xn1;
 
           if (i != 0)
--- a/liboctave/DASPK.cc
+++ b/liboctave/DASPK.cc
@@ -83,8 +83,8 @@
 
   for (octave_idx_type i = 0; i < nn; i++)
     {
-      tmp_deriv.elem (i) = deriv [i];
-      tmp_state.elem (i) = state [i];
+      tmp_deriv.elem (i) = deriv[i];
+      tmp_state.elem (i) = state[i];
     }
 
   tmp_delta = user_fun (tmp_state, tmp_deriv, time, ires);
@@ -96,7 +96,7 @@
       else
         {
           for (octave_idx_type i = 0; i < nn; i++)
-            delta [i] = tmp_delta.elem (i);
+            delta[i] = tmp_delta.elem (i);
         }
     }
 
@@ -137,15 +137,15 @@
 
   for (octave_idx_type i = 0; i < nn; i++)
     {
-      tmp_deriv.elem (i) = deriv [i];
-      tmp_state.elem (i) = state [i];
+      tmp_deriv.elem (i) = deriv[i];
+      tmp_state.elem (i) = state[i];
     }
 
   Matrix tmp_pd = user_jac (tmp_state, tmp_deriv, time, cj);
 
   for (octave_idx_type j = 0; j < nn; j++)
     for (octave_idx_type i = 0; i < nn; i++)
-      pd [nn * j + i] = tmp_pd.elem (i, j);
+      pd[nn * j + i] = tmp_pd.elem (i, j);
 
   END_INTERRUPT_WITH_EXCEPTIONS;
 
--- a/liboctave/DASRT.cc
+++ b/liboctave/DASRT.cc
@@ -113,15 +113,15 @@
 
   for (octave_idx_type i = 0; i < nn; i++)
     {
-      tmp_deriv.elem (i) = deriv [i];
-      tmp_state.elem (i) = state [i];
+      tmp_deriv.elem (i) = deriv[i];
+      tmp_state.elem (i) = state[i];
     }
 
   Matrix tmp_pd = (*user_jsub) (tmp_state, tmp_deriv, time, cj);
 
   for (octave_idx_type j = 0; j < nn; j++)
     for (octave_idx_type i = 0; i < nn; i++)
-      pd [nn * j + i] = tmp_pd.elem (i, j);
+      pd[nn * j + i] = tmp_pd.elem (i, j);
 
   END_INTERRUPT_WITH_EXCEPTIONS;
 
--- a/liboctave/DASSL.cc
+++ b/liboctave/DASSL.cc
@@ -76,8 +76,8 @@
 
   for (octave_idx_type i = 0; i < nn; i++)
     {
-      tmp_deriv.elem (i) = deriv [i];
-      tmp_state.elem (i) = state [i];
+      tmp_deriv.elem (i) = deriv[i];
+      tmp_state.elem (i) = state[i];
     }
 
   tmp_delta = user_fun (tmp_state, tmp_deriv, time, ires);
@@ -89,7 +89,7 @@
       else
         {
           for (octave_idx_type i = 0; i < nn; i++)
-            delta [i] = tmp_delta.elem (i);
+            delta[i] = tmp_delta.elem (i);
         }
     }
 
@@ -111,15 +111,15 @@
 
   for (octave_idx_type i = 0; i < nn; i++)
     {
-      tmp_deriv.elem (i) = deriv [i];
-      tmp_state.elem (i) = state [i];
+      tmp_deriv.elem (i) = deriv[i];
+      tmp_state.elem (i) = state[i];
     }
 
   Matrix tmp_pd = user_jac (tmp_state, tmp_deriv, time, cj);
 
   for (octave_idx_type j = 0; j < nn; j++)
     for (octave_idx_type i = 0; i < nn; i++)
-      pd [nn * j + i] = tmp_pd.elem (i, j);
+      pd[nn * j + i] = tmp_pd.elem (i, j);
 
   END_INTERRUPT_WITH_EXCEPTIONS;
 
--- a/liboctave/EIG.cc
+++ b/liboctave/EIG.cc
@@ -230,8 +230,8 @@
                   return -1;
                 }
 
-              lambda.elem(j) = Complex (wr.elem(j), wi.elem(j));
-              lambda.elem(j+1) = Complex (wr.elem(j+1), wi.elem(j+1));
+              lambda.elem (j) = Complex (wr.elem (j), wi.elem (j));
+              lambda.elem (j+1) = Complex (wr.elem (j+1), wi.elem (j+1));
 
               for (octave_idx_type i = 0; i < nvr; i++)
                 {
@@ -581,10 +581,10 @@
                   return -1;
                 }
 
-              lambda.elem(j) = Complex (ar.elem(j) / beta.elem (j),
-                                        ai.elem(j) / beta.elem (j));
-              lambda.elem(j+1) = Complex (ar.elem(j+1) / beta.elem (j+1),
-                                          ai.elem(j+1) / beta.elem (j+1));
+              lambda.elem (j) = Complex (ar.elem (j) / beta.elem (j),
+                                         ai.elem (j) / beta.elem (j));
+              lambda.elem (j+1) = Complex (ar.elem (j+1) / beta.elem (j+1),
+                                           ai.elem (j+1) / beta.elem (j+1));
 
               for (octave_idx_type i = 0; i < nvr; i++)
                 {
@@ -780,7 +780,7 @@
       lambda.resize (n);
 
       for (octave_idx_type j = 0; j < n; j++)
-        lambda.elem (j) = alpha.elem (j) / beta.elem(j);
+        lambda.elem (j) = alpha.elem (j) / beta.elem (j);
 
       v = vtmp;
     }
--- a/liboctave/LSODE.cc
+++ b/liboctave/LSODE.cc
@@ -79,7 +79,7 @@
   else
     {
       for (octave_idx_type i = 0; i < neq; i++)
-        deriv [i] = tmp_deriv.elem (i);
+        deriv[i] = tmp_deriv.elem (i);
     }
 
   END_INTERRUPT_WITH_EXCEPTIONS;
@@ -103,7 +103,7 @@
 
   for (octave_idx_type j = 0; j < neq; j++)
     for (octave_idx_type i = 0; i < neq; i++)
-      pd [nrowpd * j + i] = tmp_jac (i, j);
+      pd[nrowpd * j + i] = tmp_jac (i, j);
 
   END_INTERRUPT_WITH_EXCEPTIONS;
 
--- a/liboctave/MArray.h
+++ b/liboctave/MArray.h
@@ -39,6 +39,12 @@
 class
 MArray : public Array<T>
 {
+protected:
+
+  // For jit support
+  MArray (T *sdata, octave_idx_type slen, octave_idx_type *adims, void *arep)
+    : Array<T> (sdata, slen, adims, arep) { }
+
 public:
 
   MArray (void) : Array<T> () {}
--- a/liboctave/MSparse.cc
+++ b/liboctave/MSparse.cc
@@ -60,41 +60,41 @@
         octave_idx_type jx = 0;
         for (octave_idx_type i = 0 ; i < a_nc ; i++)
           {
-            octave_idx_type  ja = a.cidx(i);
-            octave_idx_type  ja_max = a.cidx(i+1);
+            octave_idx_type  ja = a.cidx (i);
+            octave_idx_type  ja_max = a.cidx (i+1);
             bool ja_lt_max= ja < ja_max;
 
-            octave_idx_type  jb = b.cidx(i);
-            octave_idx_type  jb_max = b.cidx(i+1);
+            octave_idx_type  jb = b.cidx (i);
+            octave_idx_type  jb_max = b.cidx (i+1);
             bool jb_lt_max = jb < jb_max;
 
             while (ja_lt_max || jb_lt_max )
               {
                 octave_quit ();
                 if ((! jb_lt_max) ||
-                      (ja_lt_max && (a.ridx(ja) < b.ridx(jb))))
+                      (ja_lt_max && (a.ridx (ja) < b.ridx (jb))))
                   {
-                    r.ridx(jx) = a.ridx(ja);
-                    r.data(jx) = op (a.data(ja), 0.);
+                    r.ridx (jx) = a.ridx (ja);
+                    r.data (jx) = op (a.data (ja), 0.);
                     jx++;
                     ja++;
                     ja_lt_max= ja < ja_max;
                   }
                 else if (( !ja_lt_max ) ||
-                     (jb_lt_max && (b.ridx(jb) < a.ridx(ja)) ) )
+                     (jb_lt_max && (b.ridx (jb) < a.ridx (ja)) ) )
                   {
-                    r.ridx(jx) = b.ridx(jb);
-                    r.data(jx) = op (0., b.data(jb));
+                    r.ridx (jx) = b.ridx (jb);
+                    r.data (jx) = op (0., b.data (jb));
                     jx++;
                     jb++;
                     jb_lt_max= jb < jb_max;
                   }
                 else
                   {
-                     if (op (a.data(ja), b.data(jb)) != 0.)
+                     if (op (a.data (ja), b.data (jb)) != 0.)
                        {
-                          r.data(jx) = op (a.data(ja), b.data(jb));
-                          r.ridx(jx) = a.ridx(ja);
+                          r.data (jx) = op (a.data (ja), b.data (jb));
+                          r.ridx (jx) = a.ridx (ja);
                           jx++;
                        }
                      ja++;
@@ -103,7 +103,7 @@
                      jb_lt_max= jb < jb_max;
                   }
               }
-            r.cidx(i+1) = jx;
+            r.cidx (i+1) = jx;
           }
 
         a = r.maybe_compress ();
@@ -139,7 +139,7 @@
   MArray<T> r (dim_vector (nr, nc), op (0.0, s));
 
   for (octave_idx_type j = 0; j < nc; j++)
-    for (octave_idx_type i = a.cidx(j); i < a.cidx(j+1); i++)
+    for (octave_idx_type i = a.cidx (j); i < a.cidx (j+1); i++)
       r.elem (a.ridx (i), j) = op (a.data (i), s);
   return r;
 }
@@ -171,11 +171,11 @@
 
   for (octave_idx_type i = 0; i < nz; i++)
     {
-      r.data(i) = op (a.data(i), s);
-      r.ridx(i) = a.ridx(i);
+      r.data (i) = op (a.data (i), s);
+      r.ridx (i) = a.ridx (i);
     }
   for (octave_idx_type i = 0; i < nc + 1; i++)
-    r.cidx(i) = a.cidx(i);
+    r.cidx (i) = a.cidx (i);
   r.maybe_compress (true);
   return r;
 }
@@ -207,7 +207,7 @@
   MArray<T> r (dim_vector (nr, nc), op (s, 0.0));
 
   for (octave_idx_type j = 0; j < nc; j++)
-    for (octave_idx_type i = a.cidx(j); i < a.cidx(j+1); i++)
+    for (octave_idx_type i = a.cidx (j); i < a.cidx (j+1); i++)
       r.elem (a.ridx (i), j) = op (s, a.data (i));
   return r;
 }
@@ -238,11 +238,11 @@
 
   for (octave_idx_type i = 0; i < nz; i++)
     {
-      r.data(i) = op (s, a.data(i));
-      r.ridx(i) = a.ridx(i);
+      r.data (i) = op (s, a.data (i));
+      r.ridx (i) = a.ridx (i);
     }
   for (octave_idx_type i = 0; i < nc + 1; i++)
-    r.cidx(i) = a.cidx(i);
+    r.cidx (i) = a.cidx (i);
   r.maybe_compress (true);
   return r;
 }
@@ -279,23 +279,23 @@
 
   if (a_nr == 1 && a_nc == 1)
     {
-      if (a.elem(0,0) == 0.)
+      if (a.elem (0,0) == 0.)
         if (negate)
           r = -MSparse<T> (b);
         else
           r = MSparse<T> (b);
       else
         {
-          r = MSparse<T> (b_nr, b_nc, op (a.data(0), 0.));
+          r = MSparse<T> (b_nr, b_nc, op (a.data (0), 0.));
 
           for (octave_idx_type j = 0 ; j < b_nc ; j++)
             {
               octave_quit ();
               octave_idx_type idxj = j * b_nr;
-              for (octave_idx_type i = b.cidx(j) ; i < b.cidx(j+1) ; i++)
+              for (octave_idx_type i = b.cidx (j) ; i < b.cidx (j+1) ; i++)
                 {
                   octave_quit ();
-                  r.data(idxj + b.ridx(i)) = op (a.data(0), b.data(i));
+                  r.data (idxj + b.ridx (i)) = op (a.data (0), b.data (i));
                 }
             }
           r.maybe_compress ();
@@ -303,20 +303,20 @@
     }
   else if (b_nr == 1 && b_nc == 1)
     {
-      if (b.elem(0,0) == 0.)
+      if (b.elem (0,0) == 0.)
         r = MSparse<T> (a);
       else
         {
-          r = MSparse<T> (a_nr, a_nc, op (0.0, b.data(0)));
+          r = MSparse<T> (a_nr, a_nc, op (0.0, b.data (0)));
 
           for (octave_idx_type j = 0 ; j < a_nc ; j++)
             {
               octave_quit ();
               octave_idx_type idxj = j * a_nr;
-              for (octave_idx_type i = a.cidx(j) ; i < a.cidx(j+1) ; i++)
+              for (octave_idx_type i = a.cidx (j) ; i < a.cidx (j+1) ; i++)
                 {
                   octave_quit ();
-                  r.data(idxj + a.ridx(i)) = op (a.data(i), b.data(0));
+                  r.data (idxj + a.ridx (i)) = op (a.data (i), b.data (0));
                 }
             }
           r.maybe_compress ();
@@ -332,41 +332,41 @@
       r.cidx (0) = 0;
       for (octave_idx_type i = 0 ; i < a_nc ; i++)
         {
-          octave_idx_type  ja = a.cidx(i);
-          octave_idx_type  ja_max = a.cidx(i+1);
+          octave_idx_type  ja = a.cidx (i);
+          octave_idx_type  ja_max = a.cidx (i+1);
           bool ja_lt_max= ja < ja_max;
 
-          octave_idx_type  jb = b.cidx(i);
-          octave_idx_type  jb_max = b.cidx(i+1);
+          octave_idx_type  jb = b.cidx (i);
+          octave_idx_type  jb_max = b.cidx (i+1);
           bool jb_lt_max = jb < jb_max;
 
           while (ja_lt_max || jb_lt_max )
             {
               octave_quit ();
               if ((! jb_lt_max) ||
-                  (ja_lt_max && (a.ridx(ja) < b.ridx(jb))))
+                  (ja_lt_max && (a.ridx (ja) < b.ridx (jb))))
                 {
-                  r.ridx(jx) = a.ridx(ja);
-                  r.data(jx) = op (a.data(ja), 0.);
+                  r.ridx (jx) = a.ridx (ja);
+                  r.data (jx) = op (a.data (ja), 0.);
                   jx++;
                   ja++;
                   ja_lt_max= ja < ja_max;
                 }
               else if (( !ja_lt_max ) ||
-                       (jb_lt_max && (b.ridx(jb) < a.ridx(ja)) ) )
+                       (jb_lt_max && (b.ridx (jb) < a.ridx (ja)) ) )
                 {
-                  r.ridx(jx) = b.ridx(jb);
-                  r.data(jx) = op (0.,  b.data(jb));
+                  r.ridx (jx) = b.ridx (jb);
+                  r.data (jx) = op (0.,  b.data (jb));
                   jx++;
                   jb++;
                   jb_lt_max= jb < jb_max;
                 }
               else
                 {
-                  if (op (a.data(ja), b.data(jb)) != 0.)
+                  if (op (a.data (ja), b.data (jb)) != 0.)
                     {
-                      r.data(jx) = op (a.data(ja), b.data(jb));
-                      r.ridx(jx) = a.ridx(ja);
+                      r.data (jx) = op (a.data (ja), b.data (jb));
+                      r.ridx (jx) = a.ridx (ja);
                       jx++;
                     }
                   ja++;
@@ -375,7 +375,7 @@
                   jb_lt_max= jb < jb_max;
                 }
             }
-          r.cidx(i+1) = jx;
+          r.cidx (i+1) = jx;
         }
 
       r.maybe_compress ();
@@ -412,7 +412,7 @@
 
   if (a_nr == 1 && a_nc == 1)
     {
-      if (a.elem(0,0) == 0.)
+      if (a.elem (0,0) == 0.)
         r = MSparse<T> (b_nr, b_nc);
       else
         {
@@ -422,14 +422,14 @@
           for (octave_idx_type i = 0 ; i < b_nnz ; i++)
             {
               octave_quit ();
-              r.data (i) = a.data(0) * r.data(i);
+              r.data (i) = a.data (0) * r.data (i);
             }
           r.maybe_compress ();
         }
     }
   else if (b_nr == 1 && b_nc == 1)
     {
-      if (b.elem(0,0) == 0.)
+      if (b.elem (0,0) == 0.)
         r = MSparse<T> (a_nr, a_nc);
       else
         {
@@ -439,7 +439,7 @@
           for (octave_idx_type i = 0 ; i < a_nnz ; i++)
             {
               octave_quit ();
-              r.data (i) = r.data(i) * b.data(0);
+              r.data (i) = r.data (i) * b.data (0);
             }
           r.maybe_compress ();
         }
@@ -454,40 +454,40 @@
       r.cidx (0) = 0;
       for (octave_idx_type i = 0 ; i < a_nc ; i++)
         {
-          octave_idx_type  ja = a.cidx(i);
-          octave_idx_type  ja_max = a.cidx(i+1);
+          octave_idx_type  ja = a.cidx (i);
+          octave_idx_type  ja_max = a.cidx (i+1);
           bool ja_lt_max= ja < ja_max;
 
-          octave_idx_type  jb = b.cidx(i);
-          octave_idx_type  jb_max = b.cidx(i+1);
+          octave_idx_type  jb = b.cidx (i);
+          octave_idx_type  jb_max = b.cidx (i+1);
           bool jb_lt_max = jb < jb_max;
 
           while (ja_lt_max || jb_lt_max )
             {
               octave_quit ();
               if ((! jb_lt_max) ||
-                  (ja_lt_max && (a.ridx(ja) < b.ridx(jb))))
+                  (ja_lt_max && (a.ridx (ja) < b.ridx (jb))))
                 {
                   ja++; ja_lt_max= ja < ja_max;
                 }
               else if (( !ja_lt_max ) ||
-                       (jb_lt_max && (b.ridx(jb) < a.ridx(ja)) ) )
+                       (jb_lt_max && (b.ridx (jb) < a.ridx (ja)) ) )
                 {
                   jb++; jb_lt_max= jb < jb_max;
                 }
               else
                 {
-                  if ((a.data(ja) * b.data(jb)) != 0.)
+                  if ((a.data (ja) * b.data (jb)) != 0.)
                     {
-                      r.data(jx) = a.data(ja) * b.data(jb);
-                      r.ridx(jx) = a.ridx(ja);
+                      r.data (jx) = a.data (ja) * b.data (jb);
+                      r.ridx (jx) = a.ridx (ja);
                       jx++;
                     }
                   ja++; ja_lt_max= ja < ja_max;
                   jb++; jb_lt_max= jb < jb_max;
                 }
             }
-          r.cidx(i+1) = jx;
+          r.cidx (i+1) = jx;
         }
 
       r.maybe_compress ();
@@ -518,7 +518,7 @@
           octave_idx_type b_nnz = b.nnz ();
           r = MSparse<T> (b);
           for (octave_idx_type i = 0 ; i < b_nnz ; i++)
-            r.data (i) = val / r.data(i);
+            r.data (i) = val / r.data (i);
           r.maybe_compress ();
         }
       else
@@ -528,10 +528,10 @@
             {
               octave_quit ();
               octave_idx_type idxj = j * b_nr;
-              for (octave_idx_type i = b.cidx(j) ; i < b.cidx(j+1) ; i++)
+              for (octave_idx_type i = b.cidx (j) ; i < b.cidx (j+1) ; i++)
                 {
                   octave_quit ();
-                  r.data(idxj + b.ridx(i)) = val / b.data(i);
+                  r.data (idxj + b.ridx (i)) = val / b.data (i);
                 }
             }
           r.maybe_compress ();
@@ -546,7 +546,7 @@
           octave_idx_type a_nnz = a.nnz ();
           r = MSparse<T> (a);
           for (octave_idx_type i = 0 ; i < a_nnz ; i++)
-            r.data (i) = r.data(i) / val;
+            r.data (i) = r.data (i) / val;
           r.maybe_compress ();
         }
       else
@@ -556,10 +556,10 @@
             {
               octave_quit ();
               octave_idx_type idxj = j * a_nr;
-              for (octave_idx_type i = a.cidx(j) ; i < a.cidx(j+1) ; i++)
+              for (octave_idx_type i = a.cidx (j) ; i < a.cidx (j+1) ; i++)
                 {
                   octave_quit ();
-                  r.data(idxj + a.ridx(i)) = a.data(i) / val;
+                  r.data (idxj + a.ridx (i)) = a.data (i) / val;
                 }
             }
           r.maybe_compress ();
@@ -573,32 +573,32 @@
 
       for (octave_idx_type i = 0 ; i < a_nc ; i++)
         {
-          octave_idx_type  ja = a.cidx(i);
-          octave_idx_type  ja_max = a.cidx(i+1);
+          octave_idx_type  ja = a.cidx (i);
+          octave_idx_type  ja_max = a.cidx (i+1);
           bool ja_lt_max= ja < ja_max;
 
-          octave_idx_type  jb = b.cidx(i);
-          octave_idx_type  jb_max = b.cidx(i+1);
+          octave_idx_type  jb = b.cidx (i);
+          octave_idx_type  jb_max = b.cidx (i+1);
           bool jb_lt_max = jb < jb_max;
 
           while (ja_lt_max || jb_lt_max )
             {
               octave_quit ();
               if ((! jb_lt_max) ||
-                  (ja_lt_max && (a.ridx(ja) < b.ridx(jb))))
+                  (ja_lt_max && (a.ridx (ja) < b.ridx (jb))))
                 {
-                  r.elem (a.ridx(ja),i) = a.data(ja) / Zero;
+                  r.elem (a.ridx (ja),i) = a.data (ja) / Zero;
                   ja++; ja_lt_max= ja < ja_max;
                 }
               else if (( !ja_lt_max ) ||
-                       (jb_lt_max && (b.ridx(jb) < a.ridx(ja)) ) )
+                       (jb_lt_max && (b.ridx (jb) < a.ridx (ja)) ) )
                 {
-                  r.elem (b.ridx(jb),i) = Zero / b.data(jb);
+                  r.elem (b.ridx (jb),i) = Zero / b.data (jb);
                   jb++; jb_lt_max= jb < jb_max;
                 }
               else
                 {
-                  r.elem (a.ridx(ja),i) = a.data(ja) / b.data(jb);
+                  r.elem (a.ridx (ja),i) = a.data (ja) / b.data (jb);
                   ja++; ja_lt_max= ja < ja_max;
                   jb++; jb_lt_max= jb < jb_max;
                 }
@@ -629,6 +629,6 @@
   MSparse<T> retval (a);
   octave_idx_type nz = a.nnz ();
   for (octave_idx_type i = 0; i < nz; i++)
-    retval.data(i) = - retval.data(i);
+    retval.data (i) = - retval.data (i);
   return retval;
 }
--- a/liboctave/Makefile.am
+++ b/liboctave/Makefile.am
@@ -22,9 +22,8 @@
 
 ## Search local directories before those specified by the user.
 AM_CPPFLAGS = \
-  -I../libgnu -I$(top_srcdir)/libgnu \
-  -I$(top_srcdir)/libcruft/misc \
-  @CPPFLAGS@
+  -I$(top_builddir)/libgnu -I$(top_srcdir)/libgnu \
+  -I$(top_srcdir)/libcruft/misc
 
 EXTRA_DIST = \
   config-ops.sh \
--- a/liboctave/MatrixType.cc
+++ b/liboctave/MatrixType.cc
@@ -74,7 +74,7 @@
       bool hermitian = true;
 
       // do the checks for lower/upper/hermitian all in one pass.
-      OCTAVE_LOCAL_BUFFER(T, diag, ncols);
+      OCTAVE_LOCAL_BUFFER (T, diag, ncols);
 
       for (octave_idx_type j = 0;
            j < ncols && upper; j++)
@@ -132,7 +132,7 @@
       bool hermitian = true;
 
       // do the checks for lower/upper/hermitian all in one pass.
-      OCTAVE_LOCAL_BUFFER(T, diag, ncols);
+      OCTAVE_LOCAL_BUFFER (T, diag, ncols);
 
       for (octave_idx_type j = 0;
            j < ncols && upper; j++)
@@ -231,12 +231,12 @@
       // Maybe the matrix is diagonal
       for (i = 0; i < nm; i++)
         {
-          if (a.cidx(i+1) != a.cidx(i) + 1)
+          if (a.cidx (i+1) != a.cidx (i) + 1)
             {
               tmp_typ = MatrixType::Full;
               break;
             }
-          if (a.ridx(i) != i)
+          if (a.ridx (i) != i)
             {
               tmp_typ = MatrixType::Permuted_Diagonal;
               break;
@@ -248,19 +248,19 @@
           std::vector<bool> found (nrows);
 
           for (octave_idx_type j = 0; j < i; j++)
-            found [j] = true;
+            found[j] = true;
           for (octave_idx_type j = i; j < nrows; j++)
-            found [j] = false;
+            found[j] = false;
 
           for (octave_idx_type j = i; j < nm; j++)
             {
-              if ((a.cidx(j+1) > a.cidx(j) + 1)  ||
-                  ((a.cidx(j+1) == a.cidx(j) + 1) && found [a.ridx(j)]))
+              if ((a.cidx (j+1) > a.cidx (j) + 1)  ||
+                  ((a.cidx (j+1) == a.cidx (j) + 1) && found[a.ridx (j)]))
                 {
                   tmp_typ = MatrixType::Full;
                   break;
                 }
-              found [a.ridx(j)] = true;
+              found[a.ridx (j)] = true;
             }
         }
       typ = tmp_typ;
@@ -278,8 +278,8 @@
           if (j < nrows)
             {
               zero_on_diagonal = true;
-              for (octave_idx_type i = a.cidx(j); i < a.cidx(j+1); i++)
-                if (a.ridx(i) == j)
+              for (octave_idx_type i = a.cidx (j); i < a.cidx (j+1); i++)
+                if (a.ridx (i) == j)
                   {
                     zero_on_diagonal = false;
                     break;
@@ -292,10 +292,10 @@
               break;
             }
 
-          if (a.cidx(j+1) != a.cidx(j))
+          if (a.cidx (j+1) != a.cidx (j))
             {
-              octave_idx_type ru = a.ridx(a.cidx(j));
-              octave_idx_type rl = a.ridx(a.cidx(j+1)-1);
+              octave_idx_type ru = a.ridx (a.cidx (j));
+              octave_idx_type rl = a.ridx (a.cidx (j+1)-1);
 
               if (j - ru > upper_band)
                 upper_band = j - ru;
@@ -351,7 +351,7 @@
           perm = new octave_idx_type [ncols];
 
           for (octave_idx_type i = 0; i < ncols; i++)
-            perm [i] = -1;
+            perm[i] = -1;
 
           for (octave_idx_type i = 0; i < nm; i++)
             {
@@ -359,10 +359,10 @@
 
               for (octave_idx_type j = 0; j < ncols; j++)
                 {
-                  if ((a.cidx(j+1) - a.cidx(j)) > 0 &&
-                      (a.ridx(a.cidx(j+1)-1) == i))
+                  if ((a.cidx (j+1) - a.cidx (j)) > 0 &&
+                      (a.ridx (a.cidx (j+1)-1) == i))
                     {
-                      perm [i] = j;
+                      perm[i] = j;
                       found = true;
                       break;
                     }
@@ -379,11 +379,11 @@
                 {
                   octave_idx_type k = nrows;
                   for (octave_idx_type i = 0; i < ncols; i++)
-                    if (perm [i] == -1)
+                    if (perm[i] == -1)
                       perm[i] = k++;
                 }
             }
-          else if (a.cidx(nm) == a.cidx(ncols))
+          else if (a.cidx (nm) == a.cidx (ncols))
             {
               nperm = nrows;
               delete [] perm;
@@ -392,13 +392,13 @@
 
               for (octave_idx_type i = 0; i < nrows; i++)
                 {
-                  perm [i] = -1;
-                  tmp [i] = -1;
+                  perm[i] = -1;
+                  tmp[i] = -1;
                 }
 
               for (octave_idx_type j = 0; j < ncols; j++)
-                for (octave_idx_type i = a.cidx(j); i < a.cidx(j+1); i++)
-                    perm [a.ridx(i)] = j;
+                for (octave_idx_type i = a.cidx (j); i < a.cidx (j+1); i++)
+                    perm[a.ridx (i)] = j;
 
               found = true;
               for (octave_idx_type i = 0; i < nm; i++)
@@ -478,11 +478,11 @@
           for (octave_idx_type j = 0; is_herm && j < ncols; j++)
             {
               is_herm = false;
-              for (octave_idx_type i = a.cidx(j); i < a.cidx(j+1); i++)
+              for (octave_idx_type i = a.cidx (j); i < a.cidx (j+1); i++)
                 {
-                  if (a.ridx(i) == j)
+                  if (a.ridx (i) == j)
                     {
-                      double d = a.data(i);
+                      double d = a.data (i);
                       is_herm = d > 0.;
                       diag(j) = d;
                       break;
@@ -494,20 +494,20 @@
           // next, check symmetry and 2x2 positiveness
 
           for (octave_idx_type j = 0; is_herm && j < ncols; j++)
-            for (octave_idx_type i = a.cidx(j); is_herm && i < a.cidx(j+1); i++)
+            for (octave_idx_type i = a.cidx (j); is_herm && i < a.cidx (j+1); i++)
               {
-                octave_idx_type k = a.ridx(i);
+                octave_idx_type k = a.ridx (i);
                 is_herm = k == j;
                 if (is_herm)
                   continue;
-                double d = a.data(i);
+                double d = a.data (i);
                 if (d*d < diag(j)*diag(k))
                   {
-                    for (octave_idx_type l = a.cidx(k); l < a.cidx(k+1); l++)
+                    for (octave_idx_type l = a.cidx (k); l < a.cidx (k+1); l++)
                       {
-                        if (a.ridx(l) == j)
+                        if (a.ridx (l) == j)
                           {
-                            is_herm = a.data(l) == d;
+                            is_herm = a.data (l) == d;
                             break;
                           }
                       }
@@ -552,12 +552,12 @@
       // Maybe the matrix is diagonal
       for (i = 0; i < nm; i++)
         {
-          if (a.cidx(i+1) != a.cidx(i) + 1)
+          if (a.cidx (i+1) != a.cidx (i) + 1)
             {
               tmp_typ = MatrixType::Full;
               break;
             }
-          if (a.ridx(i) != i)
+          if (a.ridx (i) != i)
             {
               tmp_typ = MatrixType::Permuted_Diagonal;
               break;
@@ -569,19 +569,19 @@
           std::vector<bool> found (nrows);
 
           for (octave_idx_type j = 0; j < i; j++)
-            found [j] = true;
+            found[j] = true;
           for (octave_idx_type j = i; j < nrows; j++)
-            found [j] = false;
+            found[j] = false;
 
           for (octave_idx_type j = i; j < nm; j++)
             {
-              if ((a.cidx(j+1) > a.cidx(j) + 1)  ||
-                  ((a.cidx(j+1) == a.cidx(j) + 1) && found [a.ridx(j)]))
+              if ((a.cidx (j+1) > a.cidx (j) + 1)  ||
+                  ((a.cidx (j+1) == a.cidx (j) + 1) && found[a.ridx (j)]))
                 {
                   tmp_typ = MatrixType::Full;
                   break;
                 }
-              found [a.ridx(j)] = true;
+              found[a.ridx (j)] = true;
             }
         }
       typ = tmp_typ;
@@ -599,8 +599,8 @@
           if (j < nrows)
             {
               zero_on_diagonal = true;
-              for (octave_idx_type i = a.cidx(j); i < a.cidx(j+1); i++)
-                if (a.ridx(i) == j)
+              for (octave_idx_type i = a.cidx (j); i < a.cidx (j+1); i++)
+                if (a.ridx (i) == j)
                   {
                     zero_on_diagonal = false;
                     break;
@@ -613,10 +613,10 @@
               break;
             }
 
-          if (a.cidx(j+1) != a.cidx(j))
+          if (a.cidx (j+1) != a.cidx (j))
             {
-              octave_idx_type ru = a.ridx(a.cidx(j));
-              octave_idx_type rl = a.ridx(a.cidx(j+1)-1);
+              octave_idx_type ru = a.ridx (a.cidx (j));
+              octave_idx_type rl = a.ridx (a.cidx (j+1)-1);
 
               if (j - ru > upper_band)
                 upper_band = j - ru;
@@ -672,7 +672,7 @@
           perm = new octave_idx_type [ncols];
 
           for (octave_idx_type i = 0; i < ncols; i++)
-            perm [i] = -1;
+            perm[i] = -1;
 
           for (octave_idx_type i = 0; i < nm; i++)
             {
@@ -680,10 +680,10 @@
 
               for (octave_idx_type j = 0; j < ncols; j++)
                 {
-                  if ((a.cidx(j+1) - a.cidx(j)) > 0 &&
-                      (a.ridx(a.cidx(j+1)-1) == i))
+                  if ((a.cidx (j+1) - a.cidx (j)) > 0 &&
+                      (a.ridx (a.cidx (j+1)-1) == i))
                     {
-                      perm [i] = j;
+                      perm[i] = j;
                       found = true;
                       break;
                     }
@@ -700,11 +700,11 @@
                 {
                   octave_idx_type k = nrows;
                   for (octave_idx_type i = 0; i < ncols; i++)
-                    if (perm [i] == -1)
+                    if (perm[i] == -1)
                       perm[i] = k++;
                 }
             }
-          else if (a.cidx(nm) == a.cidx(ncols))
+          else if (a.cidx (nm) == a.cidx (ncols))
             {
               nperm = nrows;
               delete [] perm;
@@ -713,13 +713,13 @@
 
               for (octave_idx_type i = 0; i < nrows; i++)
                 {
-                  perm [i] = -1;
-                  tmp [i] = -1;
+                  perm[i] = -1;
+                  tmp[i] = -1;
                 }
 
               for (octave_idx_type j = 0; j < ncols; j++)
-                for (octave_idx_type i = a.cidx(j); i < a.cidx(j+1); i++)
-                    perm [a.ridx(i)] = j;
+                for (octave_idx_type i = a.cidx (j); i < a.cidx (j+1); i++)
+                    perm[a.ridx (i)] = j;
 
               found = true;
               for (octave_idx_type i = 0; i < nm; i++)
@@ -799,11 +799,11 @@
           for (octave_idx_type j = 0; is_herm && j < ncols; j++)
             {
               is_herm = false;
-              for (octave_idx_type i = a.cidx(j); i < a.cidx(j+1); i++)
+              for (octave_idx_type i = a.cidx (j); i < a.cidx (j+1); i++)
                 {
-                  if (a.ridx(i) == j)
+                  if (a.ridx (i) == j)
                     {
-                      Complex d = a.data(i);
+                      Complex d = a.data (i);
                       is_herm = d.real () > 0. && d.imag () == 0.;
                       diag(j) = d.real ();
                       break;
@@ -814,21 +814,21 @@
           // next, check symmetry and 2x2 positiveness
 
           for (octave_idx_type j = 0; is_herm && j < ncols; j++)
-            for (octave_idx_type i = a.cidx(j); is_herm && i < a.cidx(j+1); i++)
+            for (octave_idx_type i = a.cidx (j); is_herm && i < a.cidx (j+1); i++)
               {
-                octave_idx_type k = a.ridx(i);
+                octave_idx_type k = a.ridx (i);
                 is_herm = k == j;
                 if (is_herm)
                   continue;
-                Complex d = a.data(i);
+                Complex d = a.data (i);
                 if (std::norm (d) < diag(j)*diag(k))
                   {
                     d = std::conj (d);
-                    for (octave_idx_type l = a.cidx(k); l < a.cidx(k+1); l++)
+                    for (octave_idx_type l = a.cidx (k); l < a.cidx (k+1); l++)
                       {
-                        if (a.ridx(l) == j)
+                        if (a.ridx (l) == j)
                           {
-                            is_herm = a.data(l) == d;
+                            is_herm = a.data (l) == d;
                             break;
                           }
                       }
--- a/liboctave/Sparse-op-defs.h
+++ b/liboctave/Sparse-op-defs.h
@@ -74,11 +74,11 @@
  \
     for (octave_idx_type i = 0; i < nz; i++) \
       { \
-        r.xdata(i) = m.data(i) OP s; \
-        r.xridx(i) = m.ridx(i); \
+        r.xdata (i) = m.data (i) OP s; \
+        r.xridx (i) = m.ridx (i); \
       } \
     for (octave_idx_type i = 0; i < nc + 1; i++) \
-      r.xcidx(i) = m.cidx(i); \
+      r.xcidx (i) = m.cidx (i); \
     \
     r.maybe_compress (true); \
     return r; \
@@ -114,7 +114,7 @@
       { \
         r = SparseBoolMatrix (nr, nc, true); \
         for (octave_idx_type j = 0; j < nc; j++) \
-          for (octave_idx_type i = m.cidx(j); i < m.cidx(j+1); i++) \
+          for (octave_idx_type i = m.cidx (j); i < m.cidx (j+1); i++) \
             if (! (MC (m.data (i)) OP SC (s))) \
               r.data (m.ridx (i) + j * nr) = false; \
         r.maybe_compress (true); \
@@ -126,7 +126,7 @@
         octave_idx_type nel = 0; \
         for (octave_idx_type j = 0; j < nc; j++) \
           { \
-            for (octave_idx_type i = m.cidx(j); i < m.cidx(j+1); i++) \
+            for (octave_idx_type i = m.cidx (j); i < m.cidx (j+1); i++) \
               if (MC (m.data (i)) OP SC (s)) \
                 { \
                   r.ridx (nel) = m.ridx (i); \
@@ -169,8 +169,8 @@
           { \
             r = SparseBoolMatrix (nr, nc, true); \
             for (octave_idx_type j = 0; j < nc; j++) \
-              for (octave_idx_type i = m.cidx(j); i < m.cidx(j+1); i++) \
-                if (! ((m.data(i) != LHS_ZERO) OP (s != RHS_ZERO))) \
+              for (octave_idx_type i = m.cidx (j); i < m.cidx (j+1); i++) \
+                if (! ((m.data (i) != LHS_ZERO) OP (s != RHS_ZERO))) \
                   r.data (m.ridx (i) + j * nr) = false; \
             r.maybe_compress (true); \
           } \
@@ -181,8 +181,8 @@
             octave_idx_type nel = 0; \
             for (octave_idx_type j = 0; j < nc; j++) \
               { \
-                for (octave_idx_type i = m.cidx(j); i < m.cidx(j+1); i++) \
-                  if ((m.data(i) != LHS_ZERO) OP (s != RHS_ZERO)) \
+                for (octave_idx_type i = m.cidx (j); i < m.cidx (j+1); i++) \
+                  if ((m.data (i) != LHS_ZERO) OP (s != RHS_ZERO)) \
                     { \
                       r.ridx (nel) = m.ridx (i); \
                       r.data (nel++) = true; \
@@ -243,11 +243,11 @@
  \
     for (octave_idx_type i = 0; i < nz; i++) \
       { \
-        r.xdata(i) = s OP m.data(i); \
-        r.xridx(i) = m.ridx(i); \
+        r.xdata (i) = s OP m.data (i); \
+        r.xridx (i) = m.ridx (i); \
       } \
     for (octave_idx_type i = 0; i < nc + 1; i++) \
-      r.xcidx(i) = m.cidx(i); \
+      r.xcidx (i) = m.cidx (i); \
  \
     r.maybe_compress(true); \
     return r; \
@@ -283,7 +283,7 @@
       { \
         r = SparseBoolMatrix (nr, nc, true); \
         for (octave_idx_type j = 0; j < nc; j++) \
-          for (octave_idx_type i = m.cidx(j); i < m.cidx(j+1); i++) \
+          for (octave_idx_type i = m.cidx (j); i < m.cidx (j+1); i++) \
             if (! (SC (s) OP MC (m.data (i)))) \
               r.data (m.ridx (i) + j * nr) = false; \
         r.maybe_compress (true); \
@@ -295,7 +295,7 @@
         octave_idx_type nel = 0; \
         for (octave_idx_type j = 0; j < nc; j++) \
           { \
-            for (octave_idx_type i = m.cidx(j); i < m.cidx(j+1); i++) \
+            for (octave_idx_type i = m.cidx (j); i < m.cidx (j+1); i++) \
               if (SC (s) OP MC (m.data (i))) \
                 { \
                   r.ridx (nel) = m.ridx (i); \
@@ -338,8 +338,8 @@
           { \
             r = SparseBoolMatrix (nr, nc, true); \
             for (octave_idx_type j = 0; j < nc; j++) \
-              for (octave_idx_type i = m.cidx(j); i < m.cidx(j+1); i++) \
-                if (! ((s != LHS_ZERO) OP (m.data(i) != RHS_ZERO))) \
+              for (octave_idx_type i = m.cidx (j); i < m.cidx (j+1); i++) \
+                if (! ((s != LHS_ZERO) OP (m.data (i) != RHS_ZERO))) \
                   r.data (m.ridx (i) + j * nr) = false; \
             r.maybe_compress (true); \
           } \
@@ -350,8 +350,8 @@
             octave_idx_type nel = 0; \
             for (octave_idx_type j = 0; j < nc; j++) \
               { \
-                for (octave_idx_type i = m.cidx(j); i < m.cidx(j+1); i++) \
-                  if ((s != LHS_ZERO) OP (m.data(i) != RHS_ZERO)) \
+                for (octave_idx_type i = m.cidx (j); i < m.cidx (j+1); i++) \
+                  if ((s != LHS_ZERO) OP (m.data (i) != RHS_ZERO)) \
                     { \
                       r.ridx (nel) = m.ridx (i); \
                       r.data (nel++) = true; \
@@ -398,20 +398,20 @@
  \
     if (m1_nr == 1 && m1_nc == 1) \
       { \
-        if (m1.elem(0,0) == 0.) \
+        if (m1.elem (0,0) == 0.) \
           r = OP R (m2); \
         else \
           { \
-            r = R (m2_nr, m2_nc, m1.data(0) OP 0.); \
+            r = R (m2_nr, m2_nc, m1.data (0) OP 0.); \
             \
             for (octave_idx_type j = 0 ; j < m2_nc ; j++) \
               { \
                 octave_quit (); \
                 octave_idx_type idxj = j * m2_nr; \
-                for (octave_idx_type i = m2.cidx(j) ; i < m2.cidx(j+1) ; i++) \
+                for (octave_idx_type i = m2.cidx (j) ; i < m2.cidx (j+1) ; i++) \
                   { \
                     octave_quit (); \
-                    r.data(idxj + m2.ridx(i)) = m1.data(0) OP m2.data(i); \
+                    r.data (idxj + m2.ridx (i)) = m1.data (0) OP m2.data (i); \
                   } \
               } \
             r.maybe_compress (); \
@@ -419,20 +419,20 @@
       } \
     else if (m2_nr == 1 && m2_nc == 1) \
       { \
-        if (m2.elem(0,0) == 0.) \
+        if (m2.elem (0,0) == 0.) \
           r = R (m1); \
         else \
           { \
-            r = R (m1_nr, m1_nc, 0. OP m2.data(0)); \
+            r = R (m1_nr, m1_nc, 0. OP m2.data (0)); \
             \
             for (octave_idx_type j = 0 ; j < m1_nc ; j++) \
               { \
                 octave_quit (); \
                 octave_idx_type idxj = j * m1_nr; \
-                for (octave_idx_type i = m1.cidx(j) ; i < m1.cidx(j+1) ; i++) \
+                for (octave_idx_type i = m1.cidx (j) ; i < m1.cidx (j+1) ; i++) \
                   { \
                     octave_quit (); \
-                    r.data(idxj + m1.ridx(i)) = m1.data(i) OP m2.data(0); \
+                    r.data (idxj + m1.ridx (i)) = m1.data (i) OP m2.data (0); \
                   } \
               } \
             r.maybe_compress (); \
@@ -448,41 +448,41 @@
         r.cidx (0) = 0; \
         for (octave_idx_type i = 0 ; i < m1_nc ; i++) \
           { \
-            octave_idx_type  ja = m1.cidx(i); \
-            octave_idx_type  ja_max = m1.cidx(i+1); \
+            octave_idx_type  ja = m1.cidx (i); \
+            octave_idx_type  ja_max = m1.cidx (i+1); \
             bool ja_lt_max= ja < ja_max; \
             \
-            octave_idx_type  jb = m2.cidx(i); \
-            octave_idx_type  jb_max = m2.cidx(i+1); \
+            octave_idx_type  jb = m2.cidx (i); \
+            octave_idx_type  jb_max = m2.cidx (i+1); \
             bool jb_lt_max = jb < jb_max; \
             \
             while (ja_lt_max || jb_lt_max ) \
               { \
                 octave_quit (); \
                 if ((! jb_lt_max) || \
-                      (ja_lt_max && (m1.ridx(ja) < m2.ridx(jb)))) \
+                      (ja_lt_max && (m1.ridx (ja) < m2.ridx (jb)))) \
                   { \
-                    r.ridx(jx) = m1.ridx(ja); \
-                    r.data(jx) = m1.data(ja) OP 0.; \
+                    r.ridx (jx) = m1.ridx (ja); \
+                    r.data (jx) = m1.data (ja) OP 0.; \
                     jx++; \
                     ja++; \
                     ja_lt_max= ja < ja_max; \
                   } \
                 else if (( !ja_lt_max ) || \
-                     (jb_lt_max && (m2.ridx(jb) < m1.ridx(ja)) ) ) \
+                     (jb_lt_max && (m2.ridx (jb) < m1.ridx (ja)) ) ) \
                   { \
-                    r.ridx(jx) = m2.ridx(jb); \
-                    r.data(jx) = 0. OP m2.data(jb); \
+                    r.ridx (jx) = m2.ridx (jb); \
+                    r.data (jx) = 0. OP m2.data (jb); \
                     jx++; \
                     jb++; \
                     jb_lt_max= jb < jb_max; \
                   } \
                 else \
                   { \
-                     if ((m1.data(ja) OP m2.data(jb)) != 0.) \
+                     if ((m1.data (ja) OP m2.data (jb)) != 0.) \
                        { \
-                          r.data(jx) = m1.data(ja) OP m2.data(jb); \
-                          r.ridx(jx) = m1.ridx(ja); \
+                          r.data (jx) = m1.data (ja) OP m2.data (jb); \
+                          r.ridx (jx) = m1.ridx (ja); \
                           jx++; \
                        } \
                      ja++; \
@@ -491,7 +491,7 @@
                      jb_lt_max= jb < jb_max; \
                   } \
               } \
-            r.cidx(i+1) = jx; \
+            r.cidx (i+1) = jx; \
           } \
         \
         r.maybe_compress (); \
@@ -514,7 +514,7 @@
  \
     if (m1_nr == 1 && m1_nc == 1) \
       { \
-        if (m1.elem(0,0) == 0.) \
+        if (m1.elem (0,0) == 0.) \
           r = R (m2_nr, m2_nc); \
         else \
           { \
@@ -524,14 +524,14 @@
             for (octave_idx_type i = 0 ; i < m2_nnz ; i++) \
               { \
                 octave_quit (); \
-                r.data (i) = m1.data(0) OP r.data(i); \
+                r.data (i) = m1.data (0) OP r.data (i); \
               } \
             r.maybe_compress (); \
           } \
       } \
     else if (m2_nr == 1 && m2_nc == 1) \
       { \
-        if (m2.elem(0,0) == 0.) \
+        if (m2.elem (0,0) == 0.) \
           r = R (m1_nr, m1_nc); \
         else \
           { \
@@ -541,7 +541,7 @@
             for (octave_idx_type i = 0 ; i < m1_nnz ; i++) \
               { \
                 octave_quit (); \
-                r.data (i) = r.data(i) OP m2.data(0); \
+                r.data (i) = r.data (i) OP m2.data (0); \
               } \
             r.maybe_compress (); \
           } \
@@ -556,40 +556,40 @@
         r.cidx (0) = 0; \
         for (octave_idx_type i = 0 ; i < m1_nc ; i++) \
           { \
-            octave_idx_type  ja = m1.cidx(i); \
-            octave_idx_type  ja_max = m1.cidx(i+1); \
+            octave_idx_type  ja = m1.cidx (i); \
+            octave_idx_type  ja_max = m1.cidx (i+1); \
             bool ja_lt_max= ja < ja_max; \
             \
-            octave_idx_type  jb = m2.cidx(i); \
-            octave_idx_type  jb_max = m2.cidx(i+1); \
+            octave_idx_type  jb = m2.cidx (i); \
+            octave_idx_type  jb_max = m2.cidx (i+1); \
             bool jb_lt_max = jb < jb_max; \
             \
             while (ja_lt_max || jb_lt_max ) \
               { \
                 octave_quit (); \
                 if ((! jb_lt_max) || \
-                      (ja_lt_max && (m1.ridx(ja) < m2.ridx(jb)))) \
+                      (ja_lt_max && (m1.ridx (ja) < m2.ridx (jb)))) \
                   { \
                      ja++; ja_lt_max= ja < ja_max; \
                   } \
                 else if (( !ja_lt_max ) || \
-                     (jb_lt_max && (m2.ridx(jb) < m1.ridx(ja)) ) ) \
+                     (jb_lt_max && (m2.ridx (jb) < m1.ridx (ja)) ) ) \
                   { \
                      jb++; jb_lt_max= jb < jb_max; \
                   } \
                 else \
                   { \
-                     if ((m1.data(ja) OP m2.data(jb)) != 0.) \
+                     if ((m1.data (ja) OP m2.data (jb)) != 0.) \
                        { \
-                          r.data(jx) = m1.data(ja) OP m2.data(jb); \
-                          r.ridx(jx) = m1.ridx(ja); \
+                          r.data (jx) = m1.data (ja) OP m2.data (jb); \
+                          r.ridx (jx) = m1.ridx (ja); \
                           jx++; \
                        } \
                      ja++; ja_lt_max= ja < ja_max; \
                      jb++; jb_lt_max= jb < jb_max; \
                   } \
               } \
-            r.cidx(i+1) = jx; \
+            r.cidx (i+1) = jx; \
           } \
         \
         r.maybe_compress (); \
@@ -617,20 +617,20 @@
             octave_idx_type m2_nnz = m2.nnz (); \
             r = R (m2); \
             for (octave_idx_type i = 0 ; i < m2_nnz ; i++) \
-              r.data (i) = m1.elem(0,0) OP r.data(i); \
+              r.data (i) = m1.elem (0,0) OP r.data (i); \
             r.maybe_compress (); \
           } \
         else \
           { \
-            r = R (m2_nr, m2_nc, m1.elem(0,0) OP Complex ()); \
+            r = R (m2_nr, m2_nc, m1.elem (0,0) OP Complex ()); \
             for (octave_idx_type j = 0 ; j < m2_nc ; j++) \
               { \
                 octave_quit (); \
                 octave_idx_type idxj = j * m2_nr; \
-                for (octave_idx_type i = m2.cidx(j) ; i < m2.cidx(j+1) ; i++) \
+                for (octave_idx_type i = m2.cidx (j) ; i < m2.cidx (j+1) ; i++) \
                   { \
                     octave_quit (); \
-                    r.data(idxj + m2.ridx(i)) = m1.elem(0,0) OP m2.data(i); \
+                    r.data (idxj + m2.ridx (i)) = m1.elem (0,0) OP m2.data (i); \
                   } \
               } \
             r.maybe_compress (); \
@@ -643,20 +643,20 @@
             octave_idx_type m1_nnz = m1.nnz (); \
             r = R (m1); \
             for (octave_idx_type i = 0 ; i < m1_nnz ; i++) \
-              r.data (i) = r.data(i) OP m2.elem(0,0); \
+              r.data (i) = r.data (i) OP m2.elem (0,0); \
             r.maybe_compress (); \
           } \
         else \
           { \
-            r = R (m1_nr, m1_nc, Complex () OP m2.elem(0,0)); \
+            r = R (m1_nr, m1_nc, Complex () OP m2.elem (0,0)); \
             for (octave_idx_type j = 0 ; j < m1_nc ; j++) \
               { \
                 octave_quit (); \
                 octave_idx_type idxj = j * m1_nr; \
-                for (octave_idx_type i = m1.cidx(j) ; i < m1.cidx(j+1) ; i++) \
+                for (octave_idx_type i = m1.cidx (j) ; i < m1.cidx (j+1) ; i++) \
                   { \
                     octave_quit (); \
-                    r.data(idxj + m1.ridx(i)) = m1.data(i) OP m2.elem(0,0); \
+                    r.data (idxj + m1.ridx (i)) = m1.data (i) OP m2.elem (0,0); \
                   } \
               } \
             r.maybe_compress (); \
@@ -672,36 +672,36 @@
         \
         for (octave_idx_type i = 0 ; i < m1_nc ; i++) \
           { \
-            octave_idx_type  ja = m1.cidx(i); \
-            octave_idx_type  ja_max = m1.cidx(i+1); \
+            octave_idx_type  ja = m1.cidx (i); \
+            octave_idx_type  ja_max = m1.cidx (i+1); \
             bool ja_lt_max= ja < ja_max; \
             \
-            octave_idx_type  jb = m2.cidx(i); \
-            octave_idx_type  jb_max = m2.cidx(i+1); \
+            octave_idx_type  jb = m2.cidx (i); \
+            octave_idx_type  jb_max = m2.cidx (i+1); \
             bool jb_lt_max = jb < jb_max; \
             \
             while (ja_lt_max || jb_lt_max ) \
               { \
                 octave_quit (); \
                 if ((! jb_lt_max) || \
-                      (ja_lt_max && (m1.ridx(ja) < m2.ridx(jb)))) \
+                      (ja_lt_max && (m1.ridx (ja) < m2.ridx (jb)))) \
                   { \
                     /* keep those kludges coming */ \
-                    r.elem(m1.ridx(ja),i) = m1.data(ja) OP Complex (); \
+                    r.elem (m1.ridx (ja),i) = m1.data (ja) OP Complex (); \
                     ja++; \
                     ja_lt_max= ja < ja_max; \
                   } \
                 else if (( !ja_lt_max ) || \
-                     (jb_lt_max && (m2.ridx(jb) < m1.ridx(ja)) ) ) \
+                     (jb_lt_max && (m2.ridx (jb) < m1.ridx (ja)) ) ) \
                   { \
                     /* keep those kludges coming */ \
-                    r.elem(m2.ridx(jb),i) = Complex () OP m2.data(jb);  \
+                    r.elem (m2.ridx (jb),i) = Complex () OP m2.data (jb);  \
                     jb++; \
                     jb_lt_max= jb < jb_max; \
                   } \
                 else \
                   { \
-                    r.elem(m1.ridx(ja),i) = m1.data(ja) OP m2.data(jb); \
+                    r.elem (m1.ridx (ja),i) = m1.data (ja) OP m2.data (jb); \
                     ja++; \
                     ja_lt_max= ja < ja_max; \
                     jb++; \
@@ -755,12 +755,12 @@
     \
     if (m1_nr == 1 && m1_nc == 1) \
       { \
-    if (C1 (m1.elem(0,0)) OP C2 (Z2)) \
+    if (C1 (m1.elem (0,0)) OP C2 (Z2)) \
           { \
             r = SparseBoolMatrix (m2_nr, m2_nc, true); \
             for (octave_idx_type j = 0; j < m2_nc; j++) \
-              for (octave_idx_type i = m2.cidx(j); i < m2.cidx(j+1); i++) \
-                if (! (C1 (m1.elem (0,0)) OP C2 (m2.data(i)))) \
+              for (octave_idx_type i = m2.cidx (j); i < m2.cidx (j+1); i++) \
+                if (! (C1 (m1.elem (0,0)) OP C2 (m2.data (i)))) \
                   r.data (m2.ridx (i) + j * m2_nr) = false; \
             r.maybe_compress (true); \
           } \
@@ -771,8 +771,8 @@
             octave_idx_type nel = 0; \
             for (octave_idx_type j = 0; j < m2_nc; j++) \
               { \
-                for (octave_idx_type i = m2.cidx(j); i < m2.cidx(j+1); i++) \
-                  if (C1 (m1.elem (0,0)) OP C2 (m2.data(i))) \
+                for (octave_idx_type i = m2.cidx (j); i < m2.cidx (j+1); i++) \
+                  if (C1 (m1.elem (0,0)) OP C2 (m2.data (i))) \
                     { \
                       r.ridx (nel) = m2.ridx (i); \
                       r.data (nel++) = true; \
@@ -788,8 +788,8 @@
           { \
             r = SparseBoolMatrix (m1_nr, m1_nc, true); \
             for (octave_idx_type j = 0; j < m1_nc; j++) \
-              for (octave_idx_type i = m1.cidx(j); i < m1.cidx(j+1); i++) \
-                if (! (C1 (m1.data (i)) OP C2 (m2.elem(0,0)))) \
+              for (octave_idx_type i = m1.cidx (j); i < m1.cidx (j+1); i++) \
+                if (! (C1 (m1.data (i)) OP C2 (m2.elem (0,0)))) \
                   r.data (m1.ridx (i) + j * m1_nr) = false; \
             r.maybe_compress (true); \
           } \
@@ -800,8 +800,8 @@
             octave_idx_type nel = 0; \
             for (octave_idx_type j = 0; j < m1_nc; j++) \
               { \
-                for (octave_idx_type i = m1.cidx(j); i < m1.cidx(j+1); i++) \
-                  if (C1 (m1.data (i)) OP C2 (m2.elem(0,0))) \
+                for (octave_idx_type i = m1.cidx (j); i < m1.cidx (j+1); i++) \
+                  if (C1 (m1.data (i)) OP C2 (m2.elem (0,0))) \
                     { \
                       r.ridx (nel) = m1.ridx (i); \
                       r.data (nel++) = true; \
@@ -826,13 +826,13 @@
                      octave_idx_type e2 = m2.cidx (j+1); \
                      while (i1 < e1 || i2 < e2) \
                        { \
-                         if (i1 == e1 || (i2 < e2 && m1.ridx(i1) > m2.ridx(i2))) \
+                         if (i1 == e1 || (i2 < e2 && m1.ridx (i1) > m2.ridx (i2))) \
                            { \
                              if (! (C1 (Z1) OP C2 (m2.data (i2)))) \
                                r.data (m2.ridx (i2) + j * m1_nr) = false; \
                              i2++; \
                            } \
-                         else if (i2 == e2 || m1.ridx(i1) < m2.ridx(i2)) \
+                         else if (i2 == e2 || m1.ridx (i1) < m2.ridx (i2)) \
                            { \
                              if (! (C1 (m1.data (i1)) OP C2 (Z2))) \
                                r.data (m1.ridx (i1) + j * m1_nr) = false; \
@@ -862,7 +862,7 @@
                      octave_idx_type e2 = m2.cidx (j+1); \
                      while (i1 < e1 || i2 < e2) \
                        { \
-                         if (i1 == e1 || (i2 < e2 && m1.ridx(i1) > m2.ridx(i2))) \
+                         if (i1 == e1 || (i2 < e2 && m1.ridx (i1) > m2.ridx (i2))) \
                            { \
                              if (C1 (Z1) OP C2 (m2.data (i2))) \
                                { \
@@ -871,7 +871,7 @@
                                } \
                              i2++; \
                            } \
-                         else if (i2 == e2 || m1.ridx(i1) < m2.ridx(i2)) \
+                         else if (i2 == e2 || m1.ridx (i1) < m2.ridx (i2)) \
                            { \
                              if (C1 (m1.data (i1)) OP C2 (Z2)) \
                                { \
@@ -941,12 +941,12 @@
       { \
         if (m2_nr > 0 && m2_nc > 0) \
           { \
-            if ((m1.elem(0,0) != LHS_ZERO) OP RHS_ZERO) \
+            if ((m1.elem (0,0) != LHS_ZERO) OP RHS_ZERO) \
               { \
                 r = SparseBoolMatrix (m2_nr, m2_nc, true); \
                 for (octave_idx_type j = 0; j < m2_nc; j++) \
-                  for (octave_idx_type i = m2.cidx(j); i < m2.cidx(j+1); i++) \
-                    if (! ((m1.elem(0,0) != LHS_ZERO) OP (m2.data(i) != RHS_ZERO))) \
+                  for (octave_idx_type i = m2.cidx (j); i < m2.cidx (j+1); i++) \
+                    if (! ((m1.elem (0,0) != LHS_ZERO) OP (m2.data (i) != RHS_ZERO))) \
                       r.data (m2.ridx (i) + j * m2_nr) = false; \
                 r.maybe_compress (true); \
               } \
@@ -957,8 +957,8 @@
                 octave_idx_type nel = 0; \
                 for (octave_idx_type j = 0; j < m2_nc; j++) \
                   { \
-                    for (octave_idx_type i = m2.cidx(j); i < m2.cidx(j+1); i++) \
-                      if ((m1.elem(0,0) != LHS_ZERO) OP (m2.data(i) != RHS_ZERO)) \
+                    for (octave_idx_type i = m2.cidx (j); i < m2.cidx (j+1); i++) \
+                      if ((m1.elem (0,0) != LHS_ZERO) OP (m2.data (i) != RHS_ZERO)) \
                         { \
                           r.ridx (nel) = m2.ridx (i); \
                           r.data (nel++) = true; \
@@ -973,12 +973,12 @@
       { \
         if (m1_nr > 0 && m1_nc > 0) \
           { \
-            if (LHS_ZERO OP (m2.elem(0,0) != RHS_ZERO)) \
+            if (LHS_ZERO OP (m2.elem (0,0) != RHS_ZERO)) \
               { \
                 r = SparseBoolMatrix (m1_nr, m1_nc, true); \
                 for (octave_idx_type j = 0; j < m1_nc; j++) \
-                  for (octave_idx_type i = m1.cidx(j); i < m1.cidx(j+1); i++) \
-                    if (! ((m1.data(i) != LHS_ZERO) OP (m2.elem(0,0) != RHS_ZERO))) \
+                  for (octave_idx_type i = m1.cidx (j); i < m1.cidx (j+1); i++) \
+                    if (! ((m1.data (i) != LHS_ZERO) OP (m2.elem (0,0) != RHS_ZERO))) \
                       r.data (m1.ridx (i) + j * m1_nr) = false; \
                 r.maybe_compress (true); \
               } \
@@ -989,8 +989,8 @@
                 octave_idx_type nel = 0; \
                 for (octave_idx_type j = 0; j < m1_nc; j++) \
                   { \
-                    for (octave_idx_type i = m1.cidx(j); i < m1.cidx(j+1); i++) \
-                      if ((m1.data(i) != LHS_ZERO) OP (m2.elem(0,0) != RHS_ZERO)) \
+                    for (octave_idx_type i = m1.cidx (j); i < m1.cidx (j+1); i++) \
+                      if ((m1.data (i) != LHS_ZERO) OP (m2.elem (0,0) != RHS_ZERO)) \
                         { \
                           r.ridx (nel) = m1.ridx (i); \
                           r.data (nel++) = true; \
@@ -1016,7 +1016,7 @@
                 octave_idx_type e2 = m2.cidx (j+1); \
                 while (i1 < e1 || i2 < e2) \
                   { \
-                    if (i1 == e1 || (i2 < e2 && m1.ridx(i1) > m2.ridx(i2))) \
+                    if (i1 == e1 || (i2 < e2 && m1.ridx (i1) > m2.ridx (i2))) \
                       { \
                         if (LHS_ZERO OP m2.data (i2) != RHS_ZERO) \
                           { \
@@ -1025,7 +1025,7 @@
                           } \
                         i2++; \
                       } \
-                    else if (i2 == e2 || m1.ridx(i1) < m2.ridx(i2)) \
+                    else if (i2 == e2 || m1.ridx (i1) < m2.ridx (i2)) \
                       { \
                         if (m1.data (i1) != LHS_ZERO OP RHS_ZERO) \
                           { \
@@ -1036,7 +1036,7 @@
                       } \
                     else \
                       { \
-                        if (m1.data (i1) != LHS_ZERO OP m2.data(i2) != RHS_ZERO) \
+                        if (m1.data (i1) != LHS_ZERO OP m2.data (i2) != RHS_ZERO) \
                           { \
                             r.ridx (nel) = m1.ridx (i1); \
                             r.data (nel++) = true; \
@@ -1091,7 +1091,7 @@
     octave_idx_type m2_nc = m2.cols (); \
  \
     if (m2_nr == 1 && m2_nc == 1) \
-      r = R (m1 OP m2.elem(0,0)); \
+      r = R (m1 OP m2.elem (0,0)); \
     else if (m1_nr != m2_nr || m1_nc != m2_nc) \
       gripe_nonconformant (#F, m1_nr, m1_nc, m2_nr, m2_nc); \
     else \
@@ -1114,7 +1114,7 @@
     octave_idx_type m2_nc = m2.cols (); \
  \
     if (m2_nr == 1 && m2_nc == 1) \
-      r = R (m1 OP m2.elem(0,0)); \
+      r = R (m1 OP m2.elem (0,0)); \
     else if (m1_nr != m2_nr || m1_nc != m2_nc) \
       gripe_nonconformant (#F, m1_nr, m1_nc, m2_nr, m2_nc); \
     else \
@@ -1127,18 +1127,18 @@
             for (octave_idx_type j = 0, k = 0; j < m2_nc; j++) \
               { \
                 octave_quit (); \
-                for (octave_idx_type i = m2.cidx(j); i < m2.cidx(j+1); i++) \
+                for (octave_idx_type i = m2.cidx (j); i < m2.cidx (j+1); i++) \
                   { \
-                    octave_idx_type mri = m2.ridx(i); \
-                    R::element_type x = m1(mri, j) OP m2.data(i); \
+                    octave_idx_type mri = m2.ridx (i); \
+                    R::element_type x = m1(mri, j) OP m2.data (i); \
                     if (x != 0.0) \
                       { \
-                        r.xdata(k) = x; \
-                        r.xridx(k) = m2.ridx(i); \
+                        r.xdata (k) = x; \
+                        r.xridx (k) = m2.ridx (i); \
                         k++; \
                       } \
                   } \
-                r.xcidx(j+1) = k; \
+                r.xcidx (j+1) = k; \
               } \
             r.maybe_compress (false); \
             return r; \
@@ -1182,7 +1182,7 @@
     octave_idx_type m2_nc = m2.cols (); \
     \
     if (m2_nr == 1 && m2_nc == 1) \
-      r = SparseBoolMatrix (F (m1, m2.elem(0,0))); \
+      r = SparseBoolMatrix (F (m1, m2.elem (0,0))); \
     else if (m1_nr == m2_nr && m1_nc == m2_nc) \
       { \
         if (m1_nr != 0 || m1_nc != 0) \
@@ -1191,7 +1191,7 @@
             octave_idx_type nel = 0; \
             for (octave_idx_type j = 0; j < m1_nc; j++) \
               for (octave_idx_type i = 0; i < m1_nr; i++) \
-                if (C1 (m1.elem(i, j)) OP C2 (m2.elem(i, j))) \
+                if (C1 (m1.elem (i, j)) OP C2 (m2.elem (i, j))) \
                   nel++; \
             \
             r = SparseBoolMatrix (m1_nr, m1_nc, nel); \
@@ -1202,14 +1202,14 @@
               { \
                 for (octave_idx_type i = 0; i < m1_nr; i++) \
                   { \
-                    bool el = C1 (m1.elem(i, j)) OP C2 (m2.elem(i, j)); \
+                    bool el = C1 (m1.elem (i, j)) OP C2 (m2.elem (i, j)); \
                     if (el) \
                       { \
-                        r.data(ii) = el; \
-                        r.ridx(ii++) = i; \
+                        r.data (ii) = el; \
+                        r.ridx (ii++) = i; \
                       } \
                   } \
-                r.cidx(j+1) = ii; \
+                r.cidx (j+1) = ii; \
               } \
           } \
       }       \
@@ -1250,7 +1250,7 @@
     octave_idx_type m2_nc = m2.cols (); \
     \
     if (m2_nr == 1 && m2_nc == 1) \
-      r = SparseBoolMatrix  (F (m1, m2.elem(0,0))); \
+      r = SparseBoolMatrix (F (m1, m2.elem (0,0))); \
     else if (m1_nr == m2_nr && m1_nc == m2_nc) \
       { \
         if (m1_nr != 0 || m1_nc != 0) \
@@ -1259,8 +1259,8 @@
             octave_idx_type nel = 0; \
             for (octave_idx_type j = 0; j < m1_nc; j++) \
               for (octave_idx_type i = 0; i < m1_nr; i++) \
-                if ((m1.elem(i, j) != LHS_ZERO) \
-                    OP (m2.elem(i, j) != RHS_ZERO)) \
+                if ((m1.elem (i, j) != LHS_ZERO) \
+                    OP (m2.elem (i, j) != RHS_ZERO)) \
                   nel++; \
             \
             r = SparseBoolMatrix (m1_nr, m1_nc, nel); \
@@ -1271,15 +1271,15 @@
               { \
                 for (octave_idx_type i = 0; i < m1_nr; i++) \
                   { \
-                    bool el = (m1.elem(i, j) != LHS_ZERO) \
-                      OP (m2.elem(i, j) != RHS_ZERO);     \
+                    bool el = (m1.elem (i, j) != LHS_ZERO) \
+                      OP (m2.elem (i, j) != RHS_ZERO);     \
                     if (el) \
                       { \
-                        r.data(ii) = el; \
-                        r.ridx(ii++) = i; \
+                        r.data (ii) = el; \
+                        r.ridx (ii++) = i; \
                       } \
                   } \
-                r.cidx(j+1) = ii; \
+                r.cidx (j+1) = ii; \
               } \
           } \
       }       \
@@ -1324,7 +1324,7 @@
     octave_idx_type m2_nc = m2.cols (); \
  \
     if (m1_nr == 1 && m1_nc == 1) \
-      r = R (m1.elem(0,0) OP m2); \
+      r = R (m1.elem (0,0) OP m2); \
     else if (m1_nr != m2_nr || m1_nc != m2_nc) \
       gripe_nonconformant (#F, m1_nr, m1_nc, m2_nr, m2_nc); \
     else \
@@ -1355,7 +1355,7 @@
     octave_idx_type m2_nc = m2.cols (); \
  \
     if (m1_nr == 1 && m1_nc == 1) \
-      r = R (m1.elem(0,0) OP m2); \
+      r = R (m1.elem (0,0) OP m2); \
     else if (m1_nr != m2_nr || m1_nc != m2_nc) \
       gripe_nonconformant (#F, m1_nr, m1_nc, m2_nr, m2_nc); \
     else \
@@ -1368,18 +1368,18 @@
             for (octave_idx_type j = 0, k = 0; j < m1_nc; j++) \
               { \
                 octave_quit (); \
-                for (octave_idx_type i = m1.cidx(j); i < m1.cidx(j+1); i++) \
+                for (octave_idx_type i = m1.cidx (j); i < m1.cidx (j+1); i++) \
                   { \
-                    octave_idx_type mri = m1.ridx(i); \
-                    R::element_type x = m1.data(i) OP m2(mri, j); \
+                    octave_idx_type mri = m1.ridx (i); \
+                    R::element_type x = m1.data (i) OP m2 (mri, j); \
                     if (x != 0.0) \
                       { \
-                        r.xdata(k) = x; \
-                        r.xridx(k) = m1.ridx(i); \
+                        r.xdata (k) = x; \
+                        r.xridx (k) = m1.ridx (i); \
                         k++; \
                       } \
                   } \
-                r.xcidx(j+1) = k; \
+                r.xcidx (j+1) = k; \
               } \
             r.maybe_compress (false); \
             return r; \
@@ -1422,7 +1422,7 @@
     octave_idx_type m2_nc = m2.cols (); \
     \
     if (m1_nr == 1 && m1_nc == 1) \
-      r = SparseBoolMatrix (F (m1.elem(0,0), m2)); \
+      r = SparseBoolMatrix (F (m1.elem (0,0), m2)); \
     else if (m1_nr == m2_nr && m1_nc == m2_nc) \
       { \
         if (m1_nr != 0 || m1_nc != 0) \
@@ -1431,7 +1431,7 @@
             octave_idx_type nel = 0; \
             for (octave_idx_type j = 0; j < m1_nc; j++) \
               for (octave_idx_type i = 0; i < m1_nr; i++) \
-                if (C1 (m1.elem(i, j)) OP C2 (m2.elem(i, j))) \
+                if (C1 (m1.elem (i, j)) OP C2 (m2.elem (i, j))) \
                   nel++; \
             \
             r = SparseBoolMatrix (m1_nr, m1_nc, nel); \
@@ -1442,14 +1442,14 @@
               { \
                 for (octave_idx_type i = 0; i < m1_nr; i++) \
                   { \
-                    bool el = C1 (m1.elem(i, j)) OP C2 (m2.elem(i, j)); \
+                    bool el = C1 (m1.elem (i, j)) OP C2 (m2.elem (i, j)); \
                     if (el) \
                       { \
-                        r.data(ii) = el; \
-                        r.ridx(ii++) = i; \
+                        r.data (ii) = el; \
+                        r.ridx (ii++) = i; \
                       } \
                   } \
-                r.cidx(j+1) = ii; \
+                r.cidx (j+1) = ii; \
               } \
           } \
       }       \
@@ -1490,7 +1490,7 @@
     octave_idx_type m2_nc = m2.cols (); \
     \
     if (m1_nr == 1 && m1_nc == 1) \
-      r = SparseBoolMatrix (F (m1.elem(0,0), m2)); \
+      r = SparseBoolMatrix (F (m1.elem (0,0), m2)); \
     else if (m1_nr == m2_nr && m1_nc == m2_nc) \
       { \
         if (m1_nr != 0 || m1_nc != 0) \
@@ -1499,8 +1499,8 @@
             octave_idx_type nel = 0; \
             for (octave_idx_type j = 0; j < m1_nc; j++) \
               for (octave_idx_type i = 0; i < m1_nr; i++) \
-                if ((m1.elem(i, j) != LHS_ZERO) \
-                    OP (m2.elem(i, j) != RHS_ZERO)) \
+                if ((m1.elem (i, j) != LHS_ZERO) \
+                    OP (m2.elem (i, j) != RHS_ZERO)) \
                   nel++; \
             \
             r = SparseBoolMatrix (m1_nr, m1_nc, nel); \
@@ -1511,15 +1511,15 @@
               { \
                 for (octave_idx_type i = 0; i < m1_nr; i++) \
                   { \
-                    bool el = (m1.elem(i, j) != LHS_ZERO) \
-                      OP (m2.elem(i, j) != RHS_ZERO);     \
+                    bool el = (m1.elem (i, j) != LHS_ZERO) \
+                      OP (m2.elem (i, j) != RHS_ZERO);     \
                     if (el) \
                       { \
-                        r.data(ii) = el; \
-                        r.ridx(ii++) = i; \
+                        r.data (ii) = el; \
+                        r.ridx (ii++) = i; \
                       } \
                   } \
-                r.cidx(j+1) = ii; \
+                r.cidx (j+1) = ii; \
               } \
           } \
       }       \
@@ -1565,30 +1565,30 @@
               ELT_TYPE t = ELT_TYPE (); \
               for (octave_idx_type j = cidx (i); j < cidx (i+1); j++)   \
                 { \
-                  t += data(j); \
+                  t += data (j); \
                   if (t != ELT_TYPE ()) \
                     { \
-                      if (j == cidx(i+1) - 1) \
-                        nel += nr - ridx(j);  \
+                      if (j == cidx (i+1) - 1) \
+                        nel += nr - ridx (j);  \
                       else \
-                        nel += ridx(j+1) - ridx(j); \
+                        nel += ridx (j+1) - ridx (j); \
                     } \
                 } \
             } \
           retval = RET_TYPE (nr, nc, nel); \
-          retval.cidx(0) = 0; \
+          retval.cidx (0) = 0; \
           octave_idx_type ii = 0; \
           for (octave_idx_type i = 0; i < nc; i++) \
             { \
               ELT_TYPE t = ELT_TYPE (); \
               for (octave_idx_type j = cidx (i); j < cidx (i+1); j++)   \
                 { \
-                  t += data(j); \
+                  t += data (j); \
                   if (t != ELT_TYPE ()) \
                     { \
-                      if (j == cidx(i+1) - 1) \
+                      if (j == cidx (i+1) - 1) \
                         { \
-                          for (octave_idx_type k = ridx(j); k < nr; k++) \
+                          for (octave_idx_type k = ridx (j); k < nr; k++) \
                             { \
                                retval.data (ii) = t; \
                                retval.ridx (ii++) = k; \
@@ -1596,7 +1596,7 @@
                         } \
                       else \
                         { \
-                          for (octave_idx_type k = ridx(j); k < ridx(j+1); k++) \
+                          for (octave_idx_type k = ridx (j); k < ridx (j+1); k++) \
                             { \
                                retval.data (ii) = t; \
                                retval.ridx (ii++) = k; \
@@ -1604,7 +1604,7 @@
                         } \
                     } \
                 } \
-              retval.cidx(i+1) = ii; \
+              retval.cidx (i+1) = ii; \
             } \
         } \
     } \
@@ -1634,7 +1634,7 @@
               octave_idx_type jj = 0; \
               for (octave_idx_type j = cidx (i); j < cidx (i+1); j++) \
                 { \
-                  if (jj == ridx(j)) \
+                  if (jj == ridx (j)) \
                     { \
                       nel++; \
                       jj++; \
@@ -1644,7 +1644,7 @@
                 } \
             } \
           retval = RET_TYPE (nr, nc, nel); \
-          retval.cidx(0) = 0; \
+          retval.cidx (0) = 0; \
           octave_idx_type ii = 0; \
           for (octave_idx_type i = 0; i < nc; i++) \
             { \
@@ -1652,16 +1652,16 @@
               octave_idx_type jj = 0; \
               for (octave_idx_type j = cidx (i); j < cidx (i+1); j++) \
                 { \
-                  if (jj == ridx(j)) \
+                  if (jj == ridx (j)) \
                     { \
-                      t *= data(j); \
-                      retval.data(ii) = t; \
-                      retval.ridx(ii++) = jj++; \
+                      t *= data (j); \
+                      retval.data (ii) = t; \
+                      retval.ridx (ii++) = jj++; \
                     } \
                   else \
                     break; \
                 } \
-              retval.cidx(i+1) = ii; \
+              retval.cidx (i+1) = ii; \
             } \
         } \
     } \
@@ -1690,7 +1690,7 @@
             tmp[i] = INIT_VAL; \
           for (j = 0; j < nc; j++) \
             { \
-              for (octave_idx_type i = cidx(j); i < cidx(j + 1); i++) \
+              for (octave_idx_type i = cidx (j); i < cidx (j + 1); i++) \
                 { \
                   ROW_EXPR; \
                 } \
@@ -1700,14 +1700,14 @@
             if (tmp[i] != EL_TYPE ())  \
               nel++ ; \
           retval = RET_TYPE (nr, static_cast<octave_idx_type> (1), nel); \
-          retval.cidx(0) = 0; \
-          retval.cidx(1) = nel; \
+          retval.cidx (0) = 0; \
+          retval.cidx (1) = nel; \
           nel = 0; \
           for (octave_idx_type i = 0; i < nr; i++) \
             if (tmp[i] != EL_TYPE ())  \
               { \
-                retval.data(nel) = tmp[i]; \
-                retval.ridx(nel++) = i; \
+                retval.data (nel) = tmp[i]; \
+                retval.ridx (nel++) = i; \
               } \
         } \
       else \
@@ -1717,7 +1717,7 @@
           for (octave_idx_type j = 0; j < nc; j++) \
             { \
               tmp[j] = INIT_VAL; \
-              for (octave_idx_type i = cidx(j); i < cidx(j + 1); i++) \
+              for (octave_idx_type i = cidx (j); i < cidx (j + 1); i++) \
                 { \
                   COL_EXPR; \
                 } \
@@ -1727,17 +1727,17 @@
             if (tmp[i] != EL_TYPE ())  \
               nel++ ; \
           retval = RET_TYPE (static_cast<octave_idx_type> (1), nc, nel); \
-          retval.cidx(0) = 0; \
+          retval.cidx (0) = 0; \
           nel = 0; \
           for (octave_idx_type i = 0; i < nc; i++) \
             if (tmp[i] != EL_TYPE ())  \
               { \
-                retval.data(nel) = tmp[i]; \
-                retval.ridx(nel++) = 0; \
-                retval.cidx(i+1) = retval.cidx(i) + 1; \
+                retval.data (nel) = tmp[i]; \
+                retval.ridx (nel++) = 0; \
+                retval.cidx (i+1) = retval.cidx (i) + 1; \
               } \
             else \
-              retval.cidx(i+1) = retval.cidx(i); \
+              retval.cidx (i+1) = retval.cidx (i); \
         } \
     } \
   else if (nc == 0 && (nr == 0 || (nr == 1 && dim == -1))) \
@@ -1747,10 +1747,10 @@
           retval = RET_TYPE (static_cast<octave_idx_type> (1), \
                              static_cast<octave_idx_type> (1), \
                              static_cast<octave_idx_type> (1)); \
-          retval.cidx(0) = 0; \
-          retval.cidx(1) = 1; \
-          retval.ridx(0) = 0; \
-          retval.data(0) = MT_RESULT; \
+          retval.cidx (0) = 0; \
+          retval.cidx (1) = 1; \
+          retval.ridx (0) = 0; \
+          retval.data (0) = MT_RESULT; \
         } \
       else \
           retval = RET_TYPE (static_cast<octave_idx_type> (1), \
@@ -1779,12 +1779,12 @@
       if (MT_RESULT) \
         { \
           retval = RET_TYPE (nr, static_cast<octave_idx_type> (1), nr); \
-          retval.cidx(0) = 0; \
-          retval.cidx(1) = nr; \
+          retval.cidx (0) = 0; \
+          retval.cidx (1) = nr; \
           for (octave_idx_type i = 0; i < nr; i++) \
             { \
-              retval.ridx(i) = i; \
-              retval.data(i) = MT_RESULT; \
+              retval.ridx (i) = i; \
+              retval.data (i) = MT_RESULT; \
             } \
         } \
       else \
@@ -1797,7 +1797,7 @@
   return retval
 
 #define SPARSE_REDUCTION_OP_ROW_EXPR(OP) \
-  tmp[ridx(i)] OP data (i)
+  tmp[ridx (i)] OP data (i)
 
 #define SPARSE_REDUCTION_OP_COL_EXPR(OP) \
   tmp[j] OP data (i)
@@ -1814,7 +1814,7 @@
 // loop.
 #define SPARSE_ANY_ALL_OP_ROW_CODE(TEST_OP, TEST_TRUE_VAL) \
   if (data (i) TEST_OP 0.0) \
-    tmp[ridx(i)] = TEST_TRUE_VAL; \
+    tmp[ridx (i)] = TEST_TRUE_VAL; \
 
 #define SPARSE_ANY_ALL_OP_COL_CODE(TEST_OP, TEST_TRUE_VAL) \
   if (data (i) TEST_OP 0.0) \
@@ -1834,7 +1834,7 @@
     return transpose (). all (0). transpose (); \
   else \
     { \
-      SPARSE_ANY_ALL_OP (DIM, (cidx(j+1) - cidx(j) < nr ? false : true), \
+      SPARSE_ANY_ALL_OP (DIM, (cidx (j+1) - cidx (j) < nr ? false : true), \
                          true, ==, false); \
     }
 
@@ -1849,20 +1849,20 @@
   \
   if (nr == 1 && nc == 1) \
    { \
-     RET_EL_TYPE s = m.elem(0,0); \
+     RET_EL_TYPE s = m.elem (0,0); \
      octave_idx_type nz = a.nnz (); \
      RET_TYPE r (a_nr, a_nc, nz); \
      \
      for (octave_idx_type i = 0; i < nz; i++) \
        { \
          octave_quit (); \
-         r.data(i) = s * a.data(i); \
-         r.ridx(i) = a.ridx(i); \
+         r.data (i) = s * a.data (i); \
+         r.ridx (i) = a.ridx (i); \
        } \
      for (octave_idx_type i = 0; i < a_nc + 1; i++) \
        { \
          octave_quit (); \
-         r.cidx(i) = a.cidx(i); \
+         r.cidx (i) = a.cidx (i); \
        } \
      \
      r.maybe_compress (true); \
@@ -1870,20 +1870,20 @@
    } \
   else if (a_nr == 1 && a_nc == 1) \
    { \
-     RET_EL_TYPE s = a.elem(0,0); \
+     RET_EL_TYPE s = a.elem (0,0); \
      octave_idx_type nz = m.nnz (); \
      RET_TYPE r (nr, nc, nz); \
      \
      for (octave_idx_type i = 0; i < nz; i++) \
        { \
          octave_quit (); \
-         r.data(i) = m.data(i) * s; \
-         r.ridx(i) = m.ridx(i); \
+         r.data (i) = m.data (i) * s; \
+         r.ridx (i) = m.ridx (i); \
        } \
      for (octave_idx_type i = 0; i < nc + 1; i++) \
        { \
          octave_quit (); \
-         r.cidx(i) = m.cidx(i); \
+         r.cidx (i) = m.cidx (i); \
        } \
      \
      r.maybe_compress (true); \
@@ -1900,26 +1900,26 @@
       RET_TYPE retval (nr, a_nc, static_cast<octave_idx_type> (0)); \
       for (octave_idx_type i = 0; i < nr; i++) \
         w[i] = 0; \
-      retval.xcidx(0) = 0; \
+      retval.xcidx (0) = 0; \
       \
       octave_idx_type nel = 0; \
       \
       for (octave_idx_type i = 0; i < a_nc; i++) \
         { \
-          for (octave_idx_type j = a.cidx(i); j < a.cidx(i+1); j++) \
+          for (octave_idx_type j = a.cidx (i); j < a.cidx (i+1); j++) \
             { \
-              octave_idx_type  col = a.ridx(j); \
-              for (octave_idx_type k = m.cidx(col) ; k < m.cidx(col+1); k++) \
+              octave_idx_type  col = a.ridx (j); \
+              for (octave_idx_type k = m.cidx (col) ; k < m.cidx (col+1); k++) \
                 { \
-                  if (w[m.ridx(k)] < i + 1) \
+                  if (w[m.ridx (k)] < i + 1) \
                     { \
-                      w[m.ridx(k)] = i + 1; \
+                      w[m.ridx (k)] = i + 1; \
                       nel++; \
                     } \
                   octave_quit (); \
                 } \
             } \
-          retval.xcidx(i+1) = nel; \
+          retval.xcidx (i+1) = nel; \
         } \
       \
       if (nel == 0) \
@@ -1951,57 +1951,57 @@
           \
           for (octave_idx_type i = 0; i < a_nc ; i++) \
             { \
-              if (retval.xcidx(i+1) - retval.xcidx(i) > n_per_col) \
+              if (retval.xcidx (i+1) - retval.xcidx (i) > n_per_col) \
                 { \
-                  for (octave_idx_type j = a.cidx(i); j < a.cidx(i+1); j++) \
+                  for (octave_idx_type j = a.cidx (i); j < a.cidx (i+1); j++) \
                     { \
-                      octave_idx_type col = a.ridx(j); \
-                      EL_TYPE tmpval = a.data(j); \
-                      for (octave_idx_type k = m.cidx(col) ; \
-                           k < m.cidx(col+1); k++) \
+                      octave_idx_type col = a.ridx (j); \
+                      EL_TYPE tmpval = a.data (j); \
+                      for (octave_idx_type k = m.cidx (col) ; \
+                           k < m.cidx (col+1); k++) \
                         { \
                           octave_quit (); \
-                          octave_idx_type row = m.ridx(k); \
+                          octave_idx_type row = m.ridx (k); \
                           if (w[row] < i + 1) \
                             { \
                               w[row] = i + 1; \
-                              Xcol[row] = tmpval * m.data(k); \
+                              Xcol[row] = tmpval * m.data (k); \
                             } \
                           else \
-                            Xcol[row] += tmpval * m.data(k); \
+                            Xcol[row] += tmpval * m.data (k); \
                         } \
                     } \
                   for (octave_idx_type k = 0; k < nr; k++) \
                     if (w[k] == i + 1) \
                       { \
-                        retval.xdata(ii) = Xcol[k]; \
-                        retval.xridx(ii++) = k; \
+                        retval.xdata (ii) = Xcol[k]; \
+                        retval.xridx (ii++) = k; \
                       } \
                 } \
               else \
                 { \
-                  for (octave_idx_type j = a.cidx(i); j < a.cidx(i+1); j++) \
+                  for (octave_idx_type j = a.cidx (i); j < a.cidx (i+1); j++) \
                     { \
-                      octave_idx_type col = a.ridx(j); \
-                      EL_TYPE tmpval = a.data(j); \
-                      for (octave_idx_type k = m.cidx(col) ; \
-                          k < m.cidx(col+1); k++) \
+                      octave_idx_type col = a.ridx (j); \
+                      EL_TYPE tmpval = a.data (j); \
+                      for (octave_idx_type k = m.cidx (col) ; \
+                          k < m.cidx (col+1); k++) \
                         { \
                           octave_quit (); \
-                          octave_idx_type row = m.ridx(k); \
+                          octave_idx_type row = m.ridx (k); \
                           if (w[row] < i + 1) \
                             { \
                               w[row] = i + 1; \
-                              retval.xridx(ii++) = row;\
-                              Xcol[row] = tmpval * m.data(k); \
+                              retval.xridx (ii++) = row;\
+                              Xcol[row] = tmpval * m.data (k); \
                             } \
                           else \
-                            Xcol[row] += tmpval * m.data(k); \
+                            Xcol[row] += tmpval * m.data (k); \
                         } \
                     } \
-                  sort.sort (ri + retval.xcidx(i), ii - retval.xcidx(i)); \
-                  for (octave_idx_type k = retval.xcidx(i); k < ii; k++) \
-                    retval.xdata(k) = Xcol[retval.xridx(k)]; \
+                  sort.sort (ri + retval.xcidx (i), ii - retval.xcidx (i)); \
+                  for (octave_idx_type k = retval.xcidx (i); k < ii; k++) \
+                    retval.xdata (k) = Xcol[retval.xridx (k)]; \
                 }  \
             } \
           retval.maybe_compress (true);\
@@ -2036,9 +2036,9 @@
             { \
               octave_quit (); \
               \
-              EL_TYPE tmpval = a.elem(j,i); \
-              for (octave_idx_type k = m.cidx(j) ; k < m.cidx(j+1); k++) \
-                retval.elem (m.ridx(k),i) += tmpval * m.data(k); \
+              EL_TYPE tmpval = a.elem (j,i); \
+              for (octave_idx_type k = m.cidx (j) ; k < m.cidx (j+1); k++) \
+                retval.elem (m.ridx (k),i) += tmpval * m.data (k); \
             } \
         } \
       return retval; \
@@ -2053,7 +2053,7 @@
   \
   if (nr == 1 && nc == 1) \
     { \
-      RET_TYPE retval = CONJ_OP (m.elem(0,0)) * a; \
+      RET_TYPE retval = CONJ_OP (m.elem (0,0)) * a; \
       return retval; \
     } \
   else if (nr != a_nr) \
@@ -2072,8 +2072,8 @@
               octave_quit (); \
               \
               EL_TYPE acc = ZERO; \
-              for (octave_idx_type k = m.cidx(j) ; k < m.cidx(j+1); k++) \
-                acc += a.elem (m.ridx(k),i) * CONJ_OP (m.data(k)); \
+              for (octave_idx_type k = m.cidx (j) ; k < m.cidx (j+1); k++) \
+                acc += a.elem (m.ridx (k),i) * CONJ_OP (m.data (k)); \
               retval.xelem (j,i) = acc; \
             } \
         } \
@@ -2104,13 +2104,13 @@
       for (octave_idx_type i = 0; i < a_nc ; i++) \
         { \
           octave_quit (); \
-          for (octave_idx_type j = a.cidx(i); j < a.cidx(i+1); j++) \
+          for (octave_idx_type j = a.cidx (i); j < a.cidx (i+1); j++) \
             { \
-              octave_idx_type col = a.ridx(j); \
-              EL_TYPE tmpval = a.data(j); \
+              octave_idx_type col = a.ridx (j); \
+              EL_TYPE tmpval = a.data (j); \
               \
               for (octave_idx_type k = 0 ; k < nr; k++) \
-                retval.xelem (k,i) += tmpval * m.elem(k,col); \
+                retval.xelem (k,i) += tmpval * m.elem (k,col); \
             } \
         } \
       return retval; \
@@ -2125,7 +2125,7 @@
   \
   if (a_nr == 1 && a_nc == 1) \
     { \
-      RET_TYPE retval = m * CONJ_OP (a.elem(0,0)); \
+      RET_TYPE retval = m * CONJ_OP (a.elem (0,0)); \
       return retval; \
     } \
   else if (nc != a_nc) \
@@ -2140,12 +2140,12 @@
       for (octave_idx_type i = 0; i < a_nc ; i++) \
         { \
           octave_quit (); \
-          for (octave_idx_type j = a.cidx(i); j < a.cidx(i+1); j++) \
+          for (octave_idx_type j = a.cidx (i); j < a.cidx (i+1); j++) \
             { \
-              octave_idx_type col = a.ridx(j); \
-              EL_TYPE tmpval = CONJ_OP (a.data(j)); \
+              octave_idx_type col = a.ridx (j); \
+              EL_TYPE tmpval = CONJ_OP (a.data (j)); \
               for (octave_idx_type k = 0 ; k < nr; k++) \
-                retval.xelem (k,col) += tmpval * m.elem(k,i); \
+                retval.xelem (k,col) += tmpval * m.elem (k,i); \
             } \
         } \
       return retval; \
--- a/liboctave/Sparse-perm-op-defs.h
+++ b/liboctave/Sparse-perm-op-defs.h
@@ -43,15 +43,15 @@
     {
       octave_quit ();
 
-      OCTAVE_LOCAL_BUFFER (octave_idx_type, sidx, r.xcidx(j+1) - r.xcidx(j));
-      for (octave_idx_type i = r.xcidx(j), ii = 0; i < r.xcidx(j+1); i++)
+      OCTAVE_LOCAL_BUFFER (octave_idx_type, sidx, r.xcidx (j+1) - r.xcidx (j));
+      for (octave_idx_type i = r.xcidx (j), ii = 0; i < r.xcidx (j+1); i++)
         {
           sidx[ii++]=i;
           r.xridx (i) = pcol[a.ridx (i)];
         }
-      sort.sort (r.xridx () + r.xcidx(j), sidx, r.xcidx(j+1) - r.xcidx(j));
-      for (octave_idx_type i = r.xcidx(j), ii = 0; i < r.xcidx(j+1); i++)
-        r.xdata(i) = a.data (sidx[ii++]);
+      sort.sort (r.xridx () + r.xcidx (j), sidx, r.xcidx (j+1) - r.xcidx (j));
+      for (octave_idx_type i = r.xcidx (j), ii = 0; i < r.xcidx (j+1); i++)
+        r.xdata (i) = a.data (sidx[ii++]);
     }
 
   return r;
@@ -71,7 +71,7 @@
     {
       // Form the column permutation and then call the colpm_sm routine.
       const octave_idx_type *prow = p.pvec ().data ();
-      OCTAVE_LOCAL_BUFFER(octave_idx_type, pcol, nr);
+      OCTAVE_LOCAL_BUFFER (octave_idx_type, pcol, nr);
       for (octave_idx_type i = 0; i < nr; ++i)
         pcol[prow[i]] = i;
       return octinternal_do_mul_colpm_sm (pcol, a);
--- a/liboctave/Sparse.cc
+++ b/liboctave/Sparse.cc
@@ -66,12 +66,12 @@
   if (a.is_row_perm ())
     {
       for (octave_idx_type i = 0; i < n; i++)
-        ridx (pv (i)) = i;
+        ridx (pv(i)) = i;
     }
   else
     {
       for (octave_idx_type i = 0; i < n; i++)
-        ridx (i) = pv (i);
+        ridx (i) = pv(i);
     }
 
   for (octave_idx_type i = 0; i < n; i++)
@@ -223,7 +223,7 @@
     {
       rep = new typename Sparse<T>::SparseRep (nr, nc, 0);
       for (octave_idx_type j = 0; j < nc+1; j++)
-        xcidx(j) = 0;
+        xcidx (j) = 0;
     }
 }
 
@@ -264,21 +264,21 @@
       rep = new typename Sparse<T>::SparseRep (new_nr, new_nc, new_nzmx);
 
       octave_idx_type kk = 0;
-      xcidx(0) = 0;
+      xcidx (0) = 0;
       for (octave_idx_type i = 0; i < old_nc; i++)
-        for (octave_idx_type j = a.cidx(i); j < a.cidx(i+1); j++)
+        for (octave_idx_type j = a.cidx (i); j < a.cidx (i+1); j++)
           {
-            octave_idx_type tmp = i * old_nr + a.ridx(j);
+            octave_idx_type tmp = i * old_nr + a.ridx (j);
             octave_idx_type ii = tmp % new_nr;
             octave_idx_type jj = (tmp - ii) / new_nr;
             for (octave_idx_type k = kk; k < jj; k++)
-              xcidx(k+1) = j;
+              xcidx (k+1) = j;
             kk = jj;
-            xdata(j) = a.data(j);
-            xridx(j) = ii;
+            xdata (j) = a.data (j);
+            xridx (j) = ii;
           }
       for (octave_idx_type k = kk; k < new_nc; k++)
-        xcidx(k+1) = new_nzmx;
+        xcidx (k+1) = new_nzmx;
     }
 }
 
@@ -323,11 +323,11 @@
       if (n == 1 && a(0) != T ())
         {
           change_capacity (nzm > 1 ? nzm : 1);
-          xcidx(0) = 0;
-          xridx(0) = r(0);
-          xdata(0) = a(0);
+          xcidx (0) = 0;
+          xridx (0) = r(0);
+          xdata (0) = a(0);
           for (octave_idx_type j = 0; j < nc; j++)
-            xcidx(j+1) = j >= c(0);
+            xcidx (j+1) = j >= c(0);
         }
     }
   else if (a_scalar)
@@ -419,7 +419,7 @@
               sidx[ci[cd[i]+1]++] = rd[i];
 
           // Subsorts. We don't need a stable sort, all values are equal.
-          xcidx(0) = 0;
+          xcidx (0) = 0;
           for (octave_idx_type j = 0; j < nc; j++)
             {
               std::sort (sidx + ci[j], sidx + ci[j+1]);
@@ -435,7 +435,7 @@
                     }
                 }
               // Set column pointer.
-              xcidx(j+1) = xcidx(j) + nzj;
+              xcidx (j+1) = xcidx (j) + nzj;
             }
 
           change_capacity (nzm > xcidx (nc) ? nzm : xcidx (nc));
@@ -495,8 +495,8 @@
         new_nz += rd[i-1] != rd[i];
       // Allocate result.
       change_capacity (nzm > new_nz ? nzm : new_nz);
-      xcidx(0) = 0;
-      xcidx(1) = new_nz;
+      xcidx (0) = 0;
+      xcidx (1) = new_nz;
       octave_idx_type *rri = ridx ();
       T *rrd = data ();
 
@@ -566,7 +566,7 @@
         }
 
       // Subsorts. We don't need a stable sort, the second index stabilizes it.
-      xcidx(0) = 0;
+      xcidx (0) = 0;
       for (octave_idx_type j = 0; j < nc; j++)
         {
           std::sort (spairs + ci[j], spairs + ci[j+1]);
@@ -582,7 +582,7 @@
                 }
             }
           // Set column pointer.
-          xcidx(j+1) = xcidx(j) + nzj;
+          xcidx (j+1) = xcidx (j) + nzj;
         }
 
       change_capacity (nzm > xcidx (nc) ? nzm : xcidx (nc));
@@ -652,16 +652,16 @@
       rep = new typename Sparse<T>::SparseRep (nr, nc, new_nzmx);
 
       octave_idx_type ii = 0;
-      xcidx(0) = 0;
+      xcidx (0) = 0;
       for (octave_idx_type j = 0; j < nc; j++)
         {
           for (octave_idx_type i = 0; i < nr; i++)
             if (a.elem (i,j) != T ())
               {
-                xdata(ii) = a.elem (i,j);
-                xridx(ii++) = i;
+                xdata (ii) = a.elem (i,j);
+                xridx (ii++) = i;
               }
-          xcidx(j+1) = ii;
+          xcidx (j+1) = ii;
         }
     }
 }
@@ -833,21 +833,21 @@
           retval = Sparse<T> (new_nr, new_nc, new_nnz);
 
           octave_idx_type kk = 0;
-          retval.xcidx(0) = 0;
+          retval.xcidx (0) = 0;
           for (octave_idx_type i = 0; i < old_nc; i++)
-            for (octave_idx_type j = cidx(i); j < cidx(i+1); j++)
+            for (octave_idx_type j = cidx (i); j < cidx (i+1); j++)
               {
-                octave_idx_type tmp = i * old_nr + ridx(j);
+                octave_idx_type tmp = i * old_nr + ridx (j);
                 octave_idx_type ii = tmp % new_nr;
                 octave_idx_type jj = (tmp - ii) / new_nr;
                 for (octave_idx_type k = kk; k < jj; k++)
-                  retval.xcidx(k+1) = j;
+                  retval.xcidx (k+1) = j;
                 kk = jj;
-                retval.xdata(j) = data(j);
-                retval.xridx(j) = ii;
+                retval.xdata (j) = data (j);
+                retval.xridx (j) = ii;
               }
           for (octave_idx_type k = kk; k < new_nc; k++)
-            retval.xcidx(k+1) = new_nnz;
+            retval.xcidx (k+1) = new_nnz;
         }
       else
         {
@@ -949,14 +949,14 @@
       octave_idx_type i = 0, k = 0;
       for (octave_idx_type j = 1; j <= rep->ncols; j++)
         {
-          octave_idx_type u = xcidx(j);
+          octave_idx_type u = xcidx (j);
           for (i = i; i < u; i++)
-            if (xridx(i) < r)
+            if (xridx (i) < r)
               {
-                xdata(k) = xdata(i);
-                xridx(k++) = xridx(i);
+                xdata (k) = xdata (i);
+                xridx (k++) = xridx (i);
               }
-          xcidx(j) = k;
+          xcidx (j) = k;
         }
     }
 
@@ -994,69 +994,69 @@
     }
 
   // First count the number of elements in the final array
-  octave_idx_type nel = cidx(c) + a.nnz ();
+  octave_idx_type nel = cidx (c) + a.nnz ();
 
   if (c + a_cols < nc)
-    nel += cidx(nc) - cidx(c + a_cols);
+    nel += cidx (nc) - cidx (c + a_cols);
 
   for (octave_idx_type i = c; i < c + a_cols; i++)
-    for (octave_idx_type j = cidx(i); j < cidx(i+1); j++)
-      if (ridx(j) < r || ridx(j) >= r + a_rows)
+    for (octave_idx_type j = cidx (i); j < cidx (i+1); j++)
+      if (ridx (j) < r || ridx (j) >= r + a_rows)
         nel++;
 
   Sparse<T> tmp (*this);
   --rep->count;
   rep = new typename Sparse<T>::SparseRep (nr, nc, nel);
 
-  for (octave_idx_type i = 0; i < tmp.cidx(c); i++)
+  for (octave_idx_type i = 0; i < tmp.cidx (c); i++)
     {
-      data(i) = tmp.data(i);
-      ridx(i) = tmp.ridx(i);
+      data (i) = tmp.data (i);
+      ridx (i) = tmp.ridx (i);
     }
   for (octave_idx_type i = 0; i < c + 1; i++)
-    cidx(i) = tmp.cidx(i);
+    cidx (i) = tmp.cidx (i);
 
-  octave_idx_type ii = cidx(c);
+  octave_idx_type ii = cidx (c);
 
   for (octave_idx_type i = c; i < c + a_cols; i++)
     {
       octave_quit ();
 
-      for (octave_idx_type j = tmp.cidx(i); j < tmp.cidx(i+1); j++)
-        if (tmp.ridx(j) < r)
+      for (octave_idx_type j = tmp.cidx (i); j < tmp.cidx (i+1); j++)
+        if (tmp.ridx (j) < r)
           {
-            data(ii) = tmp.data(j);
-            ridx(ii++) = tmp.ridx(j);
+            data (ii) = tmp.data (j);
+            ridx (ii++) = tmp.ridx (j);
           }
 
       octave_quit ();
 
-      for (octave_idx_type j = a.cidx(i-c); j < a.cidx(i-c+1); j++)
+      for (octave_idx_type j = a.cidx (i-c); j < a.cidx (i-c+1); j++)
         {
-          data(ii) = a.data(j);
-          ridx(ii++) = r + a.ridx(j);
+          data (ii) = a.data (j);
+          ridx (ii++) = r + a.ridx (j);
         }
 
       octave_quit ();
 
-      for (octave_idx_type j = tmp.cidx(i); j < tmp.cidx(i+1); j++)
-        if (tmp.ridx(j) >= r + a_rows)
+      for (octave_idx_type j = tmp.cidx (i); j < tmp.cidx (i+1); j++)
+        if (tmp.ridx (j) >= r + a_rows)
           {
-            data(ii) = tmp.data(j);
-            ridx(ii++) = tmp.ridx(j);
+            data (ii) = tmp.data (j);
+            ridx (ii++) = tmp.ridx (j);
           }
 
-      cidx(i+1) = ii;
+      cidx (i+1) = ii;
     }
 
   for (octave_idx_type i = c + a_cols; i < nc; i++)
     {
-      for (octave_idx_type j = tmp.cidx(i); j < tmp.cidx(i+1); j++)
+      for (octave_idx_type j = tmp.cidx (i); j < tmp.cidx (i+1); j++)
         {
-          data(ii) = tmp.data(j);
-          ridx(ii++) = tmp.ridx(j);
+          data (ii) = tmp.data (j);
+          ridx (ii++) = tmp.ridx (j);
         }
-      cidx(i+1) = ii;
+      cidx (i+1) = ii;
     }
 
   return *this;
@@ -1100,7 +1100,7 @@
   // retval.xcidx[1:nr] holds row entry *start* offsets for rows 0:(nr-1)
 
   for (octave_idx_type j = 0; j < nc; j++)
-    for (octave_idx_type k = cidx(j); k < cidx(j+1); k++)
+    for (octave_idx_type k = cidx (j); k < cidx (j+1); k++)
       {
         octave_idx_type q = retval.xcidx (ridx (k) + 1)++;
         retval.xridx (q) = j;
@@ -1170,7 +1170,7 @@
           copy_or_memcpy (li, tmp.ridx (), xridx ());
           copy_or_memcpy (nz - ui, tmp.data () + ui, xdata () + li);
           mx_inline_sub (nz - ui, xridx () + li, tmp.ridx () + ui, ub - lb);
-          xcidx(1) = nz_new;
+          xcidx (1) = nz_new;
         }
       else
         {
@@ -1181,11 +1181,11 @@
           octave_idx_type sl = sidx.length (nel), nz_new = 0, j = 0;
           for (octave_idx_type i = 0; i < nz; i++)
             {
-              octave_idx_type r = tmp.ridx(i);
+              octave_idx_type r = tmp.ridx (i);
               for (;j < sl && sj[j] < r; j++) ;
               if (j == sl || sj[j] > r)
                 {
-                  data_new[nz_new] = tmp.data(i);
+                  data_new[nz_new] = tmp.data (i);
                   ridx_new[nz_new++] = r - j;
                 }
             }
@@ -1193,7 +1193,7 @@
           *this = Sparse<T> (nr - sl, 1, nz_new);
           copy_or_memcpy (nz_new, ridx_new, ridx ());
           copy_or_memcpy (nz_new, data_new, xdata ());
-          xcidx(1) = nz_new;
+          xcidx (1) = nz_new;
         }
     }
   else if (nr == 1)
@@ -1203,7 +1203,7 @@
       if (idx.is_cont_range (nc, lb, ub))
         {
           const Sparse<T> tmp = *this;
-          octave_idx_type lbi = tmp.cidx(lb), ubi = tmp.cidx(ub), new_nz = nz - (ubi - lbi);
+          octave_idx_type lbi = tmp.cidx (lb), ubi = tmp.cidx (ub), new_nz = nz - (ubi - lbi);
           *this = Sparse<T> (1, nc - (ub - lb), new_nz);
           copy_or_memcpy (lbi, tmp.data (), data ());
           copy_or_memcpy (nz - ubi, tmp.data () + ubi, xdata () + lbi);
@@ -1253,7 +1253,7 @@
           else
             {
               const Sparse<T> tmp = *this;
-              octave_idx_type lbi = tmp.cidx(lb), ubi = tmp.cidx(ub),
+              octave_idx_type lbi = tmp.cidx (lb), ubi = tmp.cidx (ub),
                 new_nz = nz - (ubi - lbi);
 
               *this = Sparse<T> (nr, nc - (ub - lb), new_nz);
@@ -1296,20 +1296,20 @@
                                  tmpl.nnz () + tmpu.nnz ());
               for (octave_idx_type j = 0, k = 0; j < nc; j++)
                 {
-                  for (octave_idx_type i = tmpl.cidx(j); i < tmpl.cidx(j+1);
+                  for (octave_idx_type i = tmpl.cidx (j); i < tmpl.cidx (j+1);
                        i++)
                     {
-                      xdata(k) = tmpl.data(i);
-                      xridx(k++) = tmpl.ridx(i);
+                      xdata (k) = tmpl.data (i);
+                      xridx (k++) = tmpl.ridx (i);
                     }
-                  for (octave_idx_type i = tmpu.cidx(j); i < tmpu.cidx(j+1);
+                  for (octave_idx_type i = tmpu.cidx (j); i < tmpu.cidx (j+1);
                        i++)
                     {
-                      xdata(k) = tmpu.data(i);
-                      xridx(k++) = tmpu.ridx(i) + lb;
+                      xdata (k) = tmpu.data (i);
+                      xridx (k++) = tmpu.ridx (i) + lb;
                     }
 
-                  xcidx(j+1) = k;
+                  xcidx (j+1) = k;
                 }
             }
         }
@@ -1373,15 +1373,15 @@
 
           for (octave_idx_type i = 0; i < nc; i++)
             {
-              for (octave_idx_type j = cidx(i); j < cidx(i+1); j++)
+              for (octave_idx_type j = cidx (i); j < cidx (i+1); j++)
                 {
-                  retval.xdata(j) = data(j);
-                  retval.xridx(j) = ridx(j) + i * nr;
+                  retval.xdata (j) = data (j);
+                  retval.xridx (j) = ridx (j) + i * nr;
                 }
             }
 
-          retval.xcidx(0) = 0;
-          retval.xcidx(1) = nz;
+          retval.xcidx (0) = 0;
+          retval.xcidx (1) = nz;
         }
     }
   else if (idx.extent (nel) > nel)
@@ -1404,7 +1404,7 @@
       // then want to make a dense matrix with sparse
       // representation. Ok, we'll do it, but you deserve what
       // you get!!
-      retval = Sparse<T> (idx_dims(0), idx_dims(1), nz ? data(0) : T ());
+      retval = Sparse<T> (idx_dims(0), idx_dims(1), nz ? data (0) : T ());
     }
   else if (nc == 1)
     {
@@ -1415,8 +1415,8 @@
         {
           // Scalar index - just a binary lookup.
           octave_idx_type i = lblookup (ridx (), nz, idx(0));
-          if (i < nz && ridx(i) == idx(0))
-            retval = Sparse (1, 1, data(i));
+          if (i < nz && ridx (i) == idx(0))
+            retval = Sparse (1, 1, data (i));
           else
             retval = Sparse (1, 1);
         }
@@ -1431,7 +1431,7 @@
           retval = Sparse<T> (ub - lb, 1, nz_new);
           copy_or_memcpy (nz_new, data () + li, retval.data ());
           mx_inline_sub (nz_new, retval.xridx (), ridx () + li, lb);
-          retval.xcidx(1) = nz_new;
+          retval.xcidx (1) = nz_new;
         }
       else if (idx.is_permutation (nel) && idx.is_vector ())
         {
@@ -1477,15 +1477,15 @@
               for (octave_idx_type i = 0; i < new_nr; i++)
                 {
                   octave_idx_type l = lidx(i, j);
-                  if (l < nz && ridx(l) == idxa(i, j))
+                  if (l < nz && ridx (l) == idxa(i, j))
                     nzj++;
                   else
                     lidx(i, j) = nz;
                 }
-              retval.xcidx(j+1) = retval.xcidx(j) + nzj;
+              retval.xcidx (j+1) = retval.xcidx (j) + nzj;
             }
 
-          retval.change_capacity (retval.xcidx(new_nc));
+          retval.change_capacity (retval.xcidx (new_nc));
 
           // Copy data and set row indices.
           octave_idx_type k = 0;
@@ -1495,8 +1495,8 @@
                 octave_idx_type l = lidx(i, j);
                 if (l < nz)
                   {
-                    retval.data(k) = data(l);
-                    retval.xridx(k++) = i;
+                    retval.data (k) = data (l);
+                    retval.xridx (k++) = i;
                   }
               }
         }
@@ -1505,11 +1505,11 @@
     {
       octave_idx_type lb, ub;
       if (idx.is_scalar ())
-        retval = Sparse<T> (1, 1, elem(0, idx(0)));
+        retval = Sparse<T> (1, 1, elem (0, idx(0)));
       else if (idx.is_cont_range (nel, lb, ub))
         {
           // Special-case a contiguous range.
-          octave_idx_type lbi = cidx(lb), ubi = cidx(ub), new_nz = ubi - lbi;
+          octave_idx_type lbi = cidx (lb), ubi = cidx (ub), new_nz = ubi - lbi;
           retval = Sparse<T> (1, ub - lb, new_nz);
           copy_or_memcpy (new_nz, data () + lbi, retval.data ());
           fill_or_memset (new_nz, static_cast<octave_idx_type> (0), retval.ridx ());
@@ -1583,7 +1583,7 @@
       else if (idx_j.is_cont_range (nc, lb, ub))
         {
           // Special-case a contiguous range.
-          octave_idx_type lbi = cidx(lb), ubi = cidx(ub), new_nz = ubi - lbi;
+          octave_idx_type lbi = cidx (lb), ubi = cidx (ub), new_nz = ubi - lbi;
           retval = Sparse<T> (nr, ub - lb, new_nz);
           copy_or_memcpy (new_nz, data () + lbi, retval.data ());
           copy_or_memcpy (new_nz, ridx () + lbi, retval.ridx ());
@@ -1596,7 +1596,7 @@
           for (octave_idx_type j = 0; j < m; j++)
             {
               octave_idx_type jj = idx_j(j);
-              retval.xcidx(j+1) = retval.xcidx(j) + (cidx(jj+1) - cidx(jj));
+              retval.xcidx (j+1) = retval.xcidx (j) + (cidx (jj+1) - cidx (jj));
             }
 
           retval.change_capacity (retval.xcidx (m));
@@ -1604,8 +1604,8 @@
           // Copy data & indices.
           for (octave_idx_type j = 0; j < m; j++)
             {
-              octave_idx_type ljj = cidx(idx_j(j));
-              octave_idx_type lj = retval.xcidx(j), nzj = retval.xcidx(j+1) - lj;
+              octave_idx_type ljj = cidx (idx_j(j));
+              octave_idx_type lj = retval.xcidx (j), nzj = retval.xcidx (j+1) - lj;
               copy_or_memcpy (nzj, data () + ljj, retval.data () + lj);
               copy_or_memcpy (nzj, ridx () + ljj, retval.ridx () + lj);
             }
@@ -1628,28 +1628,28 @@
       for (octave_idx_type j = 0; j < m; j++)
         {
           octave_quit ();
-          octave_idx_type jj = idx_j(j), lj = cidx(jj), nzj = cidx(jj+1) - cidx(jj);
+          octave_idx_type jj = idx_j(j), lj = cidx (jj), nzj = cidx (jj+1) - cidx (jj);
           // Scalar index - just a binary lookup.
           octave_idx_type i = lblookup (ridx () + lj, nzj, ii);
-          if (i < nzj && ridx(i+lj) == ii)
+          if (i < nzj && ridx (i+lj) == ii)
             {
               ij[j] = i + lj;
-              retval.xcidx(j+1) = retval.xcidx(j) + 1;
+              retval.xcidx (j+1) = retval.xcidx (j) + 1;
             }
           else
-            retval.xcidx(j+1) = retval.xcidx(j);
+            retval.xcidx (j+1) = retval.xcidx (j);
         }
 
-      retval.change_capacity (retval.xcidx(m));
+      retval.change_capacity (retval.xcidx (m));
 
       // Copy data, adjust row indices.
       for (octave_idx_type j = 0; j < m; j++)
         {
-          octave_idx_type i = retval.xcidx(j);
-          if (retval.xcidx(j+1) > i)
+          octave_idx_type i = retval.xcidx (j);
+          if (retval.xcidx (j+1) > i)
             {
-              retval.xridx(i) = 0;
-              retval.xdata(i) = data(ij[j]);
+              retval.xridx (i) = 0;
+              retval.xdata (i) = data (ij[j]);
             }
         }
     }
@@ -1661,15 +1661,15 @@
       for (octave_idx_type j = 0; j < m; j++)
         {
           octave_quit ();
-          octave_idx_type jj = idx_j(j), lj = cidx(jj), nzj = cidx(jj+1) - cidx(jj);
+          octave_idx_type jj = idx_j(j), lj = cidx (jj), nzj = cidx (jj+1) - cidx (jj);
           octave_idx_type lij, uij;
           // Lookup indices.
           li[j] = lij = lblookup (ridx () + lj, nzj, lb) + lj;
           ui[j] = uij = lblookup (ridx () + lj, nzj, ub) + lj;
-          retval.xcidx(j+1) = retval.xcidx(j) + ui[j] - li[j];
+          retval.xcidx (j+1) = retval.xcidx (j) + ui[j] - li[j];
         }
 
-      retval.change_capacity (retval.xcidx(m));
+      retval.change_capacity (retval.xcidx (m));
 
       // Copy data, adjust row indices.
       for (octave_idx_type j = 0, k = 0; j < m; j++)
@@ -1677,8 +1677,8 @@
           octave_quit ();
           for (octave_idx_type i = li[j]; i < ui[j]; i++)
             {
-              retval.xdata(k) = data(i);
-              retval.xridx(k++) = ridx(i) - lb;
+              retval.xdata (k) = data (i);
+              retval.xridx (k++) = ridx (i) - lb;
             }
         }
     }
@@ -1690,7 +1690,7 @@
       for (octave_idx_type j = 0; j < m; j++)
         {
           octave_idx_type jj = idx_j(j);
-          retval.xcidx(j+1) = retval.xcidx(j) + (cidx(jj+1) - cidx(jj));
+          retval.xcidx (j+1) = retval.xcidx (j) + (cidx (jj+1) - cidx (jj));
         }
 
       retval.change_capacity (retval.xcidx (m));
@@ -1703,12 +1703,12 @@
           for (octave_idx_type j = 0; j < m; j++)
             {
               octave_quit ();
-              octave_idx_type jj = idx_j(j), lj = cidx(jj), nzj = cidx(jj+1) - cidx(jj);
-              octave_idx_type li = retval.xcidx(j), uj = lj + nzj - 1;
+              octave_idx_type jj = idx_j(j), lj = cidx (jj), nzj = cidx (jj+1) - cidx (jj);
+              octave_idx_type li = retval.xcidx (j), uj = lj + nzj - 1;
               for (octave_idx_type i = 0; i < nzj; i++)
                 {
-                  retval.xdata(li + i) = data(uj - i); // Copy in reverse order.
-                  retval.xridx(li + i) = nr - 1 - ridx(uj - i); // Ditto with transform.
+                  retval.xdata (li + i) = data (uj - i); // Copy in reverse order.
+                  retval.xridx (li + i) = nr - 1 - ridx (uj - i); // Ditto with transform.
                 }
             }
         }
@@ -1725,11 +1725,11 @@
           for (octave_idx_type j = 0; j < m; j++)
             {
               octave_quit ();
-              octave_idx_type jj = idx_j(j), lj = cidx(jj), nzj = cidx(jj+1) - cidx(jj);
-              octave_idx_type li = retval.xcidx(j);
+              octave_idx_type jj = idx_j(j), lj = cidx (jj), nzj = cidx (jj+1) - cidx (jj);
+              octave_idx_type li = retval.xcidx (j);
               // Scatter the column, transform indices.
               for (octave_idx_type i = 0; i < nzj; i++)
-                scb[rri[li + i] = iinv[ridx(lj + i)]] = data(lj + i);
+                scb[rri[li + i] = iinv[ridx (lj + i)]] = data (lj + i);
 
               octave_quit ();
 
@@ -1738,7 +1738,7 @@
 
               // Gather.
               for (octave_idx_type i = 0; i < nzj; i++)
-                retval.xdata(li + i) = scb[rri[li + i]];
+                retval.xdata (li + i) = scb[rri[li + i]];
             }
         }
 
@@ -1846,7 +1846,7 @@
                   copy_or_memcpy (nz - ui, tmp.ridx () + ui, ridx () + li + rnz);
                 }
 
-              cidx(1) = new_nz;
+              cidx (1) = new_nz;
             }
           else if (idx.is_range () && idx.increment () == -1)
             {
@@ -1866,7 +1866,7 @@
                   octave_idx_type iidx = idx(i);
                   octave_idx_type li = lblookup (ri, nz, iidx);
                   if (li != nz && ri[li] == iidx)
-                    xdata(li) = T ();
+                    xdata (li) = T ();
                 }
 
               maybe_compress (true);
@@ -1985,7 +1985,7 @@
           else if (idx_j.is_cont_range (nc, lb, ub))
             {
               // Special-case a contiguous range.
-              octave_idx_type li = cidx(lb), ui = cidx(ub);
+              octave_idx_type li = cidx (lb), ui = cidx (ub);
               octave_idx_type rnz = rhs.nnz (), new_nz = nz - (ui - li) + rnz;
 
               if (new_nz >= nz && new_nz <= capacity ())
@@ -2051,36 +2051,36 @@
 
               // Assemble column lengths.
               for (octave_idx_type i = 0; i < nc; i++)
-                xcidx(i+1) = tmp.cidx(i+1) - tmp.cidx(i);
+                xcidx (i+1) = tmp.cidx (i+1) - tmp.cidx (i);
 
               for (octave_idx_type i = 0; i < m; i++)
                 {
                   octave_idx_type j =idx_j(i);
                   jsav[j] = i;
-                  xcidx(j+1) = rhs.cidx(i+1) - rhs.cidx(i);
+                  xcidx (j+1) = rhs.cidx (i+1) - rhs.cidx (i);
                 }
 
               // Make cumulative.
               for (octave_idx_type i = 0; i < nc; i++)
-                xcidx(i+1) += xcidx(i);
+                xcidx (i+1) += xcidx (i);
 
               change_capacity (nnz ());
 
               // Merge columns.
               for (octave_idx_type i = 0; i < nc; i++)
                 {
-                  octave_idx_type l = xcidx(i), u = xcidx(i+1), j = jsav[i];
+                  octave_idx_type l = xcidx (i), u = xcidx (i+1), j = jsav[i];
                   if (j >= 0)
                     {
                       // from rhs
-                      octave_idx_type k = rhs.cidx(j);
+                      octave_idx_type k = rhs.cidx (j);
                       copy_or_memcpy (u - l, rhs.data () + k, xdata () + l);
                       copy_or_memcpy (u - l, rhs.ridx () + k, xridx () + l);
                     }
                   else
                     {
                       // original
-                      octave_idx_type k = tmp.cidx(i);
+                      octave_idx_type k = tmp.cidx (i);
                       copy_or_memcpy (u - l, tmp.data () + k, xdata () + l);
                       copy_or_memcpy (u - l, tmp.ridx () + k, xridx () + l);
                     }
@@ -2183,26 +2183,26 @@
 
   for (octave_idx_type j = 0; j < nc; j++)
     {
-      octave_idx_type ns = mcidx [j + 1] - mcidx [j];
+      octave_idx_type ns = mcidx[j + 1] - mcidx[j];
       lsort.sort (v, ns);
 
       octave_idx_type i;
       if (mode == ASCENDING)
         {
           for (i = 0; i < ns; i++)
-            if (sparse_ascending_compare<T> (static_cast<T> (0), v [i]))
+            if (sparse_ascending_compare<T> (static_cast<T> (0), v[i]))
               break;
         }
       else
         {
           for (i = 0; i < ns; i++)
-            if (sparse_descending_compare<T> (static_cast<T> (0), v [i]))
+            if (sparse_descending_compare<T> (static_cast<T> (0), v[i]))
               break;
         }
       for (octave_idx_type k = 0; k < i; k++)
-        mridx [k] = k;
+        mridx[k] = k;
       for (octave_idx_type k = i; k < ns; k++)
-        mridx [k] = k - ns + nr;
+        mridx[k] = k - ns + nr;
 
       v += ns;
       mridx += ns;
@@ -2255,7 +2255,7 @@
 
   for (octave_idx_type j = 0; j < nc; j++)
     {
-      octave_idx_type ns = mcidx [j + 1] - mcidx [j];
+      octave_idx_type ns = mcidx[j + 1] - mcidx[j];
       octave_idx_type offset = j * nr;
 
       if (ns == 0)
@@ -2296,14 +2296,14 @@
 
           for (octave_idx_type k = 0; k < i; k++)
             {
-              sidx (k + offset) = vi [k];
-              mridx [k] = k;
+              sidx (k + offset) = vi[k];
+              mridx[k] = k;
             }
 
           for (octave_idx_type k = i; k < ns; k++)
             {
-              sidx (k - ns + nr + offset) = vi [k];
-              mridx [k] = k - ns + nr;
+              sidx (k - ns + nr + offset) = vi[k];
+              mridx[k] = k - ns + nr;
             }
 
           v += ns;
@@ -2437,12 +2437,12 @@
 
               for (octave_idx_type j = 0; j < nnc; j++)
                 {
-                  for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
+                  for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
                     {
                       d.xdata (i) = data (i);
                       d.xridx (i) = j + roff;
                     }
-                  d.xcidx (j + coff + 1) = cidx(j+1);
+                  d.xcidx (j + coff + 1) = cidx (j+1);
                 }
 
               for (octave_idx_type i = nnc + coff + 1; i < n + 1; i++)
@@ -2459,7 +2459,7 @@
           if (nnz () > 0)
             {
               octave_idx_type ii = 0;
-              octave_idx_type ir = ridx(0);
+              octave_idx_type ir = ridx (0);
 
               for (octave_idx_type i = 0; i < coff+1; i++)
                 d.xcidx (i) = 0;
@@ -2545,17 +2545,17 @@
                 if (spi.is_empty ())
                   continue;
 
-                octave_idx_type kl = spi.cidx(j), ku = spi.cidx(j+1);
+                octave_idx_type kl = spi.cidx (j), ku = spi.cidx (j+1);
                 for (octave_idx_type k = kl; k < ku; k++, l++)
                   {
-                    retval.xridx(l) = spi.ridx(k) + rcum;
-                    retval.xdata(l) = spi.data(k);
+                    retval.xridx (l) = spi.ridx (k) + rcum;
+                    retval.xdata (l) = spi.data (k);
                   }
 
                 rcum += spi.rows ();
               }
 
-            retval.xcidx(j+1) = l;
+            retval.xcidx (j+1) = l;
           }
 
         break;
@@ -2595,15 +2595,15 @@
       octave_idx_type i = 0;
       for (octave_idx_type j = 0, nc = cols (); j < nc; j++)
         {
-          if (cidx(j+1) > i)
+          if (cidx (j+1) > i)
             retval(j) = data (i++);
         }
     }
   else
     {
       for (octave_idx_type j = 0, nc = cols (); j < nc; j++)
-        for (octave_idx_type i = cidx(j), iu = cidx(j+1); i < iu; i++)
-          retval(ridx(i), j) = data (i);
+        for (octave_idx_type i = cidx (j), iu = cidx (j+1); i < iu; i++)
+          retval(ridx (i), j) = data (i);
     }
 
   return retval;
@@ -2643,12 +2643,12 @@
 %!  x = ones (size);
 %!  s = set_slice (sparse (x), dim, slice);
 %!  f = set_slice (x, dim, slice);
-%!  assert (nnz(s), nnz(f));
-%!  assert (full(s), f);
-%!  s = set_slice2 (sparse(x), dim, slice);
+%!  assert (nnz (s), nnz (f));
+%!  assert (full (s), f);
+%!  s = set_slice2 (sparse (x), dim, slice);
 %!  f = set_slice2 (x, dim, slice);
-%!  assert (nnz(s), nnz(f));
-%!  assert (full(s), f);
+%!  assert (nnz (s), nnz (f));
+%!  assert (full (s), f);
 %!endfunction
 
 #### 1d indexing
@@ -2780,7 +2780,7 @@
 %! assert (s, sparse (magic (5)(:, [1,5])));
 
 %!test
-%! s = sparse([], [], [], 1, 1);
+%! s = sparse ([], [], [], 1, 1);
 %! s(1,:) = [];
 %! assert (s, sparse ([], [], [], 0, 1));
 
--- a/liboctave/Sparse.h
+++ b/liboctave/Sparse.h
@@ -111,7 +111,7 @@
 
     octave_idx_type length (void) const { return nzmx; }
 
-    octave_idx_type nnz (void) const { return c [ncols]; }
+    octave_idx_type nnz (void) const { return c[ncols]; }
 
     T& elem (octave_idx_type _r, octave_idx_type _c);
 
@@ -268,7 +268,7 @@
   octave_idx_type get_col_index (octave_idx_type k)
   {
     octave_idx_type ret = 0;
-    while (cidx(ret+1) < k)
+    while (cidx (ret+1) < k)
       ret++;
     return ret;
   }
@@ -599,11 +599,11 @@
         result = Sparse<U> (nr, nc, f_zero);
 
         for (octave_idx_type j = 0; j < nc; j++)
-          for (octave_idx_type i = cidx(j); i < cidx (j+1); i++)
+          for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
             {
               octave_quit ();
               /* Use data instead of elem for better performance.  */
-              result.data (ridx (i) + j * nr) = fcn (data(i));
+              result.data (ridx (i) + j * nr) = fcn (data (i));
             }
 
         result.maybe_compress (true);
@@ -620,7 +620,7 @@
 
         for (octave_idx_type j = 0; j < nc; j++)
           {
-            for (octave_idx_type i = cidx(j); i < cidx (j+1); i++)
+            for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
               {
                 U val = fcn (data (i));
                 if (val != 0.0)
@@ -709,7 +709,7 @@
           else if (jtmp > jold)
             {
               for (octave_idx_type j = jold; j < jtmp; j++)
-                a.cidx(j+1) = ii;
+                a.cidx (j+1) = ii;
             }
           else if (itmp < iold)
             {
@@ -734,7 +734,7 @@
         }
 
       for (octave_idx_type j = jold; j < nc; j++)
-        a.cidx(j+1) = ii;
+        a.cidx (j+1) = ii;
     }
 
  done:
--- a/liboctave/SparseCmplxCHOL.cc
+++ b/liboctave/SparseCmplxCHOL.cc
@@ -51,12 +51,12 @@
 
       if (typ == MatrixType::Upper)
         {
-          rinv = r.inverse(mattype, info, rcond, true, false);
+          rinv = r.inverse (mattype, info, rcond, true, false);
           retval = rinv.transpose () * rinv;
         }
       else if (typ == MatrixType::Lower)
         {
-          rinv = r.transpose ().inverse(mattype, info, rcond, true, false);
+          rinv = r.transpose ().inverse (mattype, info, rcond, true, false);
           retval = rinv.transpose () * rinv;
         }
       else
--- a/liboctave/SparseCmplxLU.cc
+++ b/liboctave/SparseCmplxLU.cc
@@ -326,7 +326,7 @@
         OCTAVE_LOCAL_BUFFER (octave_idx_type, qinit, nc);
 
         for (octave_idx_type i = 0; i < nc; i++)
-          qinit [i] = static_cast<octave_idx_type> (Qinit (i));
+          qinit[i] = static_cast<octave_idx_type> (Qinit (i));
 
         status = UMFPACK_ZNAME (qsymbolic) (nr, nc, Ap, Ai,
                                        reinterpret_cast<const double *> (Ax),
--- a/liboctave/SparseCmplxQR.cc
+++ b/liboctave/SparseCmplxQR.cc
@@ -69,7 +69,7 @@
                                       (a.data ()));
   A.nz = -1;
   BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
   S = CXSPARSE_ZNAME (_sqr) (order, &A, 1);
 #else
   S = CXSPARSE_ZNAME (_sqr) (&A, order - 1, 1);
@@ -130,10 +130,10 @@
 #ifdef HAVE_CXSPARSE
   ColumnVector ret(N->L->m);
   for (octave_idx_type i = 0; i < N->L->m; i++)
-#if defined(CS_VER) && (CS_VER >= 2)
-    ret.xelem(i) = S->pinv[i];
+#if defined (CS_VER) && (CS_VER >= 2)
+    ret.xelem (i) = S->pinv[i];
 #else
-    ret.xelem(i) = S->Pinv[i];
+    ret.xelem (i) = S->Pinv[i];
 #endif
   return ret;
 #else
@@ -147,10 +147,10 @@
 #ifdef HAVE_CXSPARSE
   ColumnVector ret(N->L->m);
   for (octave_idx_type i = 0; i < N->L->m; i++)
-#if defined(CS_VER) && (CS_VER >= 2)
-    ret.xelem(S->pinv[i]) = i;
+#if defined (CS_VER) && (CS_VER >= 2)
+    ret.xelem (S->pinv[i]) = i;
 #else
-    ret.xelem(S->Pinv[i]) = i;
+    ret.xelem (S->Pinv[i]) = i;
 #endif
   return ret;
 #else
@@ -212,7 +212,7 @@
           octave_quit ();
           volatile octave_idx_type nm = (nr < nc ? nr : nc);
           BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
           CXSPARSE_ZNAME (_ipvec)
             (S->pinv, bvec + idx, reinterpret_cast<cs_complex_t *>(buf), b_nr);
 #else
@@ -262,7 +262,7 @@
           bvec[j] = OCTAVE_C99_ONE;
           volatile octave_idx_type nm = (nr < nc ? nr : nc);
           BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
           CXSPARSE_ZNAME (_ipvec)
             (S->pinv, bvec, reinterpret_cast<cs_complex_t *>(buf), nr);
 #else
@@ -290,7 +290,7 @@
 }
 
 ComplexMatrix
-qrsolve(const SparseComplexMatrix&a, const Matrix &b, octave_idx_type &info)
+qrsolve (const SparseComplexMatrix&a, const Matrix &b, octave_idx_type &info)
 {
   info = -1;
 #ifdef HAVE_CXSPARSE
@@ -310,7 +310,7 @@
       SparseComplexQR q (a, 2);
       if (! q.ok ())
         return ComplexMatrix ();
-      x.resize(nc, b_nc);
+      x.resize (nc, b_nc);
       cs_complex_t *vec = reinterpret_cast<cs_complex_t *>
         (x.fortran_vec ());
       OCTAVE_C99_COMPLEX (buf, q.S ()->m2);
@@ -319,11 +319,11 @@
         {
           octave_quit ();
           for (octave_idx_type j = 0; j < b_nr; j++)
-            Xx[j] = b.xelem(j,i);
+            Xx[j] = b.xelem (j,i);
           for (octave_idx_type j = nr; j < q.S ()->m2; j++)
             buf[j] = OCTAVE_C99_ZERO;
           BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
           CXSPARSE_ZNAME (_ipvec)
             (q.S ()->pinv, reinterpret_cast<cs_complex_t *>(Xx), buf, nr);
 #else
@@ -340,7 +340,7 @@
             }
           BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
           CXSPARSE_ZNAME (_usolve) (q.N ()->U, buf);
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
           CXSPARSE_ZNAME (_ipvec) (q.S ()->q, buf, vec + idx, nc);
 #else
           CXSPARSE_ZNAME (_ipvec) (nc, q.S ()->Q, buf, vec + idx);
@@ -355,30 +355,30 @@
       SparseComplexQR q (at, 2);
       if (! q.ok ())
         return ComplexMatrix ();
-      x.resize(nc, b_nc);
+      x.resize (nc, b_nc);
       cs_complex_t *vec = reinterpret_cast<cs_complex_t *>
         (x.fortran_vec ());
       volatile octave_idx_type nbuf = (nc > q.S ()->m2 ? nc : q.S ()->m2);
       OCTAVE_C99_COMPLEX (buf, nbuf);
       OCTAVE_LOCAL_BUFFER (Complex, Xx, b_nr);
-#if defined(CS_VER) && (((CS_VER == 2) && (CS_SUBVER >= 2)) || (CS_VER > 2))
+#if defined (CS_VER) && (((CS_VER == 2) && (CS_SUBVER >= 2)) || (CS_VER > 2))
       OCTAVE_LOCAL_BUFFER (double, B, nr);
       for (octave_idx_type i = 0; i < nr; i++)
-        B[i] = q.N ()->B [i];
+        B[i] = q.N ()->B[i];
 #else
       OCTAVE_LOCAL_BUFFER (Complex, B, nr);
       for (octave_idx_type i = 0; i < nr; i++)
-        B[i] = conj (reinterpret_cast<Complex *>(q.N ()->B) [i]);
+        B[i] = conj (reinterpret_cast<Complex *>(q.N ()->B)[i]);
 #endif
       for (volatile octave_idx_type i = 0, idx = 0; i < b_nc; i++, idx+=nc)
         {
           octave_quit ();
           for (octave_idx_type j = 0; j < b_nr; j++)
-            Xx[j] = b.xelem(j,i);
+            Xx[j] = b.xelem (j,i);
           for (octave_idx_type j = nr; j < nbuf; j++)
             buf[j] = OCTAVE_C99_ZERO;
           BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
           CXSPARSE_ZNAME (_pvec)
             (q.S ()->q, reinterpret_cast<cs_complex_t *>(Xx), buf, nr);
 #else
@@ -392,7 +392,7 @@
               octave_quit ();
               BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
 
-#if defined(CS_VER) && (((CS_VER == 2) && (CS_SUBVER >= 2)) || (CS_VER > 2))
+#if defined (CS_VER) && (((CS_VER == 2) && (CS_SUBVER >= 2)) || (CS_VER > 2))
               CXSPARSE_ZNAME (_happly) (q.N ()->L, j, B[j], buf);
 #else
               CXSPARSE_ZNAME (_happly)
@@ -401,7 +401,7 @@
               END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
             }
           BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
           CXSPARSE_ZNAME (_pvec) (q.S ()->pinv, buf, vec + idx, nc);
 #else
           CXSPARSE_ZNAME (_pvec) (nc, q.S ()->Pinv, buf, vec + idx);
@@ -418,7 +418,7 @@
 }
 
 SparseComplexMatrix
-qrsolve(const SparseComplexMatrix&a, const SparseMatrix &b, octave_idx_type &info)
+qrsolve (const SparseComplexMatrix&a, const SparseMatrix &b, octave_idx_type &info)
 {
   info = -1;
 #ifdef HAVE_CXSPARSE
@@ -440,7 +440,7 @@
       if (! q.ok ())
         return SparseComplexMatrix ();
       x = SparseComplexMatrix (nc, b_nc, b.nnz ());
-      x.xcidx(0) = 0;
+      x.xcidx (0) = 0;
       x_nz = b.nnz ();
       ii = 0;
       OCTAVE_LOCAL_BUFFER (Complex, Xx, (b_nr > nc ? b_nr : nc));
@@ -449,11 +449,11 @@
         {
           octave_quit ();
           for (octave_idx_type j = 0; j < b_nr; j++)
-            Xx[j] = b.xelem(j,i);
+            Xx[j] = b.xelem (j,i);
           for (octave_idx_type j = nr; j < q.S ()->m2; j++)
             buf[j] = OCTAVE_C99_ZERO;
           BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
           CXSPARSE_ZNAME (_ipvec)
             (q.S ()->pinv, reinterpret_cast<cs_complex_t *>(Xx), buf, nr);
 #else
@@ -470,7 +470,7 @@
             }
           BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
           CXSPARSE_ZNAME (_usolve) (q.N ()->U, buf);
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
           CXSPARSE_ZNAME (_ipvec)
             (q.S ()->q, buf, reinterpret_cast<cs_complex_t *>(Xx), nc);
 #else
@@ -492,11 +492,11 @@
                       x.change_capacity (sz);
                       x_nz = sz;
                     }
-                  x.xdata(ii) = tmp;
-                  x.xridx(ii++) = j;
+                  x.xdata (ii) = tmp;
+                  x.xridx (ii++) = j;
                 }
             }
-          x.xcidx(i+1) = ii;
+          x.xcidx (i+1) = ii;
         }
       info = 0;
     }
@@ -507,31 +507,31 @@
       if (! q.ok ())
         return SparseComplexMatrix ();
       x = SparseComplexMatrix (nc, b_nc, b.nnz ());
-      x.xcidx(0) = 0;
+      x.xcidx (0) = 0;
       x_nz = b.nnz ();
       ii = 0;
       volatile octave_idx_type nbuf = (nc > q.S ()->m2 ? nc : q.S ()->m2);
       OCTAVE_LOCAL_BUFFER (Complex, Xx, (b_nr > nc ? b_nr : nc));
       OCTAVE_C99_COMPLEX (buf, nbuf);
 
-#if defined(CS_VER) && (((CS_VER == 2) && (CS_SUBVER >= 2)) || (CS_VER > 2))
+#if defined (CS_VER) && (((CS_VER == 2) && (CS_SUBVER >= 2)) || (CS_VER > 2))
       OCTAVE_LOCAL_BUFFER (double, B, nr);
       for (octave_idx_type i = 0; i < nr; i++)
-        B[i] = q.N ()->B [i];
+        B[i] = q.N ()->B[i];
 #else
       OCTAVE_LOCAL_BUFFER (Complex, B, nr);
       for (octave_idx_type i = 0; i < nr; i++)
-        B[i] = conj (reinterpret_cast<Complex *>(q.N ()->B) [i]);
+        B[i] = conj (reinterpret_cast<Complex *>(q.N ()->B)[i]);
 #endif
       for (volatile octave_idx_type i = 0, idx = 0; i < b_nc; i++, idx+=nc)
         {
           octave_quit ();
           for (octave_idx_type j = 0; j < b_nr; j++)
-            Xx[j] = b.xelem(j,i);
+            Xx[j] = b.xelem (j,i);
           for (octave_idx_type j = nr; j < nbuf; j++)
             buf[j] = OCTAVE_C99_ZERO;
           BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
           CXSPARSE_ZNAME (_pvec)
             (q.S ()->q, reinterpret_cast<cs_complex_t *>(Xx), buf, nr);
 #else
@@ -544,7 +544,7 @@
             {
               octave_quit ();
               BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
-#if defined(CS_VER) && (((CS_VER == 2) && (CS_SUBVER >= 2)) || (CS_VER > 2))
+#if defined (CS_VER) && (((CS_VER == 2) && (CS_SUBVER >= 2)) || (CS_VER > 2))
               CXSPARSE_ZNAME (_happly) (q.N ()->L, j, B[j], buf);
 #else
               CXSPARSE_ZNAME (_happly)
@@ -553,7 +553,7 @@
               END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
             }
           BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
           CXSPARSE_ZNAME (_pvec)
             (q.S ()->pinv, buf, reinterpret_cast<cs_complex_t *>(Xx), nc);
 #else
@@ -575,11 +575,11 @@
                       x.change_capacity (sz);
                       x_nz = sz;
                     }
-                  x.xdata(ii) = tmp;
-                  x.xridx(ii++) = j;
+                  x.xdata (ii) = tmp;
+                  x.xridx (ii++) = j;
                 }
             }
-          x.xcidx(i+1) = ii;
+          x.xcidx (i+1) = ii;
         }
       info = 0;
     }
@@ -592,7 +592,7 @@
 }
 
 ComplexMatrix
-qrsolve(const SparseComplexMatrix&a, const ComplexMatrix &b, octave_idx_type &info)
+qrsolve (const SparseComplexMatrix&a, const ComplexMatrix &b, octave_idx_type &info)
 {
   info = -1;
 #ifdef HAVE_CXSPARSE
@@ -614,7 +614,7 @@
       SparseComplexQR q (a, 2);
       if (! q.ok ())
         return ComplexMatrix ();
-      x.resize(nc, b_nc);
+      x.resize (nc, b_nc);
       cs_complex_t *vec = reinterpret_cast<cs_complex_t *>
         (x.fortran_vec ());
       OCTAVE_C99_COMPLEX (buf, q.S ()->m2);
@@ -625,7 +625,7 @@
           for (octave_idx_type j = nr; j < q.S ()->m2; j++)
             buf[j] = OCTAVE_C99_ZERO;
           BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
           CXSPARSE_ZNAME (_ipvec) (q.S ()->pinv, bvec + bidx, buf, nr);
 #else
           CXSPARSE_ZNAME (_ipvec) (nr, q.S ()->Pinv, bvec + bidx, buf);
@@ -640,7 +640,7 @@
             }
           BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
           CXSPARSE_ZNAME (_usolve) (q.N ()->U, buf);
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
           CXSPARSE_ZNAME (_ipvec) (q.S ()->q, buf, vec + idx, nc);
 #else
           CXSPARSE_ZNAME (_ipvec) (nc, q.S ()->Q, buf, vec + idx);
@@ -655,19 +655,19 @@
       SparseComplexQR q (at, 2);
       if (! q.ok ())
         return ComplexMatrix ();
-      x.resize(nc, b_nc);
+      x.resize (nc, b_nc);
       cs_complex_t *vec = reinterpret_cast<cs_complex_t *>
         (x.fortran_vec ());
       volatile octave_idx_type nbuf = (nc > q.S ()->m2 ? nc : q.S ()->m2);
       OCTAVE_C99_COMPLEX (buf, nbuf);
-#if defined(CS_VER) && (((CS_VER == 2) && (CS_SUBVER >= 2)) || (CS_VER > 2))
+#if defined (CS_VER) && (((CS_VER == 2) && (CS_SUBVER >= 2)) || (CS_VER > 2))
       OCTAVE_LOCAL_BUFFER (double, B, nr);
       for (octave_idx_type i = 0; i < nr; i++)
-        B[i] = q.N ()->B [i];
+        B[i] = q.N ()->B[i];
 #else
       OCTAVE_LOCAL_BUFFER (Complex, B, nr);
       for (octave_idx_type i = 0; i < nr; i++)
-        B[i] = conj (reinterpret_cast<Complex *>(q.N ()->B) [i]);
+        B[i] = conj (reinterpret_cast<Complex *>(q.N ()->B)[i]);
 #endif
       for (volatile octave_idx_type i = 0, idx = 0, bidx = 0; i < b_nc;
            i++, idx+=nc, bidx+=b_nr)
@@ -676,7 +676,7 @@
           for (octave_idx_type j = nr; j < nbuf; j++)
             buf[j] = OCTAVE_C99_ZERO;
           BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
           CXSPARSE_ZNAME (_pvec) (q.S ()->q, bvec + bidx, buf, nr);
 #else
           CXSPARSE_ZNAME (_pvec) (nr, q.S ()->Q, bvec + bidx, buf);
@@ -687,7 +687,7 @@
             {
               octave_quit ();
               BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
-#if defined(CS_VER) && (((CS_VER == 2) && (CS_SUBVER >= 2)) || (CS_VER > 2))
+#if defined (CS_VER) && (((CS_VER == 2) && (CS_SUBVER >= 2)) || (CS_VER > 2))
               CXSPARSE_ZNAME (_happly) (q.N ()->L, j, B[j], buf);
 #else
               CXSPARSE_ZNAME (_happly)
@@ -696,7 +696,7 @@
               END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
             }
           BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
           CXSPARSE_ZNAME (_pvec) (q.S ()->pinv, buf, vec + idx, nc);
 #else
           CXSPARSE_ZNAME (_pvec) (nc, q.S ()->Pinv, buf, vec + idx);
@@ -713,7 +713,7 @@
 }
 
 SparseComplexMatrix
-qrsolve(const SparseComplexMatrix&a, const SparseComplexMatrix &b, octave_idx_type &info)
+qrsolve (const SparseComplexMatrix&a, const SparseComplexMatrix &b, octave_idx_type &info)
 {
   info = -1;
 #ifdef HAVE_CXSPARSE
@@ -735,7 +735,7 @@
       if (! q.ok ())
         return SparseComplexMatrix ();
       x = SparseComplexMatrix (nc, b_nc, b.nnz ());
-      x.xcidx(0) = 0;
+      x.xcidx (0) = 0;
       x_nz = b.nnz ();
       ii = 0;
       OCTAVE_LOCAL_BUFFER (Complex, Xx, (b_nr > nc ? b_nr : nc));
@@ -744,11 +744,11 @@
         {
           octave_quit ();
           for (octave_idx_type j = 0; j < b_nr; j++)
-            Xx[j] = b.xelem(j,i);
+            Xx[j] = b.xelem (j,i);
           for (octave_idx_type j = nr; j < q.S ()->m2; j++)
             buf[j] = OCTAVE_C99_ZERO;
           BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
           CXSPARSE_ZNAME (_ipvec)
             (q.S ()->pinv, reinterpret_cast<cs_complex_t *>(Xx), buf, nr);
 #else
@@ -765,7 +765,7 @@
             }
           BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
           CXSPARSE_ZNAME (_usolve) (q.N ()->U, buf);
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
           CXSPARSE_ZNAME (_ipvec)
             (q.S ()->q, buf, reinterpret_cast<cs_complex_t *>(Xx), nc);
 #else
@@ -787,11 +787,11 @@
                       x.change_capacity (sz);
                       x_nz = sz;
                     }
-                  x.xdata(ii) = tmp;
-                  x.xridx(ii++) = j;
+                  x.xdata (ii) = tmp;
+                  x.xridx (ii++) = j;
                 }
             }
-          x.xcidx(i+1) = ii;
+          x.xcidx (i+1) = ii;
         }
       info = 0;
     }
@@ -802,30 +802,30 @@
       if (! q.ok ())
         return SparseComplexMatrix ();
       x = SparseComplexMatrix (nc, b_nc, b.nnz ());
-      x.xcidx(0) = 0;
+      x.xcidx (0) = 0;
       x_nz = b.nnz ();
       ii = 0;
       volatile octave_idx_type nbuf = (nc > q.S ()->m2 ? nc : q.S ()->m2);
       OCTAVE_LOCAL_BUFFER (Complex, Xx, (b_nr > nc ? b_nr : nc));
       OCTAVE_C99_COMPLEX (buf, nbuf);
-#if defined(CS_VER) && (((CS_VER == 2) && (CS_SUBVER >= 2)) || (CS_VER > 2))
+#if defined (CS_VER) && (((CS_VER == 2) && (CS_SUBVER >= 2)) || (CS_VER > 2))
       OCTAVE_LOCAL_BUFFER (double, B, nr);
       for (octave_idx_type i = 0; i < nr; i++)
-        B[i] = q.N ()->B [i];
+        B[i] = q.N ()->B[i];
 #else
       OCTAVE_LOCAL_BUFFER (Complex, B, nr);
       for (octave_idx_type i = 0; i < nr; i++)
-        B[i] = conj (reinterpret_cast<Complex *>(q.N ()->B) [i]);
+        B[i] = conj (reinterpret_cast<Complex *>(q.N ()->B)[i]);
 #endif
       for (volatile octave_idx_type i = 0, idx = 0; i < b_nc; i++, idx+=nc)
         {
           octave_quit ();
           for (octave_idx_type j = 0; j < b_nr; j++)
-            Xx[j] = b.xelem(j,i);
+            Xx[j] = b.xelem (j,i);
           for (octave_idx_type j = nr; j < nbuf; j++)
             buf[j] = OCTAVE_C99_ZERO;
           BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
           CXSPARSE_ZNAME (_pvec)
             (q.S ()->q, reinterpret_cast<cs_complex_t *>(Xx), buf, nr);
 #else
@@ -838,7 +838,7 @@
             {
               octave_quit ();
               BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
-#if defined(CS_VER) && (((CS_VER == 2) && (CS_SUBVER >= 2)) || (CS_VER > 2))
+#if defined (CS_VER) && (((CS_VER == 2) && (CS_SUBVER >= 2)) || (CS_VER > 2))
               CXSPARSE_ZNAME (_happly) (q.N ()->L, j, B[j], buf);
 #else
               CXSPARSE_ZNAME (_happly)
@@ -847,7 +847,7 @@
               END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
             }
           BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
           CXSPARSE_ZNAME (_pvec)
             (q.S ()->pinv, buf, reinterpret_cast<cs_complex_t *>(Xx), nc);
 #else
@@ -869,11 +869,11 @@
                       x.change_capacity (sz);
                       x_nz = sz;
                     }
-                  x.xdata(ii) = tmp;
-                  x.xridx(ii++) = j;
+                  x.xdata (ii) = tmp;
+                  x.xridx (ii++) = j;
                 }
             }
-          x.xcidx(i+1) = ii;
+          x.xcidx (i+1) = ii;
         }
       info = 0;
     }
--- a/liboctave/SparseQR.cc
+++ b/liboctave/SparseQR.cc
@@ -48,7 +48,7 @@
   A.x = const_cast<double *>(a.data ());
   A.nz = -1;
   BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
   S = CXSPARSE_DNAME (_sqr) (order, &A, 1);
 #else
   S = CXSPARSE_DNAME (_sqr) (&A, order - 1, 1);
@@ -110,10 +110,10 @@
 #ifdef HAVE_CXSPARSE
   ColumnVector ret(N->L->m);
   for (octave_idx_type i = 0; i < N->L->m; i++)
-#if defined(CS_VER) && (CS_VER >= 2)
-    ret.xelem(i) = S->pinv[i];
+#if defined (CS_VER) && (CS_VER >= 2)
+    ret.xelem (i) = S->pinv[i];
 #else
-    ret.xelem(i) = S->Pinv[i];
+    ret.xelem (i) = S->Pinv[i];
 #endif
   return ret;
 #else
@@ -127,10 +127,10 @@
 #ifdef HAVE_CXSPARSE
   ColumnVector ret(N->L->m);
   for (octave_idx_type i = 0; i < N->L->m; i++)
-#if defined(CS_VER) && (CS_VER >= 2)
-    ret.xelem(S->pinv[i]) = i;
+#if defined (CS_VER) && (CS_VER >= 2)
+    ret.xelem (S->pinv[i]) = i;
 #else
-    ret.xelem(S->Pinv[i]) = i;
+    ret.xelem (S->Pinv[i]) = i;
 #endif
   return ret;
 #else
@@ -195,7 +195,7 @@
             buf[i] = 0.;
           volatile octave_idx_type nm = (nr < nc ? nr : nc);
           BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
           CXSPARSE_DNAME (_ipvec) (S->pinv, bvec + idx, buf, b_nr);
 #else
           CXSPARSE_DNAME (_ipvec) (b_nr, S->Pinv, bvec + idx, buf);
@@ -245,7 +245,7 @@
             buf[i] = 0.;
           volatile octave_idx_type nm = (nr < nc ? nr : nc);
           BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
           CXSPARSE_DNAME (_ipvec) (S->pinv, bvec, buf, nr);
 #else
           CXSPARSE_DNAME (_ipvec) (nr, S->Pinv, bvec, buf);
@@ -271,7 +271,7 @@
 }
 
 Matrix
-qrsolve(const SparseMatrix&a, const Matrix &b, octave_idx_type& info)
+qrsolve (const SparseMatrix&a, const Matrix &b, octave_idx_type& info)
 {
   info = -1;
 #ifdef HAVE_CXSPARSE
@@ -292,7 +292,7 @@
       SparseQR q (a, 3);
       if (! q.ok ())
         return Matrix ();
-      x.resize(nc, b_nc);
+      x.resize (nc, b_nc);
       double *vec = x.fortran_vec ();
       OCTAVE_LOCAL_BUFFER (double, buf, q.S ()->m2);
       for (volatile octave_idx_type i = 0, idx = 0, bidx = 0; i < b_nc;
@@ -302,7 +302,7 @@
           for (octave_idx_type j = nr; j < q.S ()->m2; j++)
             buf[j] = 0.;
           BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
           CXSPARSE_DNAME (_ipvec) (q.S ()->pinv, bvec + bidx, buf, nr);
 #else
           CXSPARSE_DNAME (_ipvec) (nr, q.S ()->Pinv, bvec + bidx, buf);
@@ -317,7 +317,7 @@
             }
           BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
           CXSPARSE_DNAME (_usolve) (q.N ()->U, buf);
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
           CXSPARSE_DNAME (_ipvec) (q.S ()->q, buf, vec + idx, nc);
 #else
           CXSPARSE_DNAME (_ipvec) (nc, q.S ()->Q, buf, vec + idx);
@@ -332,7 +332,7 @@
       SparseQR q (at, 3);
       if (! q.ok ())
         return Matrix ();
-      x.resize(nc, b_nc);
+      x.resize (nc, b_nc);
       double *vec = x.fortran_vec ();
       volatile octave_idx_type nbuf = (nc > q.S ()->m2 ? nc : q.S ()->m2);
       OCTAVE_LOCAL_BUFFER (double, buf, nbuf);
@@ -343,7 +343,7 @@
           for (octave_idx_type j = nr; j < nbuf; j++)
             buf[j] = 0.;
           BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
           CXSPARSE_DNAME (_pvec) (q.S ()->q, bvec + bidx, buf, nr);
 #else
           CXSPARSE_DNAME (_pvec) (nr, q.S ()->Q, bvec + bidx, buf);
@@ -358,7 +358,7 @@
               END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
             }
           BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
           CXSPARSE_DNAME (_pvec) (q.S ()->pinv, buf, vec + idx, nc);
 #else
           CXSPARSE_DNAME (_pvec) (nc, q.S ()->Pinv, buf, vec + idx);
@@ -375,7 +375,7 @@
 }
 
 SparseMatrix
-qrsolve(const SparseMatrix&a, const SparseMatrix &b, octave_idx_type &info)
+qrsolve (const SparseMatrix&a, const SparseMatrix &b, octave_idx_type &info)
 {
   info = -1;
 #ifdef HAVE_CXSPARSE
@@ -397,7 +397,7 @@
       if (! q.ok ())
         return SparseMatrix ();
       x = SparseMatrix (nc, b_nc, b.nnz ());
-      x.xcidx(0) = 0;
+      x.xcidx (0) = 0;
       x_nz = b.nnz ();
       ii = 0;
       OCTAVE_LOCAL_BUFFER (double, Xx, (b_nr > nc ? b_nr : nc));
@@ -406,11 +406,11 @@
         {
           octave_quit ();
           for (octave_idx_type j = 0; j < b_nr; j++)
-            Xx[j] = b.xelem(j,i);
+            Xx[j] = b.xelem (j,i);
           for (octave_idx_type j = nr; j < q.S ()->m2; j++)
             buf[j] = 0.;
           BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
           CXSPARSE_DNAME (_ipvec) (q.S ()->pinv, Xx, buf, nr);
 #else
           CXSPARSE_DNAME (_ipvec) (nr, q.S ()->Pinv, Xx, buf);
@@ -425,7 +425,7 @@
             }
           BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
           CXSPARSE_DNAME (_usolve) (q.N ()->U, buf);
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
           CXSPARSE_DNAME (_ipvec) (q.S ()->q, buf, Xx, nc);
 #else
           CXSPARSE_DNAME (_ipvec) (nc, q.S ()->Q, buf, Xx);
@@ -445,11 +445,11 @@
                       x.change_capacity (sz);
                       x_nz = sz;
                     }
-                  x.xdata(ii) = tmp;
-                  x.xridx(ii++) = j;
+                  x.xdata (ii) = tmp;
+                  x.xridx (ii++) = j;
                 }
             }
-          x.xcidx(i+1) = ii;
+          x.xcidx (i+1) = ii;
         }
       info = 0;
     }
@@ -460,7 +460,7 @@
       if (! q.ok ())
         return SparseMatrix ();
       x = SparseMatrix (nc, b_nc, b.nnz ());
-      x.xcidx(0) = 0;
+      x.xcidx (0) = 0;
       x_nz = b.nnz ();
       ii = 0;
       volatile octave_idx_type nbuf = (nc > q.S ()->m2 ? nc : q.S ()->m2);
@@ -470,11 +470,11 @@
         {
           octave_quit ();
           for (octave_idx_type j = 0; j < b_nr; j++)
-            Xx[j] = b.xelem(j,i);
+            Xx[j] = b.xelem (j,i);
           for (octave_idx_type j = nr; j < nbuf; j++)
             buf[j] = 0.;
           BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
           CXSPARSE_DNAME (_pvec) (q.S ()->q, Xx, buf, nr);
 #else
           CXSPARSE_DNAME (_pvec) (nr, q.S ()->Q, Xx, buf);
@@ -489,7 +489,7 @@
               END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
             }
           BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
           CXSPARSE_DNAME (_pvec) (q.S ()->pinv, buf, Xx, nc);
 #else
           CXSPARSE_DNAME (_pvec) (nc, q.S ()->Pinv, buf, Xx);
@@ -509,11 +509,11 @@
                       x.change_capacity (sz);
                       x_nz = sz;
                     }
-                  x.xdata(ii) = tmp;
-                  x.xridx(ii++) = j;
+                  x.xdata (ii) = tmp;
+                  x.xridx (ii++) = j;
                 }
             }
-          x.xcidx(i+1) = ii;
+          x.xcidx (i+1) = ii;
         }
       info = 0;
     }
@@ -526,7 +526,7 @@
 }
 
 ComplexMatrix
-qrsolve(const SparseMatrix&a, const ComplexMatrix &b, octave_idx_type &info)
+qrsolve (const SparseMatrix&a, const ComplexMatrix &b, octave_idx_type &info)
 {
   info = -1;
 #ifdef HAVE_CXSPARSE
@@ -546,7 +546,7 @@
       SparseQR q (a, 3);
       if (! q.ok ())
         return ComplexMatrix ();
-      x.resize(nc, b_nc);
+      x.resize (nc, b_nc);
       Complex *vec = x.fortran_vec ();
       OCTAVE_LOCAL_BUFFER (double, Xx, (b_nr > nc ? b_nr : nc));
       OCTAVE_LOCAL_BUFFER (double, Xz, (b_nr > nc ? b_nr : nc));
@@ -563,7 +563,7 @@
           for (octave_idx_type j = nr; j < q.S ()->m2; j++)
             buf[j] = 0.;
           BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
           CXSPARSE_DNAME (_ipvec) (q.S ()->pinv, Xx, buf, nr);
 #else
           CXSPARSE_DNAME (_ipvec) (nr, q.S ()->Pinv, Xx, buf);
@@ -578,14 +578,14 @@
             }
           BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
           CXSPARSE_DNAME (_usolve) (q.N ()->U, buf);
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
           CXSPARSE_DNAME (_ipvec) (q.S ()->q, buf, Xx, nc);
 #else
           CXSPARSE_DNAME (_ipvec) (nc, q.S ()->Q, buf, Xx);
 #endif
           for (octave_idx_type j = nr; j < q.S ()->m2; j++)
             buf[j] = 0.;
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
           CXSPARSE_DNAME (_ipvec) (q.S ()->pinv, Xz, buf, nr);
 #else
           CXSPARSE_DNAME (_ipvec) (nr, q.S ()->Pinv, Xz, buf);
@@ -600,7 +600,7 @@
             }
           BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
           CXSPARSE_DNAME (_usolve) (q.N ()->U, buf);
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
           CXSPARSE_DNAME (_ipvec) (q.S ()->q, buf, Xz, nc);
 #else
           CXSPARSE_DNAME (_ipvec) (nc, q.S ()->Q, buf, Xz);
@@ -617,7 +617,7 @@
       SparseQR q (at, 3);
       if (! q.ok ())
         return ComplexMatrix ();
-      x.resize(nc, b_nc);
+      x.resize (nc, b_nc);
       Complex *vec = x.fortran_vec ();
       volatile octave_idx_type nbuf = (nc > q.S ()->m2 ? nc : q.S ()->m2);
       OCTAVE_LOCAL_BUFFER (double, Xx, (b_nr > nc ? b_nr : nc));
@@ -635,7 +635,7 @@
           for (octave_idx_type j = nr; j < nbuf; j++)
             buf[j] = 0.;
           BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
           CXSPARSE_DNAME (_pvec) (q.S ()->q, Xx, buf, nr);
 #else
           CXSPARSE_DNAME (_pvec) (nr, q.S ()->Q, Xx, buf);
@@ -650,7 +650,7 @@
               END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
             }
           BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
           CXSPARSE_DNAME (_pvec) (q.S ()->pinv, buf, Xx, nc);
 #else
           CXSPARSE_DNAME (_pvec) (nc, q.S ()->Pinv, buf, Xx);
@@ -659,7 +659,7 @@
           for (octave_idx_type j = nr; j < nbuf; j++)
             buf[j] = 0.;
           BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
           CXSPARSE_DNAME (_pvec) (q.S ()->q, Xz, buf, nr);
 #else
           CXSPARSE_DNAME (_pvec) (nr, q.S ()->Q, Xz, buf);
@@ -674,7 +674,7 @@
               END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
             }
           BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
           CXSPARSE_DNAME (_pvec) (q.S ()->pinv, buf, Xz, nc);
 #else
           CXSPARSE_DNAME (_pvec) (nc, q.S ()->Pinv, buf, Xz);
@@ -693,7 +693,7 @@
 }
 
 SparseComplexMatrix
-qrsolve(const SparseMatrix&a, const SparseComplexMatrix &b, octave_idx_type &info)
+qrsolve (const SparseMatrix&a, const SparseComplexMatrix &b, octave_idx_type &info)
 {
   info = -1;
 #ifdef HAVE_CXSPARSE
@@ -715,7 +715,7 @@
       if (! q.ok ())
         return SparseComplexMatrix ();
       x = SparseComplexMatrix (nc, b_nc, b.nnz ());
-      x.xcidx(0) = 0;
+      x.xcidx (0) = 0;
       x_nz = b.nnz ();
       ii = 0;
       OCTAVE_LOCAL_BUFFER (double, Xx, (b_nr > nc ? b_nr : nc));
@@ -733,7 +733,7 @@
           for (octave_idx_type j = nr; j < q.S ()->m2; j++)
             buf[j] = 0.;
           BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
           CXSPARSE_DNAME (_ipvec) (q.S ()->pinv, Xx, buf, nr);
 #else
           CXSPARSE_DNAME (_ipvec) (nr, q.S ()->Pinv, Xx, buf);
@@ -748,7 +748,7 @@
             }
           BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
           CXSPARSE_DNAME (_usolve) (q.N ()->U, buf);
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
           CXSPARSE_DNAME (_ipvec) (q.S ()->q, buf, Xx, nc);
 #else
           CXSPARSE_DNAME (_ipvec) (nc, q.S ()->Q, buf, Xx);
@@ -757,7 +757,7 @@
           for (octave_idx_type j = nr; j < q.S ()->m2; j++)
             buf[j] = 0.;
           BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
           CXSPARSE_DNAME (_ipvec) (q.S ()->pinv, Xz, buf, nr);
 #else
           CXSPARSE_DNAME (_ipvec) (nr, q.S ()->Pinv, Xz, buf);
@@ -772,7 +772,7 @@
             }
           BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
           CXSPARSE_DNAME (_usolve) (q.N ()->U, buf);
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
           CXSPARSE_DNAME (_ipvec) (q.S ()->q, buf, Xz, nc);
 #else
           CXSPARSE_DNAME (_ipvec) (nc, q.S ()->Q, buf, Xz);
@@ -792,11 +792,11 @@
                       x.change_capacity (sz);
                       x_nz = sz;
                     }
-                  x.xdata(ii) = tmp;
-                  x.xridx(ii++) = j;
+                  x.xdata (ii) = tmp;
+                  x.xridx (ii++) = j;
                 }
             }
-          x.xcidx(i+1) = ii;
+          x.xcidx (i+1) = ii;
         }
       info = 0;
     }
@@ -807,7 +807,7 @@
       if (! q.ok ())
         return SparseComplexMatrix ();
       x = SparseComplexMatrix (nc, b_nc, b.nnz ());
-      x.xcidx(0) = 0;
+      x.xcidx (0) = 0;
       x_nz = b.nnz ();
       ii = 0;
       volatile octave_idx_type nbuf = (nc > q.S ()->m2 ? nc : q.S ()->m2);
@@ -826,7 +826,7 @@
           for (octave_idx_type j = nr; j < nbuf; j++)
             buf[j] = 0.;
           BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
           CXSPARSE_DNAME (_pvec) (q.S ()->q, Xx, buf, nr);
 #else
           CXSPARSE_DNAME (_pvec) (nr, q.S ()->Q, Xx, buf);
@@ -841,7 +841,7 @@
               END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
             }
           BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
           CXSPARSE_DNAME (_pvec) (q.S ()->pinv, buf, Xx, nc);
 #else
           CXSPARSE_DNAME (_pvec) (nc, q.S ()->Pinv, buf, Xx);
@@ -850,7 +850,7 @@
           for (octave_idx_type j = nr; j < nbuf; j++)
             buf[j] = 0.;
           BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
           CXSPARSE_DNAME (_pvec) (q.S ()->q, Xz, buf, nr);
 #else
           CXSPARSE_DNAME (_pvec) (nr, q.S ()->Q, Xz, buf);
@@ -865,7 +865,7 @@
               END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
             }
           BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
           CXSPARSE_DNAME (_pvec) (q.S ()->pinv, buf, Xz, nc);
 #else
           CXSPARSE_DNAME (_pvec) (nc, q.S ()->Pinv, buf, Xz);
@@ -885,11 +885,11 @@
                       x.change_capacity (sz);
                       x_nz = sz;
                     }
-                  x.xdata(ii) = tmp;
-                  x.xridx(ii++) = j;
+                  x.xdata (ii) = tmp;
+                  x.xridx (ii++) = j;
                 }
             }
-          x.xcidx(i+1) = ii;
+          x.xcidx (i+1) = ii;
         }
       info = 0;
     }
@@ -902,15 +902,15 @@
 }
 
 Matrix
-qrsolve(const SparseMatrix &a, const MArray<double> &b,
-        octave_idx_type &info)
+qrsolve (const SparseMatrix &a, const MArray<double> &b,
+         octave_idx_type &info)
 {
   return qrsolve (a, Matrix (b), info);
 }
 
 ComplexMatrix
-qrsolve(const SparseMatrix &a, const MArray<Complex> &b,
-        octave_idx_type &info)
+qrsolve (const SparseMatrix &a, const MArray<Complex> &b,
+         octave_idx_type &info)
 {
   return qrsolve (a, ComplexMatrix (b), info);
 }
--- a/liboctave/SparsedbleCHOL.cc
+++ b/liboctave/SparsedbleCHOL.cc
@@ -51,12 +51,12 @@
 
       if (typ == MatrixType::Upper)
         {
-          rinv = r.inverse(mattype, info, rcond, true, false);
+          rinv = r.inverse (mattype, info, rcond, true, false);
           retval = rinv.transpose () * rinv;
         }
       else if (typ == MatrixType::Lower)
         {
-          rinv = r.transpose ().inverse(mattype, info, rcond, true, false);
+          rinv = r.transpose ().inverse (mattype, info, rcond, true, false);
           retval = rinv.transpose () * rinv;
         }
       else
--- a/liboctave/SparsedbleLU.cc
+++ b/liboctave/SparsedbleLU.cc
@@ -311,7 +311,7 @@
         OCTAVE_LOCAL_BUFFER (octave_idx_type, qinit, nc);
 
         for (octave_idx_type i = 0; i < nc; i++)
-          qinit [i] = static_cast<octave_idx_type> (Qinit (i));
+          qinit[i] = static_cast<octave_idx_type> (Qinit (i));
 
         status = UMFPACK_DNAME (qsymbolic) (nr, nc, Ap, Ai, Ax,
                                        qinit, &Symbolic, control, info);
--- a/liboctave/boolSparse.cc
+++ b/liboctave/boolSparse.cc
@@ -55,11 +55,11 @@
     return false;
 
   for (octave_idx_type i = 0; i < nc + 1; i++)
-    if (cidx(i) != a.cidx(i))
+    if (cidx (i) != a.cidx (i))
         return false;
 
   for (octave_idx_type i = 0; i < nz; i++)
-    if (data(i) != a.data(i) || ridx(i) != a.ridx(i))
+    if (data (i) != a.data (i) || ridx (i) != a.ridx (i))
       return false;
 
   return true;
@@ -113,12 +113,12 @@
     {
       for (octave_idx_type j = 0; j < nr; j++)
         {
-          if (jj < cidx(i+1) && ridx(jj) == j)
+          if (jj < cidx (i+1) && ridx (jj) == j)
             jj++;
           else
             {
-              r.data(ii) = true;
-              r.ridx(ii++) = j;
+              r.data (ii) = true;
+              r.ridx (ii++) = j;
             }
         }
       r.cidx (i+1) = ii;
@@ -150,10 +150,10 @@
     {
       // Result is a row vector.
       retval = Sparse<bool> (1, nc);
-      retval.xcidx(0) = 0;
+      retval.xcidx (0) = 0;
       for (octave_idx_type i = 0; i < nc; i++)
-        retval.xcidx(i+1) = retval.xcidx(i) + (cidx(i+1) > cidx(i));
-      octave_idx_type new_nz = retval.xcidx(nc);
+        retval.xcidx (i+1) = retval.xcidx (i) + (cidx (i+1) > cidx (i));
+      octave_idx_type new_nz = retval.xcidx (nc);
       retval.change_capacity (new_nz);
       fill_or_memset (new_nz, static_cast<octave_idx_type> (0), retval.ridx ());
       fill_or_memset (new_nz, true, retval.data ());
@@ -166,7 +166,7 @@
           // We can use O(nr) memory.
           Array<bool> tmp (dim_vector (nr, 1), false);
           for (octave_idx_type i = 0; i < nz; i++)
-            tmp.xelem(ridx(i)) = true;
+            tmp.xelem (ridx (i)) = true;
           retval = tmp;
         }
       else
@@ -195,16 +195,16 @@
     {
       // Result is a row vector.
       retval = Sparse<double> (1, nc);
-      for(octave_idx_type i = 0; i < nc; i++)
-        retval.xcidx(i+1) = retval.xcidx(i) + (cidx(i+1) > cidx(i));
-      octave_idx_type new_nz = retval.xcidx(nc);
+      for (octave_idx_type i = 0; i < nc; i++)
+        retval.xcidx (i+1) = retval.xcidx (i) + (cidx (i+1) > cidx (i));
+      octave_idx_type new_nz = retval.xcidx (nc);
       retval.change_capacity (new_nz);
       fill_or_memset (new_nz, static_cast<octave_idx_type> (0), retval.ridx ());
-      for(octave_idx_type i = 0, k = 0; i < nc; i++)
+      for (octave_idx_type i = 0, k = 0; i < nc; i++)
         {
-          octave_idx_type c = cidx(i+1) - cidx(i);
+          octave_idx_type c = cidx (i+1) - cidx (i);
           if (c > 0)
-            retval.xdata(k++) = c;
+            retval.xdata (k++) = c;
         }
     }
   else if (dim == 1)
@@ -215,7 +215,7 @@
           // We can use O(nr) memory.
           Array<double> tmp (dim_vector (nr, 1), 0);
           for (octave_idx_type i = 0; i < nz; i++)
-            tmp.xelem(ridx(i)) += 1.0;
+            tmp.xelem (ridx (i)) += 1.0;
           retval = tmp;
         }
       else
@@ -246,8 +246,8 @@
 
   boolMatrix retval (nr, nc, false);
   for (octave_idx_type j = 0; j < nc; j++)
-    for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
-      retval.elem (ridx(i), j) = data (i);
+    for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
+      retval.elem (ridx (i), j) = data (i);
 
   return retval;
 }
@@ -262,8 +262,8 @@
    for (octave_idx_type j = 0; j < nc; j++)
      {
        octave_quit ();
-       for (octave_idx_type i = a.cidx(j); i < a.cidx(j+1); i++)
-         os << a.ridx(i) + 1 << " "  << j + 1 << " " << a.data(i) << "\n";
+       for (octave_idx_type i = a.cidx (j); i < a.cidx (j+1); i++)
+         os << a.ridx (i) + 1 << " "  << j + 1 << " " << a.data (i) << "\n";
      }
 
   return os;
--- a/liboctave/cmd-hist.cc
+++ b/liboctave/cmd-hist.cc
@@ -535,7 +535,7 @@
 command_history::process_histcontrol (const std::string& control_arg)
 {
   if (instance_ok ())
-    instance->do_process_histcontrol(control_arg);
+    instance->do_process_histcontrol (control_arg);
 }
 
 std::string
--- a/liboctave/dDiagMatrix.cc
+++ b/liboctave/dDiagMatrix.cc
@@ -362,7 +362,7 @@
 double
 DiagMatrix::rcond (void) const
 {
-  ColumnVector av  = diag (0).map<double> (fabs);
+  ColumnVector av = diag (0).map<double> (fabs);
   double amx = av.max (), amn = av.min ();
   return amx == 0 ? 0.0 : amn / amx;
 }
--- a/liboctave/dMatrix.cc
+++ b/liboctave/dMatrix.cc
@@ -763,7 +763,7 @@
       // Calculate the norm of the matrix, for later use.
       double anorm = 0;
       if (calc_cond)
-        anorm = retval.abs ().sum ().row(static_cast<octave_idx_type>(0)).max ();
+        anorm = retval.abs ().sum ().row (static_cast<octave_idx_type>(0)).max ();
 
       F77_XFCN (dgetrf, DGETRF, (nc, nc, tmp_data, nr, pipvt, info));
 
@@ -838,7 +838,7 @@
         }
 
       if (!mattype.is_hermitian ())
-        ret = finverse(mattype, info, rcon, force, calc_cond);
+        ret = finverse (mattype, info, rcon, force, calc_cond);
 
       if ((mattype.is_hermitian () || calc_cond) && rcon == 0.)
         ret = Matrix (rows (), columns (), octave_Inf);
@@ -1498,7 +1498,7 @@
               Array<octave_idx_type> ipvt (dim_vector (nr, 1));
               octave_idx_type *pipvt = ipvt.fortran_vec ();
 
-              if(anorm < 0.)
+              if (anorm < 0.)
                 anorm = atmp.abs ().sum ().
                   row(static_cast<octave_idx_type>(0)).max ();
 
@@ -1762,7 +1762,7 @@
           char job = 'L';
           Matrix atmp = *this;
           double *tmp_data = atmp.fortran_vec ();
-          anorm = atmp.abs ().sum ().row(static_cast<octave_idx_type>(0)).max ();
+          anorm = atmp.abs ().sum ().row (static_cast<octave_idx_type>(0)).max ();
 
           F77_XFCN (dpotrf, DPOTRF, (F77_CONST_CHAR_ARG2 (&job, 1), nr,
                                      tmp_data, nr, info
@@ -1838,8 +1838,8 @@
 
           Matrix atmp = *this;
           double *tmp_data = atmp.fortran_vec ();
-          if(anorm < 0.)
-            anorm = atmp.abs ().sum ().row(static_cast<octave_idx_type>(0)).max ();
+          if (anorm < 0.)
+            anorm = atmp.abs ().sum ().row (static_cast<octave_idx_type>(0)).max ();
 
           Array<double> z (dim_vector (4 * nc, 1));
           double *pz = z.fortran_vec ();
@@ -2062,7 +2062,7 @@
 {
   Matrix tmp (b);
   tmp = solve (typ, tmp, info, rcon, sing_handler, true, transt);
-  return tmp.column(static_cast<octave_idx_type> (0));
+  return tmp.column (static_cast<octave_idx_type> (0));
 }
 
 ComplexColumnVector
@@ -2094,7 +2094,7 @@
                solve_singularity_handler sing_handler, blas_trans_type transt) const
 {
   ComplexMatrix tmp (*this);
-  return tmp.solve(typ, b, info, rcon, sing_handler, transt);
+  return tmp.solve (typ, b, info, rcon, sing_handler, transt);
 }
 
 Matrix
--- a/liboctave/dNDArray.cc
+++ b/liboctave/dNDArray.cc
@@ -281,7 +281,7 @@
           octave_quit ();
 
           for (octave_idx_type i = 0; i < npts; i++)
-            tmp[i] = elem((i + k*npts)*stride + j*dist);
+            tmp[i] = elem ((i + k*npts)*stride + j*dist);
 
           F77_FUNC (zfftf, ZFFTF) (npts, tmp, pwsave);
 
@@ -328,7 +328,7 @@
           octave_quit ();
 
           for (octave_idx_type i = 0; i < npts; i++)
-            tmp[i] = elem((i + k*npts)*stride + j*dist);
+            tmp[i] = elem ((i + k*npts)*stride + j*dist);
 
           F77_FUNC (zfftb, ZFFTB) (npts, tmp, pwsave);
 
--- a/liboctave/dNDArray.h
+++ b/liboctave/dNDArray.h
@@ -64,6 +64,10 @@
 
   NDArray (const charNDArray&);
 
+  // For jit support only
+  NDArray (double *sdata, octave_idx_type slen, octave_idx_type *adims, void *arep)
+    : MArray<double> (sdata, slen, adims, arep) { }
+
   NDArray& operator = (const NDArray& a)
     {
       MArray<double>::operator = (a);
--- a/liboctave/dSparse.cc
+++ b/liboctave/dSparse.cc
@@ -177,7 +177,7 @@
         }
     }
   for (octave_idx_type i = l; i <= a.cols (); i++)
-    cidx(i) = j;
+    cidx (i) = j;
 }
 
 bool
@@ -194,11 +194,11 @@
     return false;
 
   for (octave_idx_type i = 0; i < nc + 1; i++)
-    if (cidx(i) != a.cidx(i))
+    if (cidx (i) != a.cidx (i))
         return false;
 
   for (octave_idx_type i = 0; i < nz; i++)
-    if (data(i) != a.data(i) || ridx(i) != a.ridx(i))
+    if (data (i) != a.data (i) || ridx (i) != a.ridx (i))
       return false;
 
   return true;
@@ -220,19 +220,19 @@
     {
       for (octave_idx_type j = 0; j < nc; j++)
         {
-          for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
-            {
-              octave_idx_type ri = ridx(i);
+          for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
+            {
+              octave_idx_type ri = ridx (i);
 
               if (ri != j)
                 {
                   bool found = false;
 
-                  for (octave_idx_type k = cidx(ri); k < cidx(ri+1); k++)
+                  for (octave_idx_type k = cidx (ri); k < cidx (ri+1); k++)
                     {
-                      if (ridx(k) == j)
+                      if (ridx (k) == j)
                         {
-                          if (data(i) == data(k))
+                          if (data (i) == data (k))
                             found = true;
                           break;
                         }
@@ -294,9 +294,9 @@
         {
           double tmp_max = octave_NaN;
           octave_idx_type idx_j = 0;
-          for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
-            {
-              if (ridx(i) != idx_j)
+          for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
+            {
+              if (ridx (i) != idx_j)
                 break;
               else
                 idx_j++;
@@ -305,7 +305,7 @@
           if (idx_j != nr)
             tmp_max = 0.;
 
-          for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
+          for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
             {
               double tmp = data (i);
 
@@ -344,30 +344,30 @@
     {
       idx_arg.resize (dim_vector  (nr, 1), 0);
 
-      for (octave_idx_type i = cidx(0); i < cidx(1); i++)
-        idx_arg.elem(ridx(i)) = -1;
+      for (octave_idx_type i = cidx (0); i < cidx (1); i++)
+        idx_arg.elem (ridx (i)) = -1;
 
       for (octave_idx_type j = 0; j < nc; j++)
         for (octave_idx_type i = 0; i < nr; i++)
           {
-            if (idx_arg.elem(i) != -1)
+            if (idx_arg.elem (i) != -1)
               continue;
             bool found = false;
-            for (octave_idx_type k = cidx(j); k < cidx(j+1); k++)
-              if (ridx(k) == i)
+            for (octave_idx_type k = cidx (j); k < cidx (j+1); k++)
+              if (ridx (k) == i)
                 {
                   found = true;
                   break;
                 }
 
             if (!found)
-              idx_arg.elem(i) = j;
+              idx_arg.elem (i) = j;
 
           }
 
       for (octave_idx_type j = 0; j < nc; j++)
         {
-          for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
+          for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
             {
               octave_idx_type ir = ridx (i);
               octave_idx_type ix = idx_arg.elem (ir);
@@ -382,7 +382,7 @@
 
       octave_idx_type nel = 0;
       for (octave_idx_type j = 0; j < nr; j++)
-        if (idx_arg.elem(j) == -1 || elem (j, idx_arg.elem (j)) != 0.)
+        if (idx_arg.elem (j) == -1 || elem (j, idx_arg.elem (j)) != 0.)
           nel++;
 
       result = SparseMatrix (nr, 1, nel);
@@ -443,9 +443,9 @@
         {
           double tmp_min = octave_NaN;
           octave_idx_type idx_j = 0;
-          for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
-            {
-              if (ridx(i) != idx_j)
+          for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
+            {
+              if (ridx (i) != idx_j)
                 break;
               else
                 idx_j++;
@@ -454,7 +454,7 @@
           if (idx_j != nr)
             tmp_min = 0.;
 
-          for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
+          for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
             {
               double tmp = data (i);
 
@@ -493,30 +493,30 @@
     {
       idx_arg.resize (dim_vector (nr, 1), 0);
 
-      for (octave_idx_type i = cidx(0); i < cidx(1); i++)
-        idx_arg.elem(ridx(i)) = -1;
+      for (octave_idx_type i = cidx (0); i < cidx (1); i++)
+        idx_arg.elem (ridx (i)) = -1;
 
       for (octave_idx_type j = 0; j < nc; j++)
         for (octave_idx_type i = 0; i < nr; i++)
           {
-            if (idx_arg.elem(i) != -1)
+            if (idx_arg.elem (i) != -1)
               continue;
             bool found = false;
-            for (octave_idx_type k = cidx(j); k < cidx(j+1); k++)
-              if (ridx(k) == i)
+            for (octave_idx_type k = cidx (j); k < cidx (j+1); k++)
+              if (ridx (k) == i)
                 {
                   found = true;
                   break;
                 }
 
             if (!found)
-              idx_arg.elem(i) = j;
+              idx_arg.elem (i) = j;
 
           }
 
       for (octave_idx_type j = 0; j < nc; j++)
         {
-          for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
+          for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
             {
               octave_idx_type ir = ridx (i);
               octave_idx_type ix = idx_arg.elem (ir);
@@ -531,7 +531,7 @@
 
       octave_idx_type nel = 0;
       for (octave_idx_type j = 0; j < nr; j++)
-        if (idx_arg.elem(j) == -1 || elem (j, idx_arg.elem (j)) != 0.)
+        if (idx_arg.elem (j) == -1 || elem (j, idx_arg.elem (j)) != 0.)
           nel++;
 
       result = SparseMatrix (nr, 1, nel);
@@ -620,12 +620,12 @@
   SparseMatrix r (nr, nc, nz);
 
   for (octave_idx_type i = 0; i < nc +1; i++)
-    r.cidx(i) = a.cidx(i);
+    r.cidx (i) = a.cidx (i);
 
   for (octave_idx_type i = 0; i < nz; i++)
     {
-      r.data(i) = std::real (a.data(i));
-      r.ridx(i) = a.ridx(i);
+      r.data (i) = std::real (a.data (i));
+      r.ridx (i) = a.ridx (i);
     }
 
   return r;
@@ -640,12 +640,12 @@
   SparseMatrix r (nr, nc, nz);
 
   for (octave_idx_type i = 0; i < nc +1; i++)
-    r.cidx(i) = a.cidx(i);
+    r.cidx (i) = a.cidx (i);
 
   for (octave_idx_type i = 0; i < nz; i++)
     {
-      r.data(i) = std::imag (a.data(i));
-      r.ridx(i) = a.ridx(i);
+      r.data (i) = std::imag (a.data (i));
+      r.ridx (i) = a.ridx (i);
     }
 
   return r;
@@ -667,7 +667,7 @@
 
       for (octave_idx_type j = 0; j < nc; j++)
         for (octave_idx_type i = y.cidx (j); i < y.cidx (j+1); i++)
-          tmp.elem (y.ridx(i), j) = atan2 (x, y.data(i));
+          tmp.elem (y.ridx (i), j) = atan2 (x, y.data (i));
 
       return SparseMatrix (tmp);
     }
@@ -683,12 +683,12 @@
   SparseMatrix retval (nr, nc, nz);
 
   octave_idx_type ii = 0;
-  retval.xcidx(0) = 0;
+  retval.xcidx (0) = 0;
   for (octave_idx_type i = 0; i < nc; i++)
     {
-      for (octave_idx_type j = x.cidx(i); j < x.cidx(i+1); j++)
+      for (octave_idx_type j = x.cidx (i); j < x.cidx (i+1); j++)
         {
-          double tmp = atan2 (x.data(j), y);
+          double tmp = atan2 (x.data (j), y);
           if (tmp != 0.)
             {
               retval.xdata (ii) = tmp;
@@ -737,39 +737,39 @@
           r.cidx (0) = 0;
           for (octave_idx_type i = 0 ; i < x_nc ; i++)
             {
-              octave_idx_type  ja = x.cidx(i);
-              octave_idx_type  ja_max = x.cidx(i+1);
+              octave_idx_type  ja = x.cidx (i);
+              octave_idx_type  ja_max = x.cidx (i+1);
               bool ja_lt_max= ja < ja_max;
 
-              octave_idx_type  jb = y.cidx(i);
-              octave_idx_type  jb_max = y.cidx(i+1);
+              octave_idx_type  jb = y.cidx (i);
+              octave_idx_type  jb_max = y.cidx (i+1);
               bool jb_lt_max = jb < jb_max;
 
               while (ja_lt_max || jb_lt_max )
                 {
                   octave_quit ();
                   if ((! jb_lt_max) ||
-                      (ja_lt_max && (x.ridx(ja) < y.ridx(jb))))
+                      (ja_lt_max && (x.ridx (ja) < y.ridx (jb))))
                     {
-                      r.ridx(jx) = x.ridx(ja);
-                      r.data(jx) = atan2 (x.data(ja), 0.);
+                      r.ridx (jx) = x.ridx (ja);
+                      r.data (jx) = atan2 (x.data (ja), 0.);
                       jx++;
                       ja++;
                       ja_lt_max= ja < ja_max;
                     }
                   else if (( !ja_lt_max ) ||
-                           (jb_lt_max && (y.ridx(jb) < x.ridx(ja)) ) )
+                           (jb_lt_max && (y.ridx (jb) < x.ridx (ja)) ) )
                     {
                       jb++;
                       jb_lt_max= jb < jb_max;
                     }
                   else
                     {
-                      double tmp = atan2 (x.data(ja), y.data(jb));
+                      double tmp = atan2 (x.data (ja), y.data (jb));
                       if (tmp != 0.)
                         {
-                          r.data(jx) = tmp;
-                          r.ridx(jx) = x.ridx(ja);
+                          r.data (jx) = tmp;
+                          r.ridx (jx) = x.ridx (ja);
                           jx++;
                         }
                       ja++;
@@ -778,7 +778,7 @@
                       jb_lt_max= jb < jb_max;
                     }
                 }
-              r.cidx(i+1) = jx;
+              r.cidx (i+1) = jx;
             }
 
           r.maybe_compress ();
@@ -849,7 +849,7 @@
               double dmax = 0., dmin = octave_Inf;
               for (octave_idx_type i = 0; i < nr; i++)
                 {
-                  double tmp = fabs(v[i]);
+                  double tmp = fabs (v[i]);
                   if (tmp > dmax)
                     dmax = tmp;
                   if (tmp < dmin)
@@ -899,8 +899,8 @@
               for (octave_idx_type j = 0; j < nr; j++)
                 {
                   double atmp = 0.;
-                  for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
-                    atmp += fabs(data(i));
+                  for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
+                    atmp += fabs (data (i));
                   if (atmp > anorm)
                     anorm = atmp;
                 }
@@ -925,9 +925,9 @@
                       retval.change_capacity (nz2);
                     }
 
-                  retval.xcidx(i) = cx;
-                  retval.xridx(cx) = i;
-                  retval.xdata(cx) = 1.0;
+                  retval.xcidx (i) = cx;
+                  retval.xridx (cx) = i;
+                  retval.xdata (cx) = 1.0;
                   cx++;
 
                   // iterate accross columns of input matrix
@@ -935,11 +935,11 @@
                     {
                       double v = 0.;
                       // iterate to calculate sum
-                      octave_idx_type colXp = retval.xcidx(i);
-                      octave_idx_type colUp = cidx(j);
+                      octave_idx_type colXp = retval.xcidx (i);
+                      octave_idx_type colUp = cidx (j);
                       octave_idx_type rpX, rpU;
 
-                      if (cidx(j) == cidx(j+1))
+                      if (cidx (j) == cidx (j+1))
                         {
                           (*current_liboctave_error_handler)
                             ("division by zero");
@@ -949,8 +949,8 @@
                       do
                         {
                           octave_quit ();
-                          rpX = retval.xridx(colXp);
-                          rpU = ridx(colUp);
+                          rpX = retval.xridx (colXp);
+                          rpU = ridx (colUp);
 
                           if (rpX < rpU)
                             colXp++;
@@ -958,7 +958,7 @@
                             colUp++;
                           else
                             {
-                              v -= retval.xdata(colXp) * data(colUp);
+                              v -= retval.xdata (colXp) * data (colUp);
                               colXp++;
                               colUp++;
                             }
@@ -967,11 +967,11 @@
 
                       // get A(m,m)
                       if (typ == MatrixType::Upper)
-                        colUp = cidx(j+1) - 1;
+                        colUp = cidx (j+1) - 1;
                       else
-                        colUp = cidx(j);
-                      double pivot = data(colUp);
-                      if (pivot == 0. || ridx(colUp) != j)
+                        colUp = cidx (j);
+                      double pivot = data (colUp);
+                      if (pivot == 0. || ridx (colUp) != j)
                         {
                           (*current_liboctave_error_handler)
                             ("division by zero");
@@ -986,8 +986,8 @@
                               retval.change_capacity (nz2);
                             }
 
-                          retval.xridx(cx) = j;
-                          retval.xdata(cx) = v / pivot;
+                          retval.xridx (cx) = j;
+                          retval.xdata (cx) = v / pivot;
                           cx++;
                         }
                     }
@@ -995,11 +995,11 @@
                   // get A(m,m)
                   octave_idx_type colUp;
                   if (typ == MatrixType::Upper)
-                    colUp = cidx(i+1) - 1;
+                    colUp = cidx (i+1) - 1;
                   else
-                    colUp = cidx(i);
-                  double pivot = data(colUp);
-                  if (pivot == 0. || ridx(colUp) != i)
+                    colUp = cidx (i);
+                  double pivot = data (colUp);
+                  if (pivot == 0. || ridx (colUp) != i)
                     {
                       (*current_liboctave_error_handler) ("division by zero");
                       goto inverse_singular;
@@ -1007,9 +1007,9 @@
 
                   if (pivot != 1.0)
                     for (octave_idx_type j = cx_colstart; j < cx; j++)
-                      retval.xdata(j) /= pivot;
-                }
-              retval.xcidx(nr) = cx;
+                      retval.xdata (j) /= pivot;
+                }
+              retval.xcidx (nr) = cx;
               retval.maybe_compress ();
             }
           else
@@ -1053,19 +1053,19 @@
                       double v = 0.;
                       octave_idx_type jidx = perm[j];
                       // iterate to calculate sum
-                      for (octave_idx_type k = cidx(jidx);
-                           k < cidx(jidx+1); k++)
+                      for (octave_idx_type k = cidx (jidx);
+                           k < cidx (jidx+1); k++)
                         {
                           octave_quit ();
-                          v -= work[ridx(k)] * data(k);
+                          v -= work[ridx (k)] * data (k);
                         }
 
                       // get A(m,m)
                       double pivot;
                       if (typ == MatrixType::Permuted_Upper)
-                        pivot = data(cidx(jidx+1) - 1);
+                        pivot = data (cidx (jidx+1) - 1);
                       else
-                        pivot = data(cidx(jidx));
+                        pivot = data (cidx (jidx));
                       if (pivot == 0.)
                         {
                           (*current_liboctave_error_handler)
@@ -1079,11 +1079,11 @@
                   // get A(m,m)
                   octave_idx_type colUp;
                   if (typ == MatrixType::Permuted_Upper)
-                    colUp = cidx(perm[iidx]+1) - 1;
+                    colUp = cidx (perm[iidx]+1) - 1;
                   else
-                    colUp = cidx(perm[iidx]);
-
-                  double pivot = data(colUp);
+                    colUp = cidx (perm[iidx]);
+
+                  double pivot = data (colUp);
                   if (pivot == 0.)
                     {
                       (*current_liboctave_error_handler)
@@ -1106,16 +1106,16 @@
                       retval.change_capacity (nz2);
                     }
 
-                  retval.xcidx(i) = cx;
+                  retval.xcidx (i) = cx;
                   for (octave_idx_type j = iidx; j < nr; j++)
                     if (work[j] != 0.)
                       {
-                        retval.xridx(cx) = j;
-                        retval.xdata(cx++) = work[j];
+                        retval.xridx (cx) = j;
+                        retval.xdata (cx++) = work[j];
                       }
                 }
 
-              retval.xcidx(nr) = cx;
+              retval.xcidx (nr) = cx;
               retval.maybe_compress ();
             }
 
@@ -1125,9 +1125,9 @@
               for (octave_idx_type j = 0; j < nr; j++)
                 {
                   double atmp = 0.;
-                  for (octave_idx_type i = retval.cidx(j);
-                       i < retval.cidx(j+1); i++)
-                    atmp += fabs(retval.data(i));
+                  for (octave_idx_type i = retval.cidx (j);
+                       i < retval.cidx (j+1); i++)
+                    atmp += fabs (retval.data (i));
                   if (atmp > ainvnorm)
                     ainvnorm = atmp;
                 }
@@ -1175,7 +1175,7 @@
             {
               double rcond2;
               SparseMatrix Q = fact.Q ();
-              SparseMatrix InvL = fact.L ().transpose ().tinverse(tmp_typ,
+              SparseMatrix InvL = fact.L ().transpose ().tinverse (tmp_typ,
                                            info, rcond2, true, false);
               ret = Q * InvL.transpose () * InvL * Q.transpose ();
             }
@@ -1198,9 +1198,9 @@
           SparseLU fact (*this, Qinit, Matrix (), false, false);
           rcond = fact.rcond ();
           double rcond2;
-          SparseMatrix InvL = fact.L ().transpose ().tinverse(tmp_typ,
+          SparseMatrix InvL = fact.L ().transpose ().tinverse (tmp_typ,
                                            info, rcond2, true, false);
-          SparseMatrix InvU = fact.U ().tinverse(tmp_typ, info, rcond2,
+          SparseMatrix InvU = fact.U ().tinverse (tmp_typ, info, rcond2,
                                            true, false).transpose ();
           ret = fact.Pc ().transpose () * InvU * InvL * fact.Pr ();
         }
@@ -1374,15 +1374,15 @@
           else
             for (octave_idx_type j = 0; j < b.cols (); j++)
               for (octave_idx_type k = 0; k < nc; k++)
-                for (octave_idx_type i = cidx(k); i < cidx(k+1); i++)
-                  retval(k,j) = b(ridx(i),j) / data (i);
+                for (octave_idx_type i = cidx (k); i < cidx (k+1); i++)
+                  retval(k,j) = b(ridx (i),j) / data (i);
 
           if (calc_cond)
             {
               double dmax = 0., dmin = octave_Inf;
               for (octave_idx_type i = 0; i < nm; i++)
                 {
-                  double tmp = fabs(data(i));
+                  double tmp = fabs (data (i));
                   if (tmp > dmax)
                     dmax = tmp;
                   if (tmp < dmin)
@@ -1430,30 +1430,30 @@
           octave_idx_type b_nz = b.nnz ();
           retval = SparseMatrix (nc, b_nc, b_nz);
 
-          retval.xcidx(0) = 0;
+          retval.xcidx (0) = 0;
           octave_idx_type ii = 0;
           if (typ == MatrixType::Diagonal)
             for (octave_idx_type j = 0; j < b_nc; j++)
               {
-                for (octave_idx_type i = b.cidx(j); i < b.cidx(j+1); i++)
+                for (octave_idx_type i = b.cidx (j); i < b.cidx (j+1); i++)
                   {
-                    if (b.ridx(i) >= nm)
+                    if (b.ridx (i) >= nm)
                       break;
-                    retval.xridx (ii) = b.ridx(i);
-                    retval.xdata (ii++) = b.data(i) / data (b.ridx (i));
+                    retval.xridx (ii) = b.ridx (i);
+                    retval.xdata (ii++) = b.data (i) / data (b.ridx (i));
                   }
-                retval.xcidx(j+1) = ii;
+                retval.xcidx (j+1) = ii;
               }
           else
             for (octave_idx_type j = 0; j < b_nc; j++)
               {
                 for (octave_idx_type l = 0; l < nc; l++)
-                  for (octave_idx_type i = cidx(l); i < cidx(l+1); i++)
+                  for (octave_idx_type i = cidx (l); i < cidx (l+1); i++)
                     {
                       bool found = false;
                       octave_idx_type k;
-                      for (k = b.cidx(j); k < b.cidx(j+1); k++)
-                        if (ridx(i) == b.ridx(k))
+                      for (k = b.cidx (j); k < b.cidx (j+1); k++)
+                        if (ridx (i) == b.ridx (k))
                           {
                             found = true;
                             break;
@@ -1461,10 +1461,10 @@
                       if (found)
                         {
                           retval.xridx (ii) = l;
-                          retval.xdata (ii++) = b.data(k) / data (i);
+                          retval.xdata (ii++) = b.data (k) / data (i);
                         }
                     }
-                retval.xcidx(j+1) = ii;
+                retval.xcidx (j+1) = ii;
               }
 
           if (calc_cond)
@@ -1472,7 +1472,7 @@
               double dmax = 0., dmin = octave_Inf;
               for (octave_idx_type i = 0; i < nm; i++)
                 {
-                  double tmp = fabs(data(i));
+                  double tmp = fabs (data (i));
                   if (tmp > dmax)
                     dmax = tmp;
                   if (tmp < dmin)
@@ -1524,15 +1524,15 @@
           else
             for (octave_idx_type j = 0; j < b.cols (); j++)
               for (octave_idx_type k = 0; k < nc; k++)
-                for (octave_idx_type i = cidx(k); i < cidx(k+1); i++)
-                  retval(k,j) = b(ridx(i),j) / data (i);
+                for (octave_idx_type i = cidx (k); i < cidx (k+1); i++)
+                  retval(k,j) = b(ridx (i),j) / data (i);
 
           if (calc_cond)
             {
               double dmax = 0., dmin = octave_Inf;
               for (octave_idx_type i = 0; i < nm; i++)
                 {
-                  double tmp = fabs(data(i));
+                  double tmp = fabs (data (i));
                   if (tmp > dmax)
                     dmax = tmp;
                   if (tmp < dmin)
@@ -1580,30 +1580,30 @@
           octave_idx_type b_nz = b.nnz ();
           retval = SparseComplexMatrix (nc, b_nc, b_nz);
 
-          retval.xcidx(0) = 0;
+          retval.xcidx (0) = 0;
           octave_idx_type ii = 0;
           if (typ == MatrixType::Diagonal)
             for (octave_idx_type j = 0; j < b.cols (); j++)
               {
-                for (octave_idx_type i = b.cidx(j); i < b.cidx(j+1); i++)
+                for (octave_idx_type i = b.cidx (j); i < b.cidx (j+1); i++)
                   {
-                    if (b.ridx(i) >= nm)
+                    if (b.ridx (i) >= nm)
                       break;
-                    retval.xridx (ii) = b.ridx(i);
-                    retval.xdata (ii++) = b.data(i) / data (b.ridx (i));
+                    retval.xridx (ii) = b.ridx (i);
+                    retval.xdata (ii++) = b.data (i) / data (b.ridx (i));
                   }
-                retval.xcidx(j+1) = ii;
+                retval.xcidx (j+1) = ii;
               }
           else
             for (octave_idx_type j = 0; j < b.cols (); j++)
               {
                 for (octave_idx_type l = 0; l < nc; l++)
-                  for (octave_idx_type i = cidx(l); i < cidx(l+1); i++)
+                  for (octave_idx_type i = cidx (l); i < cidx (l+1); i++)
                     {
                       bool found = false;
                       octave_idx_type k;
-                      for (k = b.cidx(j); k < b.cidx(j+1); k++)
-                        if (ridx(i) == b.ridx(k))
+                      for (k = b.cidx (j); k < b.cidx (j+1); k++)
+                        if (ridx (i) == b.ridx (k))
                           {
                             found = true;
                             break;
@@ -1611,10 +1611,10 @@
                       if (found)
                         {
                           retval.xridx (ii) = l;
-                          retval.xdata (ii++) = b.data(k) / data (i);
+                          retval.xdata (ii++) = b.data (k) / data (i);
                         }
                     }
-                retval.xcidx(j+1) = ii;
+                retval.xcidx (j+1) = ii;
               }
 
           if (calc_cond)
@@ -1622,7 +1622,7 @@
               double dmax = 0., dmin = octave_Inf;
               for (octave_idx_type i = 0; i < nm; i++)
                 {
-                  double tmp = fabs(data(i));
+                  double tmp = fabs (data (i));
                   if (tmp > dmax)
                     dmax = tmp;
                   if (tmp < dmin)
@@ -1678,8 +1678,8 @@
               for (octave_idx_type j = 0; j < nc; j++)
                 {
                   double atmp = 0.;
-                  for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
-                    atmp += fabs(data(i));
+                  for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
+                    atmp += fabs (data (i));
                   if (atmp > anorm)
                     anorm = atmp;
                 }
@@ -1704,20 +1704,20 @@
 
                       if (work[k] != 0.)
                         {
-                          if (ridx(cidx(kidx+1)-1) != k ||
-                              data(cidx(kidx+1)-1) == 0.)
+                          if (ridx (cidx (kidx+1)-1) != k ||
+                              data (cidx (kidx+1)-1) == 0.)
                             {
                               err = -2;
                               goto triangular_error;
                             }
 
-                          double tmp = work[k] / data(cidx(kidx+1)-1);
+                          double tmp = work[k] / data (cidx (kidx+1)-1);
                           work[k] = tmp;
-                          for (octave_idx_type i = cidx(kidx);
-                               i < cidx(kidx+1)-1; i++)
+                          for (octave_idx_type i = cidx (kidx);
+                               i < cidx (kidx+1)-1; i++)
                             {
-                              octave_idx_type iidx = ridx(i);
-                              work[iidx] = work[iidx] - tmp * data(i);
+                              octave_idx_type iidx = ridx (i);
+                              work[iidx] = work[iidx] - tmp * data (i);
                             }
                         }
                     }
@@ -1742,20 +1742,20 @@
 
                           if (work[k] != 0.)
                             {
-                              double tmp = work[k] / data(cidx(iidx+1)-1);
+                              double tmp = work[k] / data (cidx (iidx+1)-1);
                               work[k] = tmp;
-                              for (octave_idx_type i = cidx(iidx);
-                                   i < cidx(iidx+1)-1; i++)
+                              for (octave_idx_type i = cidx (iidx);
+                                   i < cidx (iidx+1)-1; i++)
                                 {
-                                  octave_idx_type idx2 = ridx(i);
-                                  work[idx2] = work[idx2] - tmp * data(i);
+                                  octave_idx_type idx2 = ridx (i);
+                                  work[idx2] = work[idx2] - tmp * data (i);
                                 }
                             }
                         }
                       double atmp = 0;
                       for (octave_idx_type i = 0; i < j+1; i++)
                         {
-                          atmp += fabs(work[i]);
+                          atmp += fabs (work[i]);
                           work[i] = 0.;
                         }
                       if (atmp > ainvnorm)
@@ -1780,19 +1780,19 @@
                     {
                       if (work[k] != 0.)
                         {
-                          if (ridx(cidx(k+1)-1) != k ||
-                              data(cidx(k+1)-1) == 0.)
+                          if (ridx (cidx (k+1)-1) != k ||
+                              data (cidx (k+1)-1) == 0.)
                             {
                               err = -2;
                               goto triangular_error;
                             }
 
-                          double tmp = work[k] / data(cidx(k+1)-1);
+                          double tmp = work[k] / data (cidx (k+1)-1);
                           work[k] = tmp;
-                          for (octave_idx_type i = cidx(k); i < cidx(k+1)-1; i++)
+                          for (octave_idx_type i = cidx (k); i < cidx (k+1)-1; i++)
                             {
-                              octave_idx_type iidx = ridx(i);
-                              work[iidx] = work[iidx] - tmp * data(i);
+                              octave_idx_type iidx = ridx (i);
+                              work[iidx] = work[iidx] - tmp * data (i);
                             }
                         }
                     }
@@ -1815,19 +1815,19 @@
                         {
                           if (work[k] != 0.)
                             {
-                              double tmp = work[k] / data(cidx(k+1)-1);
+                              double tmp = work[k] / data (cidx (k+1)-1);
                               work[k] = tmp;
-                              for (octave_idx_type i = cidx(k); i < cidx(k+1)-1; i++)
+                              for (octave_idx_type i = cidx (k); i < cidx (k+1)-1; i++)
                                 {
-                                  octave_idx_type iidx = ridx(i);
-                                  work[iidx] = work[iidx] - tmp * data(i);
+                                  octave_idx_type iidx = ridx (i);
+                                  work[iidx] = work[iidx] - tmp * data (i);
                                 }
                             }
                         }
                       double atmp = 0;
                       for (octave_idx_type i = 0; i < j+1; i++)
                         {
-                          atmp += fabs(work[i]);
+                          atmp += fabs (work[i]);
                           work[i] = 0.;
                         }
                       if (atmp > ainvnorm)
@@ -1912,8 +1912,8 @@
               for (octave_idx_type j = 0; j < nc; j++)
                 {
                   double atmp = 0.;
-                  for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
-                    atmp += fabs(data(i));
+                  for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
+                    atmp += fabs (data (i));
                   if (atmp > anorm)
                     anorm = atmp;
                 }
@@ -1922,7 +1922,7 @@
           octave_idx_type b_nc = b.cols ();
           octave_idx_type b_nz = b.nnz ();
           retval = SparseMatrix (nc, b_nc, b_nz);
-          retval.xcidx(0) = 0;
+          retval.xcidx (0) = 0;
           octave_idx_type ii = 0;
           octave_idx_type x_nz = b_nz;
 
@@ -1939,8 +1939,8 @@
                 {
                   for (octave_idx_type i = 0; i < nm; i++)
                     work[i] = 0.;
-                  for (octave_idx_type i = b.cidx(j); i < b.cidx(j+1); i++)
-                    work[b.ridx(i)] = b.data(i);
+                  for (octave_idx_type i = b.cidx (j); i < b.cidx (j+1); i++)
+                    work[b.ridx (i)] = b.data (i);
 
                   for (octave_idx_type k = nc-1; k >= 0; k--)
                     {
@@ -1948,20 +1948,20 @@
 
                       if (work[k] != 0.)
                         {
-                          if (ridx(cidx(kidx+1)-1) != k ||
-                              data(cidx(kidx+1)-1) == 0.)
+                          if (ridx (cidx (kidx+1)-1) != k ||
+                              data (cidx (kidx+1)-1) == 0.)
                             {
                               err = -2;
                               goto triangular_error;
                             }
 
-                          double tmp = work[k] / data(cidx(kidx+1)-1);
+                          double tmp = work[k] / data (cidx (kidx+1)-1);
                           work[k] = tmp;
-                          for (octave_idx_type i = cidx(kidx);
-                               i < cidx(kidx+1)-1; i++)
+                          for (octave_idx_type i = cidx (kidx);
+                               i < cidx (kidx+1)-1; i++)
                             {
-                              octave_idx_type iidx = ridx(i);
-                              work[iidx] = work[iidx] - tmp * data(i);
+                              octave_idx_type iidx = ridx (i);
+                              work[iidx] = work[iidx] - tmp * data (i);
                             }
                         }
                     }
@@ -1984,10 +1984,10 @@
                   for (octave_idx_type i = 0; i < nc; i++)
                     if (work[rperm[i]] != 0.)
                       {
-                        retval.xridx(ii) = i;
-                        retval.xdata(ii++) = work[rperm[i]];
+                        retval.xridx (ii) = i;
+                        retval.xdata (ii++) = work[rperm[i]];
                       }
-                  retval.xcidx(j+1) = ii;
+                  retval.xcidx (j+1) = ii;
                 }
 
               retval.maybe_compress ();
@@ -2008,20 +2008,20 @@
 
                           if (work[k] != 0.)
                             {
-                              double tmp = work[k] / data(cidx(iidx+1)-1);
+                              double tmp = work[k] / data (cidx (iidx+1)-1);
                               work[k] = tmp;
-                              for (octave_idx_type i = cidx(iidx);
-                                   i < cidx(iidx+1)-1; i++)
+                              for (octave_idx_type i = cidx (iidx);
+                                   i < cidx (iidx+1)-1; i++)
                                 {
-                                  octave_idx_type idx2 = ridx(i);
-                                  work[idx2] = work[idx2] - tmp * data(i);
+                                  octave_idx_type idx2 = ridx (i);
+                                  work[idx2] = work[idx2] - tmp * data (i);
                                 }
                             }
                         }
                       double atmp = 0;
                       for (octave_idx_type i = 0; i < j+1; i++)
                         {
-                          atmp += fabs(work[i]);
+                          atmp += fabs (work[i]);
                           work[i] = 0.;
                         }
                       if (atmp > ainvnorm)
@@ -2038,26 +2038,26 @@
                 {
                   for (octave_idx_type i = 0; i < nm; i++)
                     work[i] = 0.;
-                  for (octave_idx_type i = b.cidx(j); i < b.cidx(j+1); i++)
-                    work[b.ridx(i)] = b.data(i);
+                  for (octave_idx_type i = b.cidx (j); i < b.cidx (j+1); i++)
+                    work[b.ridx (i)] = b.data (i);
 
                   for (octave_idx_type k = nc-1; k >= 0; k--)
                     {
                       if (work[k] != 0.)
                         {
-                          if (ridx(cidx(k+1)-1) != k ||
-                              data(cidx(k+1)-1) == 0.)
+                          if (ridx (cidx (k+1)-1) != k ||
+                              data (cidx (k+1)-1) == 0.)
                             {
                               err = -2;
                               goto triangular_error;
                             }
 
-                          double tmp = work[k] / data(cidx(k+1)-1);
+                          double tmp = work[k] / data (cidx (k+1)-1);
                           work[k] = tmp;
-                          for (octave_idx_type i = cidx(k); i < cidx(k+1)-1; i++)
+                          for (octave_idx_type i = cidx (k); i < cidx (k+1)-1; i++)
                             {
-                              octave_idx_type iidx = ridx(i);
-                              work[iidx] = work[iidx] - tmp * data(i);
+                              octave_idx_type iidx = ridx (i);
+                              work[iidx] = work[iidx] - tmp * data (i);
                             }
                         }
                     }
@@ -2080,10 +2080,10 @@
                   for (octave_idx_type i = 0; i < nc; i++)
                     if (work[i] != 0.)
                       {
-                        retval.xridx(ii) = i;
-                        retval.xdata(ii++) = work[i];
+                        retval.xridx (ii) = i;
+                        retval.xdata (ii++) = work[i];
                       }
-                  retval.xcidx(j+1) = ii;
+                  retval.xcidx (j+1) = ii;
                 }
 
               retval.maybe_compress ();
@@ -2102,20 +2102,20 @@
                         {
                           if (work[k] != 0.)
                             {
-                              double tmp = work[k] / data(cidx(k+1)-1);
+                              double tmp = work[k] / data (cidx (k+1)-1);
                               work[k] = tmp;
-                              for (octave_idx_type i = cidx(k);
-                                   i < cidx(k+1)-1; i++)
+                              for (octave_idx_type i = cidx (k);
+                                   i < cidx (k+1)-1; i++)
                                 {
-                                  octave_idx_type iidx = ridx(i);
-                                  work[iidx] = work[iidx] - tmp * data(i);
+                                  octave_idx_type iidx = ridx (i);
+                                  work[iidx] = work[iidx] - tmp * data (i);
                                 }
                             }
                         }
                       double atmp = 0;
                       for (octave_idx_type i = 0; i < j+1; i++)
                         {
-                          atmp += fabs(work[i]);
+                          atmp += fabs (work[i]);
                           work[i] = 0.;
                         }
                       if (atmp > ainvnorm)
@@ -2200,8 +2200,8 @@
               for (octave_idx_type j = 0; j < nc; j++)
                 {
                   double atmp = 0.;
-                  for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
-                    atmp += fabs(data(i));
+                  for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
+                    atmp += fabs (data (i));
                   if (atmp > anorm)
                     anorm = atmp;
                 }
@@ -2226,20 +2226,20 @@
 
                       if (cwork[k] != 0.)
                         {
-                          if (ridx(cidx(kidx+1)-1) != k ||
-                              data(cidx(kidx+1)-1) == 0.)
+                          if (ridx (cidx (kidx+1)-1) != k ||
+                              data (cidx (kidx+1)-1) == 0.)
                             {
                               err = -2;
                               goto triangular_error;
                             }
 
-                          Complex tmp = cwork[k] / data(cidx(kidx+1)-1);
+                          Complex tmp = cwork[k] / data (cidx (kidx+1)-1);
                           cwork[k] = tmp;
-                          for (octave_idx_type i = cidx(kidx);
-                               i < cidx(kidx+1)-1; i++)
+                          for (octave_idx_type i = cidx (kidx);
+                               i < cidx (kidx+1)-1; i++)
                             {
-                              octave_idx_type iidx = ridx(i);
-                              cwork[iidx] = cwork[iidx] - tmp * data(i);
+                              octave_idx_type iidx = ridx (i);
+                              cwork[iidx] = cwork[iidx] - tmp * data (i);
                             }
                         }
                     }
@@ -2265,20 +2265,20 @@
 
                           if (work[k] != 0.)
                             {
-                              double tmp = work[k] / data(cidx(iidx+1)-1);
+                              double tmp = work[k] / data (cidx (iidx+1)-1);
                               work[k] = tmp;
-                              for (octave_idx_type i = cidx(iidx);
-                                   i < cidx(iidx+1)-1; i++)
+                              for (octave_idx_type i = cidx (iidx);
+                                   i < cidx (iidx+1)-1; i++)
                                 {
-                                  octave_idx_type idx2 = ridx(i);
-                                  work[idx2] = work[idx2] - tmp * data(i);
+                                  octave_idx_type idx2 = ridx (i);
+                                  work[idx2] = work[idx2] - tmp * data (i);
                                 }
                             }
                         }
                       double atmp = 0;
                       for (octave_idx_type i = 0; i < j+1; i++)
                         {
-                          atmp += fabs(work[i]);
+                          atmp += fabs (work[i]);
                           work[i] = 0.;
                         }
                       if (atmp > ainvnorm)
@@ -2303,19 +2303,19 @@
                     {
                       if (cwork[k] != 0.)
                         {
-                          if (ridx(cidx(k+1)-1) != k ||
-                              data(cidx(k+1)-1) == 0.)
+                          if (ridx (cidx (k+1)-1) != k ||
+                              data (cidx (k+1)-1) == 0.)
                             {
                               err = -2;
                               goto triangular_error;
                             }
 
-                          Complex tmp = cwork[k] / data(cidx(k+1)-1);
+                          Complex tmp = cwork[k] / data (cidx (k+1)-1);
                           cwork[k] = tmp;
-                          for (octave_idx_type i = cidx(k); i < cidx(k+1)-1; i++)
+                          for (octave_idx_type i = cidx (k); i < cidx (k+1)-1; i++)
                             {
-                              octave_idx_type iidx = ridx(i);
-                              cwork[iidx] = cwork[iidx] - tmp  * data(i);
+                              octave_idx_type iidx = ridx (i);
+                              cwork[iidx] = cwork[iidx] - tmp  * data (i);
                             }
                         }
                     }
@@ -2339,20 +2339,20 @@
                         {
                           if (work[k] != 0.)
                             {
-                              double tmp = work[k] / data(cidx(k+1)-1);
+                              double tmp = work[k] / data (cidx (k+1)-1);
                               work[k] = tmp;
-                              for (octave_idx_type i = cidx(k);
-                                   i < cidx(k+1)-1; i++)
+                              for (octave_idx_type i = cidx (k);
+                                   i < cidx (k+1)-1; i++)
                                 {
-                                  octave_idx_type iidx = ridx(i);
-                                  work[iidx] = work[iidx] - tmp * data(i);
+                                  octave_idx_type iidx = ridx (i);
+                                  work[iidx] = work[iidx] - tmp * data (i);
                                 }
                             }
                         }
                       double atmp = 0;
                       for (octave_idx_type i = 0; i < j+1; i++)
                         {
-                          atmp += fabs(work[i]);
+                          atmp += fabs (work[i]);
                           work[i] = 0.;
                         }
                       if (atmp > ainvnorm)
@@ -2437,8 +2437,8 @@
               for (octave_idx_type j = 0; j < nc; j++)
                 {
                   double atmp = 0.;
-                  for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
-                    atmp += fabs(data(i));
+                  for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
+                    atmp += fabs (data (i));
                   if (atmp > anorm)
                     anorm = atmp;
                 }
@@ -2447,7 +2447,7 @@
           octave_idx_type b_nc = b.cols ();
           octave_idx_type b_nz = b.nnz ();
           retval = SparseComplexMatrix (nc, b_nc, b_nz);
-          retval.xcidx(0) = 0;
+          retval.xcidx (0) = 0;
           octave_idx_type ii = 0;
           octave_idx_type x_nz = b_nz;
 
@@ -2464,8 +2464,8 @@
                 {
                   for (octave_idx_type i = 0; i < nm; i++)
                     cwork[i] = 0.;
-                  for (octave_idx_type i = b.cidx(j); i < b.cidx(j+1); i++)
-                    cwork[b.ridx(i)] = b.data(i);
+                  for (octave_idx_type i = b.cidx (j); i < b.cidx (j+1); i++)
+                    cwork[b.ridx (i)] = b.data (i);
 
                   for (octave_idx_type k = nc-1; k >= 0; k--)
                     {
@@ -2473,20 +2473,20 @@
 
                       if (cwork[k] != 0.)
                         {
-                          if (ridx(cidx(kidx+1)-1) != k ||
-                              data(cidx(kidx+1)-1) == 0.)
+                          if (ridx (cidx (kidx+1)-1) != k ||
+                              data (cidx (kidx+1)-1) == 0.)
                             {
                               err = -2;
                               goto triangular_error;
                             }
 
-                          Complex tmp = cwork[k] / data(cidx(kidx+1)-1);
+                          Complex tmp = cwork[k] / data (cidx (kidx+1)-1);
                           cwork[k] = tmp;
-                          for (octave_idx_type i = cidx(kidx);
-                               i < cidx(kidx+1)-1; i++)
+                          for (octave_idx_type i = cidx (kidx);
+                               i < cidx (kidx+1)-1; i++)
                             {
-                              octave_idx_type iidx = ridx(i);
-                              cwork[iidx] = cwork[iidx] - tmp * data(i);
+                              octave_idx_type iidx = ridx (i);
+                              cwork[iidx] = cwork[iidx] - tmp * data (i);
                             }
                         }
                     }
@@ -2509,10 +2509,10 @@
                   for (octave_idx_type i = 0; i < nc; i++)
                     if (cwork[rperm[i]] != 0.)
                       {
-                        retval.xridx(ii) = i;
-                        retval.xdata(ii++) = cwork[rperm[i]];
+                        retval.xridx (ii) = i;
+                        retval.xdata (ii++) = cwork[rperm[i]];
                       }
-                  retval.xcidx(j+1) = ii;
+                  retval.xcidx (j+1) = ii;
                 }
 
               retval.maybe_compress ();
@@ -2534,20 +2534,20 @@
 
                           if (work[k] != 0.)
                             {
-                              double tmp = work[k] / data(cidx(iidx+1)-1);
+                              double tmp = work[k] / data (cidx (iidx+1)-1);
                               work[k] = tmp;
-                              for (octave_idx_type i = cidx(iidx);
-                                   i < cidx(iidx+1)-1; i++)
+                              for (octave_idx_type i = cidx (iidx);
+                                   i < cidx (iidx+1)-1; i++)
                                 {
-                                  octave_idx_type idx2 = ridx(i);
-                                  work[idx2] = work[idx2] - tmp * data(i);
+                                  octave_idx_type idx2 = ridx (i);
+                                  work[idx2] = work[idx2] - tmp * data (i);
                                 }
                             }
                         }
                       double atmp = 0;
                       for (octave_idx_type i = 0; i < j+1; i++)
                         {
-                          atmp += fabs(work[i]);
+                          atmp += fabs (work[i]);
                           work[i] = 0.;
                         }
                       if (atmp > ainvnorm)
@@ -2564,26 +2564,26 @@
                 {
                   for (octave_idx_type i = 0; i < nm; i++)
                     cwork[i] = 0.;
-                  for (octave_idx_type i = b.cidx(j); i < b.cidx(j+1); i++)
-                    cwork[b.ridx(i)] = b.data(i);
+                  for (octave_idx_type i = b.cidx (j); i < b.cidx (j+1); i++)
+                    cwork[b.ridx (i)] = b.data (i);
 
                   for (octave_idx_type k = nc-1; k >= 0; k--)
                     {
                       if (cwork[k] != 0.)
                         {
-                          if (ridx(cidx(k+1)-1) != k ||
-                              data(cidx(k+1)-1) == 0.)
+                          if (ridx (cidx (k+1)-1) != k ||
+                              data (cidx (k+1)-1) == 0.)
                             {
                               err = -2;
                               goto triangular_error;
                             }
 
-                          Complex tmp = cwork[k] / data(cidx(k+1)-1);
+                          Complex tmp = cwork[k] / data (cidx (k+1)-1);
                           cwork[k] = tmp;
-                          for (octave_idx_type i = cidx(k); i < cidx(k+1)-1; i++)
+                          for (octave_idx_type i = cidx (k); i < cidx (k+1)-1; i++)
                             {
-                              octave_idx_type iidx = ridx(i);
-                              cwork[iidx] = cwork[iidx] - tmp * data(i);
+                              octave_idx_type iidx = ridx (i);
+                              cwork[iidx] = cwork[iidx] - tmp * data (i);
                             }
                         }
                     }
@@ -2606,10 +2606,10 @@
                   for (octave_idx_type i = 0; i < nc; i++)
                     if (cwork[i] != 0.)
                       {
-                        retval.xridx(ii) = i;
-                        retval.xdata(ii++) = cwork[i];
+                        retval.xridx (ii) = i;
+                        retval.xdata (ii++) = cwork[i];
                       }
-                  retval.xcidx(j+1) = ii;
+                  retval.xcidx (j+1) = ii;
                 }
 
               retval.maybe_compress ();
@@ -2629,20 +2629,20 @@
                         {
                           if (work[k] != 0.)
                             {
-                              double tmp = work[k] / data(cidx(k+1)-1);
+                              double tmp = work[k] / data (cidx (k+1)-1);
                               work[k] = tmp;
-                              for (octave_idx_type i = cidx(k);
-                                   i < cidx(k+1)-1; i++)
+                              for (octave_idx_type i = cidx (k);
+                                   i < cidx (k+1)-1; i++)
                                 {
-                                  octave_idx_type iidx = ridx(i);
-                                  work[iidx] = work[iidx] - tmp * data(i);
+                                  octave_idx_type iidx = ridx (i);
+                                  work[iidx] = work[iidx] - tmp * data (i);
                                 }
                             }
                         }
                       double atmp = 0;
                       for (octave_idx_type i = 0; i < j+1; i++)
                         {
-                          atmp += fabs(work[i]);
+                          atmp += fabs (work[i]);
                           work[i] = 0.;
                         }
                       if (atmp > ainvnorm)
@@ -2728,8 +2728,8 @@
               for (octave_idx_type j = 0; j < nc; j++)
                 {
                   double atmp = 0.;
-                  for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
-                    atmp += fabs(data(i));
+                  for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
+                    atmp += fabs (data (i));
                   if (atmp > anorm)
                     anorm = atmp;
                 }
@@ -2756,28 +2756,28 @@
                           octave_idx_type minr = nr;
                           octave_idx_type mini = 0;
 
-                          for (octave_idx_type i = cidx(k); i < cidx(k+1); i++)
-                            if (perm[ridx(i)] < minr)
+                          for (octave_idx_type i = cidx (k); i < cidx (k+1); i++)
+                            if (perm[ridx (i)] < minr)
                               {
-                                minr = perm[ridx(i)];
+                                minr = perm[ridx (i)];
                                 mini = i;
                               }
 
-                          if (minr != k || data(mini) == 0)
+                          if (minr != k || data (mini) == 0)
                             {
                               err = -2;
                               goto triangular_error;
                             }
 
-                          double tmp = work[k] / data(mini);
+                          double tmp = work[k] / data (mini);
                           work[k] = tmp;
-                          for (octave_idx_type i = cidx(k); i < cidx(k+1); i++)
+                          for (octave_idx_type i = cidx (k); i < cidx (k+1); i++)
                             {
                               if (i == mini)
                                 continue;
 
-                              octave_idx_type iidx = perm[ridx(i)];
-                              work[iidx] = work[iidx] - tmp * data(i);
+                              octave_idx_type iidx = perm[ridx (i)];
+                              work[iidx] = work[iidx] - tmp * data (i);
                             }
                         }
                     }
@@ -2803,24 +2803,24 @@
                               octave_idx_type minr = nr;
                               octave_idx_type mini = 0;
 
-                              for (octave_idx_type i = cidx(k);
-                                   i < cidx(k+1); i++)
-                                if (perm[ridx(i)] < minr)
+                              for (octave_idx_type i = cidx (k);
+                                   i < cidx (k+1); i++)
+                                if (perm[ridx (i)] < minr)
                                   {
-                                    minr = perm[ridx(i)];
+                                    minr = perm[ridx (i)];
                                     mini = i;
                                   }
 
-                              double tmp = work[k] / data(mini);
+                              double tmp = work[k] / data (mini);
                               work[k] = tmp;
-                              for (octave_idx_type i = cidx(k);
-                                   i < cidx(k+1); i++)
+                              for (octave_idx_type i = cidx (k);
+                                   i < cidx (k+1); i++)
                                 {
                                   if (i == mini)
                                     continue;
 
-                                  octave_idx_type iidx = perm[ridx(i)];
-                                  work[iidx] = work[iidx] - tmp * data(i);
+                                  octave_idx_type iidx = perm[ridx (i)];
+                                  work[iidx] = work[iidx] - tmp * data (i);
                                 }
                             }
                         }
@@ -2828,7 +2828,7 @@
                       double atmp = 0;
                       for (octave_idx_type i = j; i < nc; i++)
                         {
-                          atmp += fabs(work[i]);
+                          atmp += fabs (work[i]);
                           work[i] = 0.;
                         }
                       if (atmp > ainvnorm)
@@ -2852,20 +2852,20 @@
                     {
                       if (work[k] != 0.)
                         {
-                          if (ridx(cidx(k)) != k ||
-                              data(cidx(k)) == 0.)
+                          if (ridx (cidx (k)) != k ||
+                              data (cidx (k)) == 0.)
                             {
                               err = -2;
                               goto triangular_error;
                             }
 
-                          double tmp = work[k] / data(cidx(k));
+                          double tmp = work[k] / data (cidx (k));
                           work[k] = tmp;
-                          for (octave_idx_type i = cidx(k)+1;
-                               i < cidx(k+1); i++)
+                          for (octave_idx_type i = cidx (k)+1;
+                               i < cidx (k+1); i++)
                             {
-                              octave_idx_type iidx = ridx(i);
-                              work[iidx] = work[iidx] - tmp * data(i);
+                              octave_idx_type iidx = ridx (i);
+                              work[iidx] = work[iidx] - tmp * data (i);
                             }
                         }
                     }
@@ -2889,20 +2889,20 @@
 
                           if (work[k] != 0.)
                             {
-                              double tmp = work[k] / data(cidx(k));
+                              double tmp = work[k] / data (cidx (k));
                               work[k] = tmp;
-                              for (octave_idx_type i = cidx(k)+1;
-                                   i < cidx(k+1); i++)
+                              for (octave_idx_type i = cidx (k)+1;
+                                   i < cidx (k+1); i++)
                                 {
-                                  octave_idx_type iidx = ridx(i);
-                                  work[iidx] = work[iidx] - tmp * data(i);
+                                  octave_idx_type iidx = ridx (i);
+                                  work[iidx] = work[iidx] - tmp * data (i);
                                 }
                             }
                         }
                       double atmp = 0;
                       for (octave_idx_type i = j; i < nc; i++)
                         {
-                          atmp += fabs(work[i]);
+                          atmp += fabs (work[i]);
                           work[i] = 0.;
                         }
                       if (atmp > ainvnorm)
@@ -2987,8 +2987,8 @@
               for (octave_idx_type j = 0; j < nc; j++)
                 {
                   double atmp = 0.;
-                  for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
-                    atmp += fabs(data(i));
+                  for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
+                    atmp += fabs (data (i));
                   if (atmp > anorm)
                     anorm = atmp;
                 }
@@ -2997,7 +2997,7 @@
           octave_idx_type b_nc = b.cols ();
           octave_idx_type b_nz = b.nnz ();
           retval = SparseMatrix (nc, b_nc, b_nz);
-          retval.xcidx(0) = 0;
+          retval.xcidx (0) = 0;
           octave_idx_type ii = 0;
           octave_idx_type x_nz = b_nz;
 
@@ -3010,8 +3010,8 @@
                 {
                   for (octave_idx_type i = 0; i < nm; i++)
                     work[i] = 0.;
-                  for (octave_idx_type i = b.cidx(j); i < b.cidx(j+1); i++)
-                    work[perm[b.ridx(i)]] = b.data(i);
+                  for (octave_idx_type i = b.cidx (j); i < b.cidx (j+1); i++)
+                    work[perm[b.ridx (i)]] = b.data (i);
 
                   for (octave_idx_type k = 0; k < nc; k++)
                     {
@@ -3020,28 +3020,28 @@
                           octave_idx_type minr = nr;
                           octave_idx_type mini = 0;
 
-                          for (octave_idx_type i = cidx(k); i < cidx(k+1); i++)
-                            if (perm[ridx(i)] < minr)
+                          for (octave_idx_type i = cidx (k); i < cidx (k+1); i++)
+                            if (perm[ridx (i)] < minr)
                               {
-                                minr = perm[ridx(i)];
+                                minr = perm[ridx (i)];
                                 mini = i;
                               }
 
-                          if (minr != k || data(mini) == 0)
+                          if (minr != k || data (mini) == 0)
                             {
                               err = -2;
                               goto triangular_error;
                             }
 
-                          double tmp = work[k] / data(mini);
+                          double tmp = work[k] / data (mini);
                           work[k] = tmp;
-                          for (octave_idx_type i = cidx(k); i < cidx(k+1); i++)
+                          for (octave_idx_type i = cidx (k); i < cidx (k+1); i++)
                             {
                               if (i == mini)
                                 continue;
 
-                              octave_idx_type iidx = perm[ridx(i)];
-                              work[iidx] = work[iidx] - tmp * data(i);
+                              octave_idx_type iidx = perm[ridx (i)];
+                              work[iidx] = work[iidx] - tmp * data (i);
                             }
                         }
                     }
@@ -3064,10 +3064,10 @@
                   for (octave_idx_type i = 0; i < nc; i++)
                     if (work[i] != 0.)
                       {
-                        retval.xridx(ii) = i;
-                        retval.xdata(ii++) = work[i];
+                        retval.xridx (ii) = i;
+                        retval.xdata (ii++) = work[i];
                       }
-                  retval.xcidx(j+1) = ii;
+                  retval.xcidx (j+1) = ii;
                 }
 
               retval.maybe_compress ();
@@ -3089,24 +3089,24 @@
                               octave_idx_type minr = nr;
                               octave_idx_type mini = 0;
 
-                              for (octave_idx_type i = cidx(k);
-                                   i < cidx(k+1); i++)
-                                if (perm[ridx(i)] < minr)
+                              for (octave_idx_type i = cidx (k);
+                                   i < cidx (k+1); i++)
+                                if (perm[ridx (i)] < minr)
                                   {
-                                    minr = perm[ridx(i)];
+                                    minr = perm[ridx (i)];
                                     mini = i;
                                   }
 
-                              double tmp = work[k] / data(mini);
+                              double tmp = work[k] / data (mini);
                               work[k] = tmp;
-                              for (octave_idx_type i = cidx(k);
-                                   i < cidx(k+1); i++)
+                              for (octave_idx_type i = cidx (k);
+                                   i < cidx (k+1); i++)
                                 {
                                   if (i == mini)
                                     continue;
 
-                                  octave_idx_type iidx = perm[ridx(i)];
-                                  work[iidx] = work[iidx] - tmp * data(i);
+                                  octave_idx_type iidx = perm[ridx (i)];
+                                  work[iidx] = work[iidx] - tmp * data (i);
                                 }
                             }
                         }
@@ -3114,7 +3114,7 @@
                       double atmp = 0;
                       for (octave_idx_type i = j; i < nr; i++)
                         {
-                          atmp += fabs(work[i]);
+                          atmp += fabs (work[i]);
                           work[i] = 0.;
                         }
                       if (atmp > ainvnorm)
@@ -3131,26 +3131,26 @@
                 {
                   for (octave_idx_type i = 0; i < nm; i++)
                     work[i] = 0.;
-                  for (octave_idx_type i = b.cidx(j); i < b.cidx(j+1); i++)
-                    work[b.ridx(i)] = b.data(i);
+                  for (octave_idx_type i = b.cidx (j); i < b.cidx (j+1); i++)
+                    work[b.ridx (i)] = b.data (i);
 
                   for (octave_idx_type k = 0; k < nc; k++)
                     {
                       if (work[k] != 0.)
                         {
-                          if (ridx(cidx(k)) != k ||
-                              data(cidx(k)) == 0.)
+                          if (ridx (cidx (k)) != k ||
+                              data (cidx (k)) == 0.)
                             {
                               err = -2;
                               goto triangular_error;
                             }
 
-                          double tmp = work[k] / data(cidx(k));
+                          double tmp = work[k] / data (cidx (k));
                           work[k] = tmp;
-                          for (octave_idx_type i = cidx(k)+1; i < cidx(k+1); i++)
+                          for (octave_idx_type i = cidx (k)+1; i < cidx (k+1); i++)
                             {
-                              octave_idx_type iidx = ridx(i);
-                              work[iidx] = work[iidx] - tmp * data(i);
+                              octave_idx_type iidx = ridx (i);
+                              work[iidx] = work[iidx] - tmp * data (i);
                             }
                         }
                     }
@@ -3173,10 +3173,10 @@
                   for (octave_idx_type i = 0; i < nc; i++)
                     if (work[i] != 0.)
                       {
-                        retval.xridx(ii) = i;
-                        retval.xdata(ii++) = work[i];
+                        retval.xridx (ii) = i;
+                        retval.xdata (ii++) = work[i];
                       }
-                  retval.xcidx(j+1) = ii;
+                  retval.xcidx (j+1) = ii;
                 }
 
               retval.maybe_compress ();
@@ -3196,20 +3196,20 @@
 
                           if (work[k] != 0.)
                             {
-                              double tmp = work[k] / data(cidx(k));
+                              double tmp = work[k] / data (cidx (k));
                               work[k] = tmp;
-                              for (octave_idx_type i = cidx(k)+1;
-                                   i < cidx(k+1); i++)
+                              for (octave_idx_type i = cidx (k)+1;
+                                   i < cidx (k+1); i++)
                                 {
-                                  octave_idx_type iidx = ridx(i);
-                                  work[iidx] = work[iidx] - tmp * data(i);
+                                  octave_idx_type iidx = ridx (i);
+                                  work[iidx] = work[iidx] - tmp * data (i);
                                 }
                             }
                         }
                       double atmp = 0;
                       for (octave_idx_type i = j; i < nc; i++)
                         {
-                          atmp += fabs(work[i]);
+                          atmp += fabs (work[i]);
                           work[i] = 0.;
                         }
                       if (atmp > ainvnorm)
@@ -3295,8 +3295,8 @@
               for (octave_idx_type j = 0; j < nc; j++)
                 {
                   double atmp = 0.;
-                  for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
-                    atmp += fabs(data(i));
+                  for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
+                    atmp += fabs (data (i));
                   if (atmp > anorm)
                     anorm = atmp;
                 }
@@ -3322,28 +3322,28 @@
                           octave_idx_type minr = nr;
                           octave_idx_type mini = 0;
 
-                          for (octave_idx_type i = cidx(k); i < cidx(k+1); i++)
-                            if (perm[ridx(i)] < minr)
+                          for (octave_idx_type i = cidx (k); i < cidx (k+1); i++)
+                            if (perm[ridx (i)] < minr)
                               {
-                                minr = perm[ridx(i)];
+                                minr = perm[ridx (i)];
                                 mini = i;
                               }
 
-                          if (minr != k || data(mini) == 0)
+                          if (minr != k || data (mini) == 0)
                             {
                               err = -2;
                               goto triangular_error;
                             }
 
-                          Complex tmp = cwork[k] / data(mini);
+                          Complex tmp = cwork[k] / data (mini);
                           cwork[k] = tmp;
-                          for (octave_idx_type i = cidx(k); i < cidx(k+1); i++)
+                          for (octave_idx_type i = cidx (k); i < cidx (k+1); i++)
                             {
                               if (i == mini)
                                 continue;
 
-                              octave_idx_type iidx = perm[ridx(i)];
-                              cwork[iidx] = cwork[iidx] - tmp * data(i);
+                              octave_idx_type iidx = perm[ridx (i)];
+                              cwork[iidx] = cwork[iidx] - tmp * data (i);
                             }
                         }
                     }
@@ -3370,24 +3370,24 @@
                               octave_idx_type minr = nr;
                               octave_idx_type mini = 0;
 
-                              for (octave_idx_type i = cidx(k);
-                                   i < cidx(k+1); i++)
-                                if (perm[ridx(i)] < minr)
+                              for (octave_idx_type i = cidx (k);
+                                   i < cidx (k+1); i++)
+                                if (perm[ridx (i)] < minr)
                                   {
-                                    minr = perm[ridx(i)];
+                                    minr = perm[ridx (i)];
                                     mini = i;
                                   }
 
-                              double tmp = work[k] / data(mini);
+                              double tmp = work[k] / data (mini);
                               work[k] = tmp;
-                              for (octave_idx_type i = cidx(k);
-                                   i < cidx(k+1); i++)
+                              for (octave_idx_type i = cidx (k);
+                                   i < cidx (k+1); i++)
                                 {
                                   if (i == mini)
                                     continue;
 
-                                  octave_idx_type iidx = perm[ridx(i)];
-                                  work[iidx] = work[iidx] - tmp * data(i);
+                                  octave_idx_type iidx = perm[ridx (i)];
+                                  work[iidx] = work[iidx] - tmp * data (i);
                                 }
                             }
                         }
@@ -3395,7 +3395,7 @@
                       double atmp = 0;
                       for (octave_idx_type i = j; i < nc; i++)
                         {
-                          atmp += fabs(work[i]);
+                          atmp += fabs (work[i]);
                           work[i] = 0.;
                         }
                       if (atmp > ainvnorm)
@@ -3420,19 +3420,19 @@
                     {
                       if (cwork[k] != 0.)
                         {
-                          if (ridx(cidx(k)) != k ||
-                              data(cidx(k)) == 0.)
+                          if (ridx (cidx (k)) != k ||
+                              data (cidx (k)) == 0.)
                             {
                               err = -2;
                               goto triangular_error;
                             }
 
-                          Complex tmp = cwork[k] / data(cidx(k));
+                          Complex tmp = cwork[k] / data (cidx (k));
                           cwork[k] = tmp;
-                          for (octave_idx_type i = cidx(k)+1; i < cidx(k+1); i++)
+                          for (octave_idx_type i = cidx (k)+1; i < cidx (k+1); i++)
                             {
-                              octave_idx_type iidx = ridx(i);
-                              cwork[iidx] = cwork[iidx] - tmp * data(i);
+                              octave_idx_type iidx = ridx (i);
+                              cwork[iidx] = cwork[iidx] - tmp * data (i);
                             }
                         }
                     }
@@ -3457,20 +3457,20 @@
 
                           if (work[k] != 0.)
                             {
-                              double tmp = work[k] / data(cidx(k));
+                              double tmp = work[k] / data (cidx (k));
                               work[k] = tmp;
-                              for (octave_idx_type i = cidx(k)+1;
-                                   i < cidx(k+1); i++)
+                              for (octave_idx_type i = cidx (k)+1;
+                                   i < cidx (k+1); i++)
                                 {
-                                  octave_idx_type iidx = ridx(i);
-                                  work[iidx] = work[iidx] - tmp * data(i);
+                                  octave_idx_type iidx = ridx (i);
+                                  work[iidx] = work[iidx] - tmp * data (i);
                                 }
                             }
                         }
                       double atmp = 0;
                       for (octave_idx_type i = j; i < nc; i++)
                         {
-                          atmp += fabs(work[i]);
+                          atmp += fabs (work[i]);
                           work[i] = 0.;
                         }
                       if (atmp > ainvnorm)
@@ -3555,8 +3555,8 @@
               for (octave_idx_type j = 0; j < nc; j++)
                 {
                   double atmp = 0.;
-                  for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
-                    atmp += fabs(data(i));
+                  for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
+                    atmp += fabs (data (i));
                   if (atmp > anorm)
                     anorm = atmp;
                 }
@@ -3565,7 +3565,7 @@
           octave_idx_type b_nc = b.cols ();
           octave_idx_type b_nz = b.nnz ();
           retval = SparseComplexMatrix (nc, b_nc, b_nz);
-          retval.xcidx(0) = 0;
+          retval.xcidx (0) = 0;
           octave_idx_type ii = 0;
           octave_idx_type x_nz = b_nz;
 
@@ -3578,8 +3578,8 @@
                 {
                   for (octave_idx_type i = 0; i < nm; i++)
                     cwork[i] = 0.;
-                  for (octave_idx_type i = b.cidx(j); i < b.cidx(j+1); i++)
-                    cwork[perm[b.ridx(i)]] = b.data(i);
+                  for (octave_idx_type i = b.cidx (j); i < b.cidx (j+1); i++)
+                    cwork[perm[b.ridx (i)]] = b.data (i);
 
                   for (octave_idx_type k = 0; k < nc; k++)
                     {
@@ -3588,28 +3588,28 @@
                           octave_idx_type minr = nr;
                           octave_idx_type mini = 0;
 
-                          for (octave_idx_type i = cidx(k); i < cidx(k+1); i++)
-                            if (perm[ridx(i)] < minr)
+                          for (octave_idx_type i = cidx (k); i < cidx (k+1); i++)
+                            if (perm[ridx (i)] < minr)
                               {
-                                minr = perm[ridx(i)];
+                                minr = perm[ridx (i)];
                                 mini = i;
                               }
 
-                          if (minr != k || data(mini) == 0)
+                          if (minr != k || data (mini) == 0)
                             {
                               err = -2;
                               goto triangular_error;
                             }
 
-                          Complex tmp = cwork[k] / data(mini);
+                          Complex tmp = cwork[k] / data (mini);
                           cwork[k] = tmp;
-                          for (octave_idx_type i = cidx(k); i < cidx(k+1); i++)
+                          for (octave_idx_type i = cidx (k); i < cidx (k+1); i++)
                             {
                               if (i == mini)
                                 continue;
 
-                              octave_idx_type iidx = perm[ridx(i)];
-                              cwork[iidx] = cwork[iidx] - tmp * data(i);
+                              octave_idx_type iidx = perm[ridx (i)];
+                              cwork[iidx] = cwork[iidx] - tmp * data (i);
                             }
                         }
                     }
@@ -3632,10 +3632,10 @@
                   for (octave_idx_type i = 0; i < nc; i++)
                     if (cwork[i] != 0.)
                       {
-                        retval.xridx(ii) = i;
-                        retval.xdata(ii++) = cwork[i];
+                        retval.xridx (ii) = i;
+                        retval.xdata (ii++) = cwork[i];
                       }
-                  retval.xcidx(j+1) = ii;
+                  retval.xcidx (j+1) = ii;
                 }
 
               retval.maybe_compress ();
@@ -3658,24 +3658,24 @@
                               octave_idx_type minr = nr;
                               octave_idx_type mini = 0;
 
-                              for (octave_idx_type i = cidx(k);
-                                   i < cidx(k+1); i++)
-                                if (perm[ridx(i)] < minr)
+                              for (octave_idx_type i = cidx (k);
+                                   i < cidx (k+1); i++)
+                                if (perm[ridx (i)] < minr)
                                   {
-                                    minr = perm[ridx(i)];
+                                    minr = perm[ridx (i)];
                                     mini = i;
                                   }
 
-                              double tmp = work[k] / data(mini);
+                              double tmp = work[k] / data (mini);
                               work[k] = tmp;
-                              for (octave_idx_type i = cidx(k);
-                                   i < cidx(k+1); i++)
+                              for (octave_idx_type i = cidx (k);
+                                   i < cidx (k+1); i++)
                                 {
                                   if (i == mini)
                                     continue;
 
-                                  octave_idx_type iidx = perm[ridx(i)];
-                                  work[iidx] = work[iidx] - tmp * data(i);
+                                  octave_idx_type iidx = perm[ridx (i)];
+                                  work[iidx] = work[iidx] - tmp * data (i);
                                 }
                             }
                         }
@@ -3683,7 +3683,7 @@
                       double atmp = 0;
                       for (octave_idx_type i = j; i < nc; i++)
                         {
-                          atmp += fabs(work[i]);
+                          atmp += fabs (work[i]);
                           work[i] = 0.;
                         }
                       if (atmp > ainvnorm)
@@ -3700,26 +3700,26 @@
                 {
                   for (octave_idx_type i = 0; i < nm; i++)
                     cwork[i] = 0.;
-                  for (octave_idx_type i = b.cidx(j); i < b.cidx(j+1); i++)
-                    cwork[b.ridx(i)] = b.data(i);
+                  for (octave_idx_type i = b.cidx (j); i < b.cidx (j+1); i++)
+                    cwork[b.ridx (i)] = b.data (i);
 
                   for (octave_idx_type k = 0; k < nc; k++)
                     {
                       if (cwork[k] != 0.)
                         {
-                          if (ridx(cidx(k)) != k ||
-                              data(cidx(k)) == 0.)
+                          if (ridx (cidx (k)) != k ||
+                              data (cidx (k)) == 0.)
                             {
                               err = -2;
                               goto triangular_error;
                             }
 
-                          Complex tmp = cwork[k] / data(cidx(k));
+                          Complex tmp = cwork[k] / data (cidx (k));
                           cwork[k] = tmp;
-                          for (octave_idx_type i = cidx(k)+1; i < cidx(k+1); i++)
+                          for (octave_idx_type i = cidx (k)+1; i < cidx (k+1); i++)
                             {
-                              octave_idx_type iidx = ridx(i);
-                              cwork[iidx] = cwork[iidx] - tmp * data(i);
+                              octave_idx_type iidx = ridx (i);
+                              cwork[iidx] = cwork[iidx] - tmp * data (i);
                             }
                         }
                     }
@@ -3742,10 +3742,10 @@
                   for (octave_idx_type i = 0; i < nc; i++)
                     if (cwork[i] != 0.)
                       {
-                        retval.xridx(ii) = i;
-                        retval.xdata(ii++) = cwork[i];
+                        retval.xridx (ii) = i;
+                        retval.xdata (ii++) = cwork[i];
                       }
-                  retval.xcidx(j+1) = ii;
+                  retval.xcidx (j+1) = ii;
                 }
 
               retval.maybe_compress ();
@@ -3766,20 +3766,20 @@
 
                           if (work[k] != 0.)
                             {
-                              double tmp = work[k] / data(cidx(k));
+                              double tmp = work[k] / data (cidx (k));
                               work[k] = tmp;
-                              for (octave_idx_type i = cidx(k)+1;
-                                   i < cidx(k+1); i++)
+                              for (octave_idx_type i = cidx (k)+1;
+                                   i < cidx (k+1); i++)
                                 {
-                                  octave_idx_type iidx = ridx(i);
-                                  work[iidx] = work[iidx] - tmp * data(i);
+                                  octave_idx_type iidx = ridx (i);
+                                  work[iidx] = work[iidx] - tmp * data (i);
                                 }
                             }
                         }
                       double atmp = 0;
                       for (octave_idx_type i = j; i < nc; i++)
                         {
-                          atmp += fabs(work[i]);
+                          atmp += fabs (work[i]);
                           work[i] = 0.;
                         }
                       if (atmp > ainvnorm)
@@ -3864,11 +3864,11 @@
 
               for (octave_idx_type j = 0; j < nc-1; j++)
                 {
-                  D[j] = data(ii++);
-                  DL[j] = data(ii);
+                  D[j] = data (ii++);
+                  DL[j] = data (ii);
                   ii += 2;
                 }
-              D[nc-1] = data(ii);
+              D[nc-1] = data (ii);
             }
           else
             {
@@ -3880,12 +3880,12 @@
                 }
 
               for (octave_idx_type j = 0; j < nc; j++)
-                for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
+                for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
                   {
-                    if (ridx(i) == j)
-                      D[j] = data(i);
-                    else if (ridx(i) == j + 1)
-                      DL[j] = data(i);
+                    if (ridx (i) == j)
+                      D[j] = data (i);
+                    else if (ridx (i) == j + 1)
+                      DL[j] = data (i);
                   }
             }
 
@@ -3918,11 +3918,11 @@
 
               for (octave_idx_type j = 0; j < nc-1; j++)
                 {
-                  D[j] = data(ii++);
-                  DL[j] = data(ii++);
-                  DU[j] = data(ii++);
-                }
-              D[nc-1] = data(ii);
+                  D[j] = data (ii++);
+                  DL[j] = data (ii++);
+                  DU[j] = data (ii++);
+                }
+              D[nc-1] = data (ii);
             }
           else
             {
@@ -3935,14 +3935,14 @@
                 }
 
               for (octave_idx_type j = 0; j < nc; j++)
-                for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
+                for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
                   {
-                    if (ridx(i) == j)
-                      D[j] = data(i);
-                    else if (ridx(i) == j + 1)
-                      DL[j] = data(i);
-                    else if (ridx(i) == j - 1)
-                      DU[j-1] = data(i);
+                    if (ridx (i) == j)
+                      D[j] = data (i);
+                    else if (ridx (i) == j + 1)
+                      DL[j] = data (i);
+                    else if (ridx (i) == j - 1)
+                      DU[j-1] = data (i);
                   }
             }
 
@@ -4021,11 +4021,11 @@
 
               for (octave_idx_type j = 0; j < nc-1; j++)
                 {
-                  D[j] = data(ii++);
-                  DL[j] = data(ii++);
-                  DU[j] = data(ii++);
-                }
-              D[nc-1] = data(ii);
+                  D[j] = data (ii++);
+                  DL[j] = data (ii++);
+                  DU[j] = data (ii++);
+                }
+              D[nc-1] = data (ii);
             }
           else
             {
@@ -4038,14 +4038,14 @@
                 }
 
               for (octave_idx_type j = 0; j < nc; j++)
-                for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
+                for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
                   {
-                    if (ridx(i) == j)
-                      D[j] = data(i);
-                    else if (ridx(i) == j + 1)
-                      DL[j] = data(i);
-                    else if (ridx(i) == j - 1)
-                      DU[j-1] = data(i);
+                    if (ridx (i) == j)
+                      D[j] = data (i);
+                    else if (ridx (i) == j + 1)
+                      DL[j] = data (i);
+                    else if (ridx (i) == j - 1)
+                      DU[j-1] = data (i);
                   }
             }
 
@@ -4073,7 +4073,7 @@
               volatile octave_idx_type x_nz = b.nnz ();
               octave_idx_type b_nc = b.cols ();
               retval = SparseMatrix (nr, b_nc, x_nz);
-              retval.xcidx(0) = 0;
+              retval.xcidx (0) = 0;
               volatile octave_idx_type ii = 0;
 
               OCTAVE_LOCAL_BUFFER (double, work, nr);
@@ -4082,8 +4082,8 @@
                 {
                   for (octave_idx_type i = 0; i < nr; i++)
                     work[i] = 0.;
-                  for (octave_idx_type i = b.cidx(j); i < b.cidx(j+1); i++)
-                    work[b.ridx(i)] = b.data(i);
+                  for (octave_idx_type i = b.cidx (j); i < b.cidx (j+1); i++)
+                    work[b.ridx (i)] = b.data (i);
 
                   F77_XFCN (dgttrs, DGTTRS,
                             (F77_CONST_CHAR_ARG2 (&job, 1),
@@ -4109,10 +4109,10 @@
                   for (octave_idx_type i = 0; i < nr; i++)
                     if (work[i] != 0.)
                       {
-                        retval.xridx(ii) = i;
-                        retval.xdata(ii++) = work[i];
+                        retval.xridx (ii) = i;
+                        retval.xdata (ii++) = work[i];
                       }
-                  retval.xcidx(j+1) = ii;
+                  retval.xcidx (j+1) = ii;
                 }
 
               retval.maybe_compress ();
@@ -4162,11 +4162,11 @@
 
               for (octave_idx_type j = 0; j < nc-1; j++)
                 {
-                  D[j] = data(ii++);
-                  DL[j] = data(ii);
+                  D[j] = data (ii++);
+                  DL[j] = data (ii);
                   ii += 2;
                 }
-              D[nc-1] = data(ii);
+              D[nc-1] = data (ii);
             }
           else
             {
@@ -4178,12 +4178,12 @@
                 }
 
               for (octave_idx_type j = 0; j < nc; j++)
-                for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
+                for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
                   {
-                    if (ridx(i) == j)
-                      D[j] = data(i);
-                    else if (ridx(i) == j + 1)
-                      DL[j] = data(i);
+                    if (ridx (i) == j)
+                      D[j] = data (i);
+                    else if (ridx (i) == j + 1)
+                      DL[j] = data (i);
                   }
             }
 
@@ -4217,11 +4217,11 @@
 
               for (octave_idx_type j = 0; j < nc-1; j++)
                 {
-                  D[j] = data(ii++);
-                  DL[j] = data(ii++);
-                  DU[j] = data(ii++);
-                }
-              D[nc-1] = data(ii);
+                  D[j] = data (ii++);
+                  DL[j] = data (ii++);
+                  DU[j] = data (ii++);
+                }
+              D[nc-1] = data (ii);
             }
           else
             {
@@ -4234,14 +4234,14 @@
                 }
 
               for (octave_idx_type j = 0; j < nc; j++)
-                for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
+                for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
                   {
-                    if (ridx(i) == j)
-                      D[j] = data(i);
-                    else if (ridx(i) == j + 1)
-                      DL[j] = data(i);
-                    else if (ridx(i) == j - 1)
-                      DU[j-1] = data(i);
+                    if (ridx (i) == j)
+                      D[j] = data (i);
+                    else if (ridx (i) == j + 1)
+                      DL[j] = data (i);
+                    else if (ridx (i) == j - 1)
+                      DU[j-1] = data (i);
                   }
             }
 
@@ -4320,11 +4320,11 @@
 
               for (octave_idx_type j = 0; j < nc-1; j++)
                 {
-                  D[j] = data(ii++);
-                  DL[j] = data(ii++);
-                  DU[j] = data(ii++);
-                }
-              D[nc-1] = data(ii);
+                  D[j] = data (ii++);
+                  DL[j] = data (ii++);
+                  DU[j] = data (ii++);
+                }
+              D[nc-1] = data (ii);
             }
           else
             {
@@ -4337,14 +4337,14 @@
                 }
 
               for (octave_idx_type j = 0; j < nc; j++)
-                for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
+                for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
                   {
-                    if (ridx(i) == j)
-                      D[j] = data(i);
-                    else if (ridx(i) == j + 1)
-                      DL[j] = data(i);
-                    else if (ridx(i) == j - 1)
-                      DU[j-1] = data(i);
+                    if (ridx (i) == j)
+                      D[j] = data (i);
+                    else if (ridx (i) == j + 1)
+                      DL[j] = data (i);
+                    else if (ridx (i) == j - 1)
+                      DU[j-1] = data (i);
                   }
             }
 
@@ -4379,7 +4379,7 @@
               volatile octave_idx_type ii = 0;
               retval = SparseComplexMatrix (b_nr, b_nc, x_nz);
 
-              retval.xcidx(0) = 0;
+              retval.xcidx (0) = 0;
               for (volatile octave_idx_type j = 0; j < b_nc; j++)
                 {
 
@@ -4438,12 +4438,12 @@
                   for (octave_idx_type i = 0; i < nr; i++)
                     if (Bx[i] != 0. || Bz[i] != 0.)
                       {
-                        retval.xridx(ii) = i;
-                        retval.xdata(ii++) =
+                        retval.xridx (ii) = i;
+                        retval.xdata (ii++) =
                           Complex (Bx[i], Bz[i]);
                       }
 
-                  retval.xcidx(j+1) = ii;
+                  retval.xcidx (j+1) = ii;
                 }
 
               retval.maybe_compress ();
@@ -4496,17 +4496,17 @@
             }
 
           for (octave_idx_type j = 0; j < nc; j++)
-            for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
+            for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
               {
                 octave_idx_type ri = ridx (i);
                 if (ri >= j)
-                  m_band(ri - j, j) = data(i);
+                  m_band(ri - j, j) = data (i);
               }
 
           // Calculate the norm of the matrix, for later use.
           double anorm;
           if (calc_cond)
-            anorm = m_band.abs ().sum ().row(0).max ();
+            anorm = m_band.abs ().sum ().row (0).max ();
 
           char job = 'L';
           F77_XFCN (dpbtrf, DPBTRF, (F77_CONST_CHAR_ARG2 (&job, 1),
@@ -4603,8 +4603,8 @@
             }
 
           for (octave_idx_type j = 0; j < nc; j++)
-            for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
-              m_band(ridx(i) - j + n_lower + n_upper, j) = data(i);
+            for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
+              m_band(ridx (i) - j + n_lower + n_upper, j) = data (i);
 
           // Calculate the norm of the matrix, for later use.
           double anorm;
@@ -4613,8 +4613,8 @@
               for (octave_idx_type j = 0; j < nr; j++)
                 {
                   double atmp = 0.;
-                  for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
-                    atmp += fabs(data(i));
+                  for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
+                    atmp += fabs (data (i));
                   if (atmp > anorm)
                     anorm = atmp;
                 }
@@ -4746,17 +4746,17 @@
             }
 
           for (octave_idx_type j = 0; j < nc; j++)
-            for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
+            for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
               {
                 octave_idx_type ri = ridx (i);
                 if (ri >= j)
-                  m_band(ri - j, j) = data(i);
+                  m_band(ri - j, j) = data (i);
               }
 
           // Calculate the norm of the matrix, for later use.
           double anorm;
           if (calc_cond)
-            anorm = m_band.abs ().sum ().row(0).max ();
+            anorm = m_band.abs ().sum ().row (0).max ();
 
           char job = 'L';
           F77_XFCN (dpbtrf, DPBTRF, (F77_CONST_CHAR_ARG2 (&job, 1),
@@ -4820,7 +4820,7 @@
                   volatile octave_idx_type ii = 0;
                   retval = SparseMatrix (b_nr, b_nc, x_nz);
 
-                  retval.xcidx(0) = 0;
+                  retval.xcidx (0) = 0;
                   for (volatile octave_idx_type j = 0; j < b_nc; j++)
                     {
                       for (octave_idx_type i = 0; i < b_nr; i++)
@@ -4854,11 +4854,11 @@
                                   retval.change_capacity (sz);
                                   x_nz = sz;
                                 }
-                              retval.xdata(ii) = tmp;
-                              retval.xridx(ii++) = i;
+                              retval.xdata (ii) = tmp;
+                              retval.xridx (ii++) = i;
                             }
                         }
-                      retval.xcidx(j+1) = ii;
+                      retval.xcidx (j+1) = ii;
                     }
 
                   retval.maybe_compress ();
@@ -4886,8 +4886,8 @@
             }
 
           for (octave_idx_type j = 0; j < nc; j++)
-            for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
-              m_band(ridx(i) - j + n_lower + n_upper, j) = data(i);
+            for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
+              m_band(ridx (i) - j + n_lower + n_upper, j) = data (i);
 
           // Calculate the norm of the matrix, for later use.
           double anorm;
@@ -4896,8 +4896,8 @@
               for (octave_idx_type j = 0; j < nr; j++)
                 {
                   double atmp = 0.;
-                  for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
-                    atmp += fabs(data(i));
+                  for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
+                    atmp += fabs (data (i));
                   if (atmp > anorm)
                     anorm = atmp;
                 }
@@ -4969,7 +4969,7 @@
                   volatile octave_idx_type x_nz = b.nnz ();
                   octave_idx_type b_nc = b.cols ();
                   retval = SparseMatrix (nr, b_nc, x_nz);
-                  retval.xcidx(0) = 0;
+                  retval.xcidx (0) = 0;
                   volatile octave_idx_type ii = 0;
 
                   OCTAVE_LOCAL_BUFFER (double, work, nr);
@@ -4978,9 +4978,9 @@
                     {
                       for (octave_idx_type i = 0; i < nr; i++)
                         work[i] = 0.;
-                      for (octave_idx_type i = b.cidx(j);
-                           i < b.cidx(j+1); i++)
-                        work[b.ridx(i)] = b.data(i);
+                      for (octave_idx_type i = b.cidx (j);
+                           i < b.cidx (j+1); i++)
+                        work[b.ridx (i)] = b.data (i);
 
                       F77_XFCN (dgbtrs, DGBTRS,
                                 (F77_CONST_CHAR_ARG2 (&job, 1),
@@ -5006,10 +5006,10 @@
                       for (octave_idx_type i = 0; i < nr; i++)
                         if (work[i] != 0.)
                           {
-                            retval.xridx(ii) = i;
-                            retval.xdata(ii++) = work[i];
+                            retval.xridx (ii) = i;
+                            retval.xdata (ii++) = work[i];
                           }
-                      retval.xcidx(j+1) = ii;
+                      retval.xcidx (j+1) = ii;
                     }
 
                   retval.maybe_compress ();
@@ -5064,17 +5064,17 @@
             }
 
           for (octave_idx_type j = 0; j < nc; j++)
-            for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
+            for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
               {
                 octave_idx_type ri = ridx (i);
                 if (ri >= j)
-                  m_band(ri - j, j) = data(i);
+                  m_band(ri - j, j) = data (i);
               }
 
           // Calculate the norm of the matrix, for later use.
           double anorm;
           if (calc_cond)
-            anorm = m_band.abs ().sum ().row(0).max ();
+            anorm = m_band.abs ().sum ().row (0).max ();
 
           char job = 'L';
           F77_XFCN (dpbtrf, DPBTRF, (F77_CONST_CHAR_ARG2 (&job, 1),
@@ -5202,8 +5202,8 @@
             }
 
           for (octave_idx_type j = 0; j < nc; j++)
-            for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
-              m_band(ridx(i) - j + n_lower + n_upper, j) = data(i);
+            for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
+              m_band(ridx (i) - j + n_lower + n_upper, j) = data (i);
 
           // Calculate the norm of the matrix, for later use.
           double anorm;
@@ -5212,8 +5212,8 @@
               for (octave_idx_type j = 0; j < nr; j++)
                 {
                   double atmp = 0.;
-                  for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
-                    atmp += fabs(data(i));
+                  for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
+                    atmp += fabs (data (i));
                   if (atmp > anorm)
                     anorm = atmp;
                 }
@@ -5363,17 +5363,17 @@
             }
 
           for (octave_idx_type j = 0; j < nc; j++)
-            for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
+            for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
               {
                 octave_idx_type ri = ridx (i);
                 if (ri >= j)
-                  m_band(ri - j, j) = data(i);
+                  m_band(ri - j, j) = data (i);
               }
 
           // Calculate the norm of the matrix, for later use.
           double anorm;
           if (calc_cond)
-            anorm = m_band.abs ().sum ().row(0).max ();
+            anorm = m_band.abs ().sum ().row (0).max ();
 
           char job = 'L';
           F77_XFCN (dpbtrf, DPBTRF, (F77_CONST_CHAR_ARG2 (&job, 1),
@@ -5441,7 +5441,7 @@
                   volatile octave_idx_type ii = 0;
                   retval = SparseComplexMatrix (b_nr, b_nc, x_nz);
 
-                  retval.xcidx(0) = 0;
+                  retval.xcidx (0) = 0;
                   for (volatile octave_idx_type j = 0; j < b_nc; j++)
                     {
 
@@ -5499,12 +5499,12 @@
                       for (octave_idx_type i = 0; i < nr; i++)
                         if (Bx[i] != 0. || Bz[i] != 0.)
                           {
-                            retval.xridx(ii) = i;
-                            retval.xdata(ii++) =
+                            retval.xridx (ii) = i;
+                            retval.xdata (ii++) =
                               Complex (Bx[i], Bz[i]);
                           }
 
-                      retval.xcidx(j+1) = ii;
+                      retval.xcidx (j+1) = ii;
                     }
 
                   retval.maybe_compress ();
@@ -5532,8 +5532,8 @@
             }
 
           for (octave_idx_type j = 0; j < nc; j++)
-            for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
-              m_band(ridx(i) - j + n_lower + n_upper, j) = data(i);
+            for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
+              m_band(ridx (i) - j + n_lower + n_upper, j) = data (i);
 
           // Calculate the norm of the matrix, for later use.
           double anorm;
@@ -5542,8 +5542,8 @@
               for (octave_idx_type j = 0; j < nr; j++)
                 {
                   double atmp = 0.;
-                  for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
-                    atmp += fabs(data(i));
+                  for (octave_idx_type i = cidx (j); i < cidx (j+1); i++)
+                    atmp += fabs (data (i));
                   if (atmp > anorm)
                     anorm = atmp;
                 }
@@ -5615,7 +5615,7 @@
                   volatile octave_idx_type x_nz = b.nnz ();
                   octave_idx_type b_nc = b.cols ();
                   retval = SparseComplexMatrix (nr, b_nc, x_nz);
-                  retval.xcidx(0) = 0;
+                  retval.xcidx (0) = 0;
                   volatile octave_idx_type ii = 0;
 
                   OCTAVE_LOCAL_BUFFER (double, Bx, nr);
@@ -5628,12 +5628,12 @@
                           Bx[i] = 0.;
                           Bz[i] = 0.;
                         }
-                      for (octave_idx_type i = b.cidx(j);
-                           i < b.cidx(j+1); i++)
+                      for (octave_idx_type i = b.cidx (j);
+                           i < b.cidx (j+1); i++)
                         {
-                          Complex c = b.data(i);
-                          Bx[b.ridx(i)] = std::real (c);
-                          Bz[b.ridx(i)] = std::imag (c);
+                          Complex c = b.data (i);
+                          Bx[b.ridx (i)] = std::real (c);
+                          Bz[b.ridx (i)] = std::imag (c);
                         }
 
                       F77_XFCN (dgbtrs, DGBTRS,
@@ -5666,11 +5666,11 @@
                       for (octave_idx_type i = 0; i < nr; i++)
                         if (Bx[i] != 0. || Bz[i] != 0.)
                           {
-                            retval.xridx(ii) = i;
-                            retval.xdata(ii++) =
+                            retval.xridx (ii) = i;
+                            retval.xdata (ii++) =
                               Complex (Bx[i], Bz[i]);
                           }
-                      retval.xcidx(j+1) = ii;
+                      retval.xcidx (j+1) = ii;
                     }
 
                   retval.maybe_compress ();
@@ -5935,7 +5935,7 @@
                 {
                   octave_idx_type jr = j * b.rows ();
                   for (octave_idx_type i = 0; i < b.rows (); i++)
-                    retval.xelem(i,j) = static_cast<double *>(X->x)[jr + i];
+                    retval.xelem (i,j) = static_cast<double *>(X->x)[jr + i];
                 }
 
               BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
@@ -6160,12 +6160,12 @@
                                      static_cast<octave_idx_type>(X->nzmax));
               for (octave_idx_type j = 0;
                    j <= static_cast<octave_idx_type>(X->ncol); j++)
-                retval.xcidx(j) = static_cast<octave_idx_type *>(X->p)[j];
+                retval.xcidx (j) = static_cast<octave_idx_type *>(X->p)[j];
               for (octave_idx_type j = 0;
                    j < static_cast<octave_idx_type>(X->nzmax); j++)
                 {
-                  retval.xridx(j) = static_cast<octave_idx_type *>(X->i)[j];
-                  retval.xdata(j) = static_cast<double *>(X->x)[j];
+                  retval.xridx (j) = static_cast<octave_idx_type *>(X->i)[j];
+                  retval.xdata (j) = static_cast<double *>(X->x)[j];
                 }
 
               BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
@@ -6212,7 +6212,7 @@
               octave_idx_type ii = 0;
               retval = SparseMatrix (b_nr, b_nc, x_nz);
 
-              retval.xcidx(0) = 0;
+              retval.xcidx (0) = 0;
               for (octave_idx_type j = 0; j < b_nc; j++)
                 {
 
@@ -6247,11 +6247,11 @@
                               retval.change_capacity (sz);
                               x_nz = sz;
                             }
-                          retval.xdata(ii) = tmp;
-                          retval.xridx(ii++) = i;
+                          retval.xdata (ii) = tmp;
+                          retval.xridx (ii++) = i;
                         }
                     }
-                  retval.xcidx(j+1) = ii;
+                  retval.xcidx (j+1) = ii;
                 }
 
               retval.maybe_compress ();
@@ -6412,7 +6412,7 @@
                 {
                   octave_idx_type jr = j * b.rows ();
                   for (octave_idx_type i = 0; i < b.rows (); i++)
-                    retval.xelem(i,j) = static_cast<Complex *>(X->x)[jr + i];
+                    retval.xelem (i,j) = static_cast<Complex *>(X->x)[jr + i];
                 }
 
               BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
@@ -6657,12 +6657,12 @@
                  static_cast<octave_idx_type>(X->nzmax));
               for (octave_idx_type j = 0;
                    j <= static_cast<octave_idx_type>(X->ncol); j++)
-                retval.xcidx(j) = static_cast<octave_idx_type *>(X->p)[j];
+                retval.xcidx (j) = static_cast<octave_idx_type *>(X->p)[j];
               for (octave_idx_type j = 0;
                    j < static_cast<octave_idx_type>(X->nzmax); j++)
                 {
-                  retval.xridx(j) = static_cast<octave_idx_type *>(X->i)[j];
-                  retval.xdata(j) = static_cast<Complex *>(X->x)[j];
+                  retval.xridx (j) = static_cast<octave_idx_type *>(X->i)[j];
+                  retval.xdata (j) = static_cast<Complex *>(X->x)[j];
                 }
 
               BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
@@ -6712,7 +6712,7 @@
               OCTAVE_LOCAL_BUFFER (double, Xx, b_nr);
               OCTAVE_LOCAL_BUFFER (double, Xz, b_nr);
 
-              retval.xcidx(0) = 0;
+              retval.xcidx (0) = 0;
               for (octave_idx_type j = 0; j < b_nc; j++)
                 {
                   for (octave_idx_type i = 0; i < b_nr; i++)
@@ -6754,11 +6754,11 @@
                               retval.change_capacity (sz);
                               x_nz = sz;
                             }
-                          retval.xdata(ii) = tmp;
-                          retval.xridx(ii++) = i;
+                          retval.xdata (ii) = tmp;
+                          retval.xridx (ii++) = i;
                         }
                     }
-                  retval.xcidx(j+1) = ii;
+                  retval.xcidx (j+1) = ii;
                 }
 
               retval.maybe_compress ();
@@ -6970,7 +6970,7 @@
       return ComplexMatrix ();
     }
 
-  if (singular_fallback && mattype.type(false) == MatrixType::Rectangular)
+  if (singular_fallback && mattype.type (false) == MatrixType::Rectangular)
     {
       rcond = 1.;
 #ifdef USE_QRSOLVE
@@ -7038,7 +7038,7 @@
       return SparseComplexMatrix ();
     }
 
-  if (singular_fallback && mattype.type(false) == MatrixType::Rectangular)
+  if (singular_fallback && mattype.type (false) == MatrixType::Rectangular)
     {
       rcond = 1.;
 #ifdef USE_QRSOLVE
@@ -7451,12 +7451,12 @@
     {
       for (octave_idx_type j = 0; j < nr; j++)
         {
-          if (jj < cidx(i+1) && ridx(jj) == j)
+          if (jj < cidx (i+1) && ridx (jj) == j)
             jj++;
           else
             {
-              r.data(ii) = true;
-              r.ridx(ii++) = j;
+              r.data (ii) = true;
+              r.ridx (ii++) = j;
             }
         }
       r.cidx (i+1) = ii;
@@ -7500,7 +7500,7 @@
   else
     {
       SPARSE_REDUCTION_OP (SparseMatrix, double, *=,
-                           (cidx(j+1) - cidx(j) < nr ? 0.0 : 1.0), 1.0);
+                           (cidx (j+1) - cidx (j) < nr ? 0.0 : 1.0), 1.0);
     }
 }
 
@@ -7515,7 +7515,7 @@
 {
 #define ROW_EXPR \
   double d = data (i); \
-  tmp[ridx(i)] += d * d
+  tmp[ridx (i)] += d * d
 
 #define COL_EXPR \
   double d = data (i); \
@@ -7536,7 +7536,7 @@
   SparseMatrix retval (*this);
 
   for (octave_idx_type i = 0; i < nz; i++)
-    retval.data(i) = fabs(retval.data(i));
+    retval.data (i) = fabs (retval.data (i));
 
   return retval;
 }
@@ -7563,10 +7563,10 @@
    for (octave_idx_type j = 0; j < nc; j++)
      {
        octave_quit ();
-       for (octave_idx_type i = a.cidx(j); i < a.cidx(j+1); i++)
+       for (octave_idx_type i = a.cidx (j); i < a.cidx (j+1); i++)
          {
-           os << a.ridx(i) + 1 << " "  << j + 1 << " ";
-           octave_write_double (os, a.data(i));
+           os << a.ridx (i) + 1 << " "  << j + 1 << " ";
+           octave_write_double (os, a.data (i));
            os << "\n";
          }
      }
@@ -7712,14 +7712,14 @@
     {
       result = SparseMatrix (nr, nc, d);
       for (octave_idx_type j = 0; j < nc; j++)
-        for (octave_idx_type i = m.cidx(j); i < m.cidx(j+1); i++)
+        for (octave_idx_type i = m.cidx (j); i < m.cidx (j+1); i++)
           {
             double tmp = xmin (d, m.data (i));
             if (tmp != 0.)
               {
-                octave_idx_type idx = m.ridx(i) + j * nr;
-                result.xdata(idx) = tmp;
-                result.xridx(idx) = m.ridx(i);
+                octave_idx_type idx = m.ridx (i) + j * nr;
+                result.xdata (idx) = tmp;
+                result.xridx (idx) = m.ridx (i);
               }
           }
     }
@@ -7727,27 +7727,27 @@
     {
       octave_idx_type nel = 0;
       for (octave_idx_type j = 0; j < nc; j++)
-        for (octave_idx_type i = m.cidx(j); i < m.cidx(j+1); i++)
+        for (octave_idx_type i = m.cidx (j); i < m.cidx (j+1); i++)
           if (xmin (d, m.data (i)) != 0.)
             nel++;
 
       result = SparseMatrix (nr, nc, nel);
 
       octave_idx_type ii = 0;
-      result.xcidx(0) = 0;
+      result.xcidx (0) = 0;
       for (octave_idx_type j = 0; j < nc; j++)
         {
-          for (octave_idx_type i = m.cidx(j); i < m.cidx(j+1); i++)
+          for (octave_idx_type i = m.cidx (j); i < m.cidx (j+1); i++)
             {
               double tmp = xmin (d, m.data (i));
 
               if (tmp != 0.)
                 {
-                  result.xdata(ii) = tmp;
-                  result.xridx(ii++) = m.ridx(i);
-                }
-            }
-          result.xcidx(j+1) = ii;
+                  result.xdata (ii) = tmp;
+                  result.xridx (ii++) = m.ridx (i);
+                }
+            }
+          result.xcidx (j+1) = ii;
         }
     }
 
@@ -7783,38 +7783,38 @@
           r.cidx (0) = 0;
           for (octave_idx_type i = 0 ; i < a_nc ; i++)
             {
-              octave_idx_type  ja = a.cidx(i);
-              octave_idx_type  ja_max = a.cidx(i+1);
+              octave_idx_type  ja = a.cidx (i);
+              octave_idx_type  ja_max = a.cidx (i+1);
               bool ja_lt_max= ja < ja_max;
 
-              octave_idx_type  jb = b.cidx(i);
-              octave_idx_type  jb_max = b.cidx(i+1);
+              octave_idx_type  jb = b.cidx (i);
+              octave_idx_type  jb_max = b.cidx (i+1);
               bool jb_lt_max = jb < jb_max;
 
               while (ja_lt_max || jb_lt_max )
                 {
                   octave_quit ();
                   if ((! jb_lt_max) ||
-                      (ja_lt_max && (a.ridx(ja) < b.ridx(jb))))
+                      (ja_lt_max && (a.ridx (ja) < b.ridx (jb))))
                     {
-                      double tmp = xmin (a.data(ja), 0.);
+                      double tmp = xmin (a.data (ja), 0.);
                       if (tmp != 0.)
                         {
-                          r.ridx(jx) = a.ridx(ja);
-                          r.data(jx) = tmp;
+                          r.ridx (jx) = a.ridx (ja);
+                          r.data (jx) = tmp;
                           jx++;
                         }
                       ja++;
                       ja_lt_max= ja < ja_max;
                     }
                   else if (( !ja_lt_max ) ||
-                           (jb_lt_max && (b.ridx(jb) < a.ridx(ja)) ) )
+                           (jb_lt_max && (b.ridx (jb) < a.ridx (ja)) ) )
                     {
-                      double tmp = xmin (0., b.data(jb));
+                      double tmp = xmin (0., b.data (jb));
                       if (tmp != 0.)
                         {
-                          r.ridx(jx) = b.ridx(jb);
-                          r.data(jx) = tmp;
+                          r.ridx (jx) = b.ridx (jb);
+                          r.data (jx) = tmp;
                           jx++;
                         }
                       jb++;
@@ -7822,11 +7822,11 @@
                     }
                   else
                     {
-                      double tmp = xmin (a.data(ja), b.data(jb));
+                      double tmp = xmin (a.data (ja), b.data (jb));
                       if (tmp != 0.)
                         {
-                          r.data(jx) = tmp;
-                          r.ridx(jx) = a.ridx(ja);
+                          r.data (jx) = tmp;
+                          r.ridx (jx) = a.ridx (ja);
                           jx++;
                         }
                       ja++;
@@ -7835,7 +7835,7 @@
                       jb_lt_max= jb < jb_max;
                     }
                 }
-              r.cidx(i+1) = jx;
+              r.cidx (i+1) = jx;
             }
 
           r.maybe_compress ();
@@ -7862,15 +7862,15 @@
     {
       result = SparseMatrix (nr, nc, d);
       for (octave_idx_type j = 0; j < nc; j++)
-        for (octave_idx_type i = m.cidx(j); i < m.cidx(j+1); i++)
+        for (octave_idx_type i = m.cidx (j); i < m.cidx (j+1); i++)
           {
             double tmp = xmax (d, m.data (i));
 
             if (tmp != 0.)
               {
-                octave_idx_type idx = m.ridx(i) + j * nr;
-                result.xdata(idx) = tmp;
-                result.xridx(idx) = m.ridx(i);
+                octave_idx_type idx = m.ridx (i) + j * nr;
+                result.xdata (idx) = tmp;
+                result.xridx (idx) = m.ridx (i);
               }
           }
     }
@@ -7878,26 +7878,26 @@
     {
       octave_idx_type nel = 0;
       for (octave_idx_type j = 0; j < nc; j++)
-        for (octave_idx_type i = m.cidx(j); i < m.cidx(j+1); i++)
+        for (octave_idx_type i = m.cidx (j); i < m.cidx (j+1); i++)
           if (xmax (d, m.data (i)) != 0.)
             nel++;
 
       result = SparseMatrix (nr, nc, nel);
 
       octave_idx_type ii = 0;
-      result.xcidx(0) = 0;
+      result.xcidx (0) = 0;
       for (octave_idx_type j = 0; j < nc; j++)
         {
-          for (octave_idx_type i = m.cidx(j); i < m.cidx(j+1); i++)
+          for (octave_idx_type i = m.cidx (j); i < m.cidx (j+1); i++)
             {
               double tmp = xmax (d, m.data (i));
               if (tmp != 0.)
                 {
-                  result.xdata(ii) = tmp;
-                  result.xridx(ii++) = m.ridx(i);
-                }
-            }
-          result.xcidx(j+1) = ii;
+                  result.xdata (ii) = tmp;
+                  result.xridx (ii++) = m.ridx (i);
+                }
+            }
+          result.xcidx (j+1) = ii;
         }
     }
 
@@ -7933,38 +7933,38 @@
           r.cidx (0) = 0;
           for (octave_idx_type i = 0 ; i < a_nc ; i++)
             {
-              octave_idx_type  ja = a.cidx(i);
-              octave_idx_type  ja_max = a.cidx(i+1);
+              octave_idx_type  ja = a.cidx (i);
+              octave_idx_type  ja_max = a.cidx (i+1);
               bool ja_lt_max= ja < ja_max;
 
-              octave_idx_type  jb = b.cidx(i);
-              octave_idx_type  jb_max = b.cidx(i+1);
+              octave_idx_type  jb = b.cidx (i);
+              octave_idx_type  jb_max = b.cidx (i+1);
               bool jb_lt_max = jb < jb_max;
 
               while (ja_lt_max || jb_lt_max )
                 {
                   octave_quit ();
                   if ((! jb_lt_max) ||
-                      (ja_lt_max && (a.ridx(ja) < b.ridx(jb))))
+                      (ja_lt_max && (a.ridx (ja) < b.ridx (jb))))
                     {
-                      double tmp = xmax (a.data(ja), 0.);
+                      double tmp = xmax (a.data (ja), 0.);
                       if (tmp != 0.)
                         {
-                          r.ridx(jx) = a.ridx(ja);
-                          r.data(jx) = tmp;
+                          r.ridx (jx) = a.ridx (ja);
+                          r.data (jx) = tmp;
                           jx++;
                         }
                       ja++;
                       ja_lt_max= ja < ja_max;
                     }
                   else if (( !ja_lt_max ) ||
-                           (jb_lt_max && (b.ridx(jb) < a.ridx(ja)) ) )
+                           (jb_lt_max && (b.ridx (jb) < a.ridx (ja)) ) )
                     {
-                      double tmp = xmax (0., b.data(jb));
+                      double tmp = xmax (0., b.data (jb));
                       if (tmp != 0.)
                         {
-                          r.ridx(jx) = b.ridx(jb);
-                          r.data(jx) = tmp;
+                          r.ridx (jx) = b.ridx (jb);
+                          r.data (jx) = tmp;
                           jx++;
                         }
                       jb++;
@@ -7972,11 +7972,11 @@
                     }
                   else
                     {
-                      double tmp = xmax (a.data(ja), b.data(jb));
+                      double tmp = xmax (a.data (ja), b.data (jb));
                       if (tmp != 0.)
                         {
-                          r.data(jx) = tmp;
-                          r.ridx(jx) = a.ridx(ja);
+                          r.data (jx) = tmp;
+                          r.ridx (jx) = a.ridx (ja);
                           jx++;
                         }
                       ja++;
@@ -7985,7 +7985,7 @@
                       jb_lt_max= jb < jb_max;
                     }
                 }
-              r.cidx(i+1) = jx;
+              r.cidx (i+1) = jx;
             }
 
           r.maybe_compress ();
--- a/liboctave/data-conv.cc
+++ b/liboctave/data-conv.cc
@@ -496,7 +496,7 @@
   while (0)
 
 // Have to use copy here to avoid writing over data accessed via
-// Matrix::data().
+// Matrix::data ().
 
 #define LS_DO_WRITE(TYPE, data, size, len, stream) \
   do \
--- a/liboctave/dbleQR.cc
+++ b/liboctave/dbleQR.cc
@@ -466,7 +466,7 @@
 
   if (u.length () == m && v.length () == n)
     {
-      init(q*r + Matrix (u) * Matrix (v).transpose (), get_type ());
+      init (q*r + Matrix (u) * Matrix (v).transpose (), get_type ());
     }
   else
     (*current_liboctave_error_handler) ("qrupdate: dimensions mismatch");
@@ -482,7 +482,7 @@
 
   if (u.rows () == m && v.rows () == n && u.cols () == v.cols ())
     {
-      init(q*r + u * v.transpose (), get_type ());
+      init (q*r + u * v.transpose (), get_type ());
     }
   else
     (*current_liboctave_error_handler) ("qrupdate: dimensions mismatch");
--- a/liboctave/dbleSVD.cc
+++ b/liboctave/dbleSVD.cc
@@ -135,7 +135,7 @@
   double *u = left_sm.fortran_vec ();
 
   sigma.resize (nrow_s, ncol_s);
-  double *s_vec  = sigma.fortran_vec ();
+  double *s_vec = sigma.fortran_vec ();
 
   if (! (jobv == 'N' || jobv == 'O'))
     right_sm.resize (nrow_vt, n);
--- a/liboctave/dim-vector.cc
+++ b/liboctave/dim-vector.cc
@@ -157,16 +157,16 @@
             }
         }
       else
-        new_dims.resize(k);
+        new_dims.resize (k);
     }
 
   return new_dims;
 }
 
-// This is the rule for cat(). cat(dim, A, B) works if one
+// This is the rule for cat(). cat (dim, A, B) works if one
 // of the following holds, in this order:
 //
-// 1. size(A, k) == size(B, k) for all k != dim.
+// 1. size (A, k) == size (B, k) for all k != dim.
 // In this case, size (C, dim) = size (A, dim) + size (B, dim) and
 // other sizes remain intact.
 //
@@ -230,7 +230,7 @@
 // horizontally (dim = 2) or vertically (dim = 1) if one of the
 // following holds, in this order:
 //
-// 1. cat(dim, A, B) works
+// 1. cat (dim, A, B) works
 //
 // 2. A, B are 2D and one of them is an empty vector, in which
 // case the result is the other one except if both of them
--- a/liboctave/dim-vector.h
+++ b/liboctave/dim-vector.h
@@ -66,7 +66,7 @@
 
   static octave_idx_type *newrep (int ndims)
   {
-    octave_idx_type *r = new octave_idx_type[ndims + 2];
+    octave_idx_type *r = new octave_idx_type [ndims + 2];
 
     *r++ = 1;
     *r++ = ndims;
@@ -80,7 +80,7 @@
   {
     int l = ndims ();
 
-    octave_idx_type *r = new octave_idx_type[l + 2];
+    octave_idx_type *r = new octave_idx_type [l + 2];
 
     *r++ = 1;
     *r++ = l;
@@ -100,7 +100,7 @@
     if (n < 2)
       n = 2;
 
-    octave_idx_type *r = new octave_idx_type[n + 2];
+    octave_idx_type *r = new octave_idx_type [n + 2];
 
     *r++ = 1;
     *r++ = n;
@@ -212,6 +212,12 @@
 
   void chop_all_singletons (void);
 
+  // WARNING: Only call by jit
+  octave_idx_type *to_jit (void) const
+  {
+    return rep;
+  }
+
 private:
 
   static octave_idx_type *nil_rep (void)
@@ -220,9 +226,6 @@
       return zv.rep;
     }
 
-  explicit dim_vector (octave_idx_type *r)
-    : rep (r) { }
-
 public:
 
   static octave_idx_type dim_max (void);
@@ -233,6 +236,10 @@
   dim_vector (const dim_vector& dv) : rep (dv.rep)
   { OCTREFCOUNT_ATOMIC_INCREMENT (&(count())); }
 
+  // FIXME: Should be private, but required by array constructor for jit
+  explicit dim_vector (octave_idx_type *r)
+    : rep (r) { }
+
   static dim_vector alloc (int n)
   {
     return dim_vector (newrep (n < 2 ? 2 : n));
--- a/liboctave/eigs-base.cc
+++ b/liboctave/eigs-base.cc
@@ -241,8 +241,8 @@
       for (octave_idx_type j = 0; j < b_nc; j++)
         {
           for (octave_idx_type i = 0; i < n; i++)
-            retval.elem(static_cast<octave_idx_type>(qv[i]), j)  =
-              tmp.elem(i,j);
+            retval.elem (static_cast<octave_idx_type>(qv[i]), j) =
+              tmp.elem (i,j);
         }
     }
 
@@ -264,7 +264,7 @@
   for (octave_idx_type j = 0; j < b_nc; j++)
     {
       for (octave_idx_type i = 0; i < n; i++)
-        retval.elem(i,j) = m.elem(static_cast<octave_idx_type>(qv[i]), j);
+        retval.elem (i,j) = m.elem (static_cast<octave_idx_type>(qv[i]), j);
     }
   return U.solve (utyp, retval, err, rcond, 0);
 }
@@ -278,8 +278,8 @@
     y[j] = 0.;
 
   for (octave_idx_type j = 0; j < nc; j++)
-    for (octave_idx_type i = m.cidx(j); i < m.cidx(j+1); i++)
-      y[m.ridx(i)] += m.data(i) * x[j];
+    for (octave_idx_type i = m.cidx (j); i < m.cidx (j+1); i++)
+      y[m.ridx (i)] += m.data (i) * x[j];
 
   return true;
 }
@@ -315,8 +315,8 @@
     y[j] = 0.;
 
   for (octave_idx_type j = 0; j < nc; j++)
-    for (octave_idx_type i = m.cidx(j); i < m.cidx(j+1); i++)
-      y[m.ridx(i)] += m.data(i) * x[j];
+    for (octave_idx_type i = m.cidx (j); i < m.cidx (j+1); i++)
+      y[m.ridx (i)] += m.data (i) * x[j];
 
   return true;
 }
@@ -354,8 +354,8 @@
   else
     {
       bt = fact.chol_matrix ();
-      b =  bt.transpose ();
-      permB = ColumnVector(n);
+      b = bt.transpose ();
+      permB = ColumnVector (n);
       for (octave_idx_type i = 0; i < n; i++)
         permB(i) = i;
       return true;
@@ -391,8 +391,8 @@
   else
     {
       bt = fact.chol_matrix ();
-      b =  bt.hermitian ();
-      permB = ColumnVector(n);
+      b = bt.hermitian ();
+      permB = ColumnVector (n);
       for (octave_idx_type i = 0; i < n; i++)
         permB(i) = i;
       return true;
@@ -438,12 +438,12 @@
               SparseMatrix tmp(n,n,n);
               for (octave_idx_type i = 0; i < n; i++)
                 {
-                  tmp.xcidx(i) = i;
-                  tmp.xridx(i) =
+                  tmp.xcidx (i) = i;
+                  tmp.xridx (i) =
                     static_cast<octave_idx_type>(permB(i));
-                  tmp.xdata(i) = 1;
+                  tmp.xdata (i) = 1;
                 }
-              tmp.xcidx(n) = n;
+              tmp.xcidx (n) = n;
 
               AminusSigmaB = AminusSigmaB - sigma * tmp *
                 b.transpose () * b * tmp.transpose ();
@@ -459,13 +459,13 @@
     {
       SparseMatrix sigmat (n, n, n);
 
-          // Create sigma * speye(n,n)
+          // Create sigma * speye (n,n)
           sigmat.xcidx (0) = 0;
           for (octave_idx_type i = 0; i < n; i++)
             {
-              sigmat.xdata(i) = sigma;
-              sigmat.xridx(i) = i;
-              sigmat.xcidx(i+1) = i + 1;
+              sigmat.xdata (i) = sigma;
+              sigmat.xridx (i) = i;
+              sigmat.xcidx (i+1) = i + 1;
             }
 
           AminusSigmaB = AminusSigmaB - sigmat;
@@ -490,9 +490,9 @@
   for (octave_idx_type j = 0; j < n; j++)
     {
       double d = 0.;
-      if (U.xcidx(j+1) > U.xcidx(j) &&
-          U.xridx (U.xcidx(j+1)-1) == j)
-        d = std::abs (U.xdata (U.xcidx(j+1)-1));
+      if (U.xcidx (j+1) > U.xcidx (j) &&
+          U.xridx (U.xcidx (j+1)-1) == j)
+        d = std::abs (U.xdata (U.xcidx (j+1)-1));
 
       if (xisnan (minU) || d < minU)
         minU = d;
@@ -541,8 +541,8 @@
                    j < b.cols (); j++)
                 for (octave_idx_type i = 0;
                      i < b.rows (); i++)
-                  *p++ -=  tmp.xelem (static_cast<octave_idx_type>(pB[i]),
-                                      static_cast<octave_idx_type>(pB[j]));
+                  *p++ -= tmp.xelem (static_cast<octave_idx_type>(pB[i]),
+                                     static_cast<octave_idx_type>(pB[j]));
             }
           else
             AminusSigmaB = AminusSigmaB - tmp;
@@ -570,7 +570,7 @@
   double maxU = octave_NaN;
   for (octave_idx_type j = 0; j < n; j++)
     {
-      double d = std::abs (U.xelem(j,j));
+      double d = std::abs (U.xelem (j,j));
       if (xisnan (minU) || d < minU)
         minU = d;
 
@@ -613,12 +613,12 @@
               SparseMatrix tmp(n,n,n);
               for (octave_idx_type i = 0; i < n; i++)
                 {
-                  tmp.xcidx(i) = i;
-                  tmp.xridx(i) =
+                  tmp.xcidx (i) = i;
+                  tmp.xridx (i) =
                     static_cast<octave_idx_type>(permB(i));
-                  tmp.xdata(i) = 1;
+                  tmp.xdata (i) = 1;
                 }
-              tmp.xcidx(n) = n;
+              tmp.xcidx (n) = n;
 
               AminusSigmaB = AminusSigmaB - tmp * b.hermitian () * b *
                 tmp.transpose () * sigma;
@@ -633,13 +633,13 @@
     {
       SparseComplexMatrix sigmat (n, n, n);
 
-      // Create sigma * speye(n,n)
+      // Create sigma * speye (n,n)
       sigmat.xcidx (0) = 0;
       for (octave_idx_type i = 0; i < n; i++)
         {
-          sigmat.xdata(i) = sigma;
-          sigmat.xridx(i) = i;
-          sigmat.xcidx(i+1) = i + 1;
+          sigmat.xdata (i) = sigma;
+          sigmat.xridx (i) = i;
+          sigmat.xcidx (i+1) = i + 1;
         }
 
       AminusSigmaB = AminusSigmaB - sigmat;
@@ -664,9 +664,9 @@
   for (octave_idx_type j = 0; j < n; j++)
     {
       double d = 0.;
-      if (U.xcidx(j+1) > U.xcidx(j) &&
-          U.xridx (U.xcidx(j+1)-1) == j)
-        d = std::abs (U.xdata (U.xcidx(j+1)-1));
+      if (U.xcidx (j+1) > U.xcidx (j) &&
+          U.xridx (U.xcidx (j+1)-1) == j)
+        d = std::abs (U.xdata (U.xcidx (j+1)-1));
 
       if (xisnan (minU) || d < minU)
         minU = d;
@@ -715,8 +715,8 @@
                    j < b.cols (); j++)
                 for (octave_idx_type i = 0;
                      i < b.rows (); i++)
-                  *p++ -=  tmp.xelem (static_cast<octave_idx_type>(pB[i]),
-                                      static_cast<octave_idx_type>(pB[j]));
+                  *p++ -= tmp.xelem (static_cast<octave_idx_type>(pB[i]),
+                                     static_cast<octave_idx_type>(pB[j]));
             }
           else
             AminusSigmaB = AminusSigmaB - tmp;
@@ -744,7 +744,7 @@
   double maxU = octave_NaN;
   for (octave_idx_type j = 0; j < n; j++)
     {
-      double d = std::abs (U.xelem(j,j));
+      double d = std::abs (U.xelem (j,j));
       if (xisnan (minU) || d < minU)
         minU = d;
 
@@ -800,9 +800,9 @@
   if (resid.is_empty ())
     {
       std::string rand_dist = octave_rand::distribution ();
-      octave_rand::distribution("uniform");
-      resid = ColumnVector (octave_rand::vector(n));
-      octave_rand::distribution(rand_dist);
+      octave_rand::distribution ("uniform");
+      resid = ColumnVector (octave_rand::vector (n));
+      octave_rand::distribution (rand_dist);
     }
 
   if (n < 3)
@@ -827,7 +827,7 @@
     {
       (*current_liboctave_error_handler)
         ("eigs: Invalid number of eigenvalues to extract (must be 0 < k < n-1-1).\n"
-         "      Use 'eig(full(A))' instead");
+         "      Use 'eig (full (A))' instead");
       return -1;
     }
 
@@ -891,14 +891,14 @@
           b = b.transpose ();
           if (permB.length () == 0)
             {
-              permB = ColumnVector(n);
+              permB = ColumnVector (n);
               for (octave_idx_type i = 0; i < n; i++)
                 permB(i) = i;
             }
         }
       else
         {
-          if (! make_cholb(b, bt, permB))
+          if (! make_cholb (b, bt, permB))
             {
               (*current_liboctave_error_handler)
                 ("eigs: The matrix B is not positive definite");
@@ -951,7 +951,7 @@
           return -1;
         }
 
-      if (disp > 0 && !xisnan(workl[iptr(5)-1]))
+      if (disp > 0 && !xisnan (workl[iptr (5)-1]))
         {
           if (iter++)
             {
@@ -979,7 +979,7 @@
               for (octave_idx_type i = 0; i < n; i++)
                 mtmp(i,0) = workd[i + iptr(0) - 1];
 
-              mtmp = utsolve(bt, permB, m * ltsolve(b, permB, mtmp));
+              mtmp = utsolve (bt, permB, m * ltsolve (b, permB, mtmp));
 
               for (octave_idx_type i = 0; i < n; i++)
                 workd[i+iptr(1)-1] = mtmp(i,0);
@@ -1073,7 +1073,7 @@
                 }
 
               if (note3)
-                eig_vec = ltsolve(b, permB, eig_vec);
+                eig_vec = ltsolve (b, permB, eig_vec);
             }
         }
       else
@@ -1124,9 +1124,9 @@
   if (resid.is_empty ())
     {
       std::string rand_dist = octave_rand::distribution ();
-      octave_rand::distribution("uniform");
-      resid = ColumnVector (octave_rand::vector(n));
-      octave_rand::distribution(rand_dist);
+      octave_rand::distribution ("uniform");
+      resid = ColumnVector (octave_rand::vector (n));
+      octave_rand::distribution (rand_dist);
     }
 
   if (n < 3)
@@ -1140,7 +1140,7 @@
     {
       (*current_liboctave_error_handler)
         ("eigs: Invalid number of eigenvalues to extract (must be 0 < k < n-1-1).\n"
-             "      Use 'eig(full(A))' instead");
+             "      Use 'eig (full (A))' instead");
       return -1;
     }
 
@@ -1218,7 +1218,7 @@
   OCTAVE_LOCAL_BUFFER (octave_idx_type, P, (have_b ? b.rows () : m.rows ()));
   OCTAVE_LOCAL_BUFFER (octave_idx_type, Q, (have_b ? b.cols () : m.cols ()));
 
-  if (! LuAminusSigmaB(m, b, cholB, permB, sigma, L, U, P, Q))
+  if (! LuAminusSigmaB (m, b, cholB, permB, sigma, L, U, P, Q))
     return -1;
 
   octave_idx_type lwork = p * (p + 8);
@@ -1244,7 +1244,7 @@
           return -1;
         }
 
-      if (disp > 0 && !xisnan(workl[iptr(5)-1]))
+      if (disp > 0 && !xisnan (workl[iptr (5)-1]))
         {
           if (iter++)
             {
@@ -1433,9 +1433,9 @@
   if (resid.is_empty ())
     {
       std::string rand_dist = octave_rand::distribution ();
-      octave_rand::distribution("uniform");
-      resid = ColumnVector (octave_rand::vector(n));
-      octave_rand::distribution(rand_dist);
+      octave_rand::distribution ("uniform");
+      resid = ColumnVector (octave_rand::vector (n));
+      octave_rand::distribution (rand_dist);
     }
 
   if (n < 3)
@@ -1460,7 +1460,7 @@
     {
       (*current_liboctave_error_handler)
         ("eigs: Invalid number of eigenvalues to extract (must be 0 < k < n-1).\n"
-             "      Use 'eig(full(A))' instead");
+             "      Use 'eig (full (A))' instead");
       return -1;
     }
 
@@ -1545,7 +1545,7 @@
           return -1;
         }
 
-      if (disp > 0 && !xisnan(workl[iptr(5)-1]))
+      if (disp > 0 && !xisnan (workl[iptr (5)-1]))
         {
           if (iter++)
             {
@@ -1714,9 +1714,9 @@
   if (resid.is_empty ())
     {
       std::string rand_dist = octave_rand::distribution ();
-      octave_rand::distribution("uniform");
-      resid = ColumnVector (octave_rand::vector(n));
-      octave_rand::distribution(rand_dist);
+      octave_rand::distribution ("uniform");
+      resid = ColumnVector (octave_rand::vector (n));
+      octave_rand::distribution (rand_dist);
     }
 
   if (n < 3)
@@ -1741,7 +1741,7 @@
     {
       (*current_liboctave_error_handler)
         ("eigs: Invalid number of eigenvalues to extract (must be 0 < k < n-1).\n"
-         "      Use 'eig(full(A))' instead");
+         "      Use 'eig (full (A))' instead");
       return -1;
     }
 
@@ -1805,14 +1805,14 @@
           b = b.transpose ();
           if (permB.length () == 0)
             {
-              permB = ColumnVector(n);
+              permB = ColumnVector (n);
               for (octave_idx_type i = 0; i < n; i++)
                 permB(i) = i;
             }
         }
       else
         {
-          if (! make_cholb(b, bt, permB))
+          if (! make_cholb (b, bt, permB))
             {
               (*current_liboctave_error_handler)
                 ("eigs: The matrix B is not positive definite");
@@ -1893,7 +1893,7 @@
               for (octave_idx_type i = 0; i < n; i++)
                 mtmp(i,0) = workd[i + iptr(0) - 1];
 
-              mtmp = utsolve(bt, permB, m * ltsolve(b, permB, mtmp));
+              mtmp = utsolve (bt, permB, m * ltsolve (b, permB, mtmp));
 
               for (octave_idx_type i = 0; i < n; i++)
                 workd[i+iptr(1)-1] = mtmp(i,0);
@@ -1969,7 +1969,7 @@
               if (dr[i] == 0.0 && di[i] == 0.0 && jj == 0)
                 jj++;
               else
-                d [i-jj] = Complex (dr[i], di[i]);
+                d[i-jj] = Complex (dr[i], di[i]);
             }
           if (jj == 0 && !rvec)
             for (octave_idx_type i = 0; i < k; i++)
@@ -1982,7 +1982,7 @@
               d[i] = d[k - i - 1];
               d[k - i - 1] = dtmp;
             }
-          eig_val.resize(k);
+          eig_val.resize (k);
 
           if (rvec)
             {
@@ -2012,11 +2012,11 @@
                 {
                   octave_idx_type off1 = i * n;
                   octave_idx_type off2 = (i+1) * n;
-                  if (std::imag(eig_val(i)) == 0)
+                  if (std::imag (eig_val(i)) == 0)
                     {
                       for (octave_idx_type j = 0; j < n; j++)
                         eig_vec(j,i) =
-                          Complex(z[j+off1],0.);
+                          Complex (z[j+off1],0.);
                       i++;
                     }
                   else
@@ -2024,17 +2024,17 @@
                       for (octave_idx_type j = 0; j < n; j++)
                         {
                           eig_vec(j,i) =
-                            Complex(z[j+off1],z[j+off2]);
+                            Complex (z[j+off1],z[j+off2]);
                           if (i < k - 1)
                             eig_vec(j,i+1) =
-                              Complex(z[j+off1],-z[j+off2]);
+                              Complex (z[j+off1],-z[j+off2]);
                         }
                       i+=2;
                     }
                 }
 
               if (note3)
-                eig_vec = ltsolve(M (b), permB, eig_vec);
+                eig_vec = ltsolve (M(b), permB, eig_vec);
             }
         }
       else
@@ -2087,9 +2087,9 @@
   if (resid.is_empty ())
     {
       std::string rand_dist = octave_rand::distribution ();
-      octave_rand::distribution("uniform");
-      resid = ColumnVector (octave_rand::vector(n));
-      octave_rand::distribution(rand_dist);
+      octave_rand::distribution ("uniform");
+      resid = ColumnVector (octave_rand::vector (n));
+      octave_rand::distribution (rand_dist);
     }
 
   if (n < 3)
@@ -2114,7 +2114,7 @@
     {
       (*current_liboctave_error_handler)
         ("eigs: Invalid number of eigenvalues to extract (must be 0 < k < n-1).\n"
-             "      Use 'eig(full(A))' instead");
+             "      Use 'eig (full (A))' instead");
       return -1;
     }
 
@@ -2181,7 +2181,7 @@
   OCTAVE_LOCAL_BUFFER (octave_idx_type, P, (have_b ? b.rows () : m.rows ()));
   OCTAVE_LOCAL_BUFFER (octave_idx_type, Q, (have_b ? b.cols () : m.cols ()));
 
-  if (! LuAminusSigmaB(m, b, cholB, permB, sigmar, L, U, P, Q))
+  if (! LuAminusSigmaB (m, b, cholB, permB, sigmar, L, U, P, Q))
     return -1;
 
   octave_idx_type lwork = 3 * p * (p + 2);
@@ -2207,7 +2207,7 @@
           return -1;
         }
 
-      if (disp > 0 && !xisnan(workl[iptr(5)-1]))
+      if (disp > 0 && !xisnan (workl[iptr (5)-1]))
         {
           if (iter++)
             {
@@ -2355,7 +2355,7 @@
               if (dr[i] == 0.0 && di[i] == 0.0 && jj == 0)
                 jj++;
               else
-                d [i-jj] = Complex (dr[i], di[i]);
+                d[i-jj] = Complex (dr[i], di[i]);
             }
           if (jj == 0 && !rvec)
             for (octave_idx_type i = 0; i < k; i++)
@@ -2368,7 +2368,7 @@
               d[i] = d[k - i - 1];
               d[k - i - 1] = dtmp;
             }
-          eig_val.resize(k);
+          eig_val.resize (k);
 
           if (rvec)
             {
@@ -2398,11 +2398,11 @@
                 {
                   octave_idx_type off1 = i * n;
                   octave_idx_type off2 = (i+1) * n;
-                  if (std::imag(eig_val(i)) == 0)
+                  if (std::imag (eig_val(i)) == 0)
                     {
                       for (octave_idx_type j = 0; j < n; j++)
                         eig_vec(j,i) =
-                          Complex(z[j+off1],0.);
+                          Complex (z[j+off1],0.);
                       i++;
                     }
                   else
@@ -2410,10 +2410,10 @@
                       for (octave_idx_type j = 0; j < n; j++)
                         {
                           eig_vec(j,i) =
-                            Complex(z[j+off1],z[j+off2]);
+                            Complex (z[j+off1],z[j+off2]);
                           if (i < k - 1)
                             eig_vec(j,i+1) =
-                              Complex(z[j+off1],-z[j+off2]);
+                              Complex (z[j+off1],-z[j+off2]);
                         }
                       i+=2;
                     }
@@ -2450,9 +2450,9 @@
   if (resid.is_empty ())
     {
       std::string rand_dist = octave_rand::distribution ();
-      octave_rand::distribution("uniform");
-      resid = ColumnVector (octave_rand::vector(n));
-      octave_rand::distribution(rand_dist);
+      octave_rand::distribution ("uniform");
+      resid = ColumnVector (octave_rand::vector (n));
+      octave_rand::distribution (rand_dist);
     }
 
   if (n < 3)
@@ -2477,7 +2477,7 @@
     {
       (*current_liboctave_error_handler)
         ("eigs: Invalid number of eigenvalues to extract (must be 0 < k < n-1).\n"
-             "      Use 'eig(full(A))' instead");
+             "      Use 'eig (full (A))' instead");
       return -1;
     }
 
@@ -2667,7 +2667,7 @@
               if (dr[i] == 0.0 && di[i] == 0.0 && jj == 0)
                 jj++;
               else
-                d [i-jj] = Complex (dr[i], di[i]);
+                d[i-jj] = Complex (dr[i], di[i]);
             }
           if (jj == 0 && !rvec)
             for (octave_idx_type i = 0; i < k; i++)
@@ -2680,7 +2680,7 @@
               d[i] = d[k - i - 1];
               d[k - i - 1] = dtmp;
             }
-          eig_val.resize(k);
+          eig_val.resize (k);
 
           if (rvec)
             {
@@ -2710,11 +2710,11 @@
                 {
                   octave_idx_type off1 = i * n;
                   octave_idx_type off2 = (i+1) * n;
-                  if (std::imag(eig_val(i)) == 0)
+                  if (std::imag (eig_val(i)) == 0)
                     {
                       for (octave_idx_type j = 0; j < n; j++)
                         eig_vec(j,i) =
-                          Complex(z[j+off1],0.);
+                          Complex (z[j+off1],0.);
                       i++;
                     }
                   else
@@ -2722,10 +2722,10 @@
                       for (octave_idx_type j = 0; j < n; j++)
                         {
                           eig_vec(j,i) =
-                            Complex(z[j+off1],z[j+off2]);
+                            Complex (z[j+off1],z[j+off2]);
                           if (i < k - 1)
                             eig_vec(j,i+1) =
-                              Complex(z[j+off1],-z[j+off2]);
+                              Complex (z[j+off1],-z[j+off2]);
                         }
                       i+=2;
                     }
@@ -2778,13 +2778,13 @@
   if (cresid.is_empty ())
     {
       std::string rand_dist = octave_rand::distribution ();
-      octave_rand::distribution("uniform");
-      Array<double> rr (octave_rand::vector(n));
-      Array<double> ri (octave_rand::vector(n));
+      octave_rand::distribution ("uniform");
+      Array<double> rr (octave_rand::vector (n));
+      Array<double> ri (octave_rand::vector (n));
       cresid = ComplexColumnVector (n);
       for (octave_idx_type i = 0; i < n; i++)
-        cresid(i) = Complex(rr(i),ri(i));
-      octave_rand::distribution(rand_dist);
+        cresid(i) = Complex (rr(i),ri(i));
+      octave_rand::distribution (rand_dist);
     }
 
   if (n < 3)
@@ -2809,7 +2809,7 @@
     {
       (*current_liboctave_error_handler)
         ("eigs: Invalid number of eigenvalues to extract (must be 0 < k < n-1).\n"
-         "      Use 'eig(full(A))' instead");
+         "      Use 'eig (full (A))' instead");
       return -1;
     }
 
@@ -2873,14 +2873,14 @@
           b = b.hermitian ();
           if (permB.length () == 0)
             {
-              permB = ColumnVector(n);
+              permB = ColumnVector (n);
               for (octave_idx_type i = 0; i < n; i++)
                 permB(i) = i;
             }
         }
       else
         {
-          if (! make_cholb(b, bt, permB))
+          if (! make_cholb (b, bt, permB))
             {
               (*current_liboctave_error_handler)
                 ("eigs: The matrix B is not positive definite");
@@ -2934,7 +2934,7 @@
           return -1;
         }
 
-      if (disp > 0 && !xisnan(workl[iptr(5)-1]))
+      if (disp > 0 && !xisnan (workl[iptr (5)-1]))
         {
           if (iter++)
             {
@@ -2961,7 +2961,7 @@
               ComplexMatrix mtmp (n,1);
               for (octave_idx_type i = 0; i < n; i++)
                 mtmp(i,0) = workd[i + iptr(0) - 1];
-              mtmp = utsolve(bt, permB, m * ltsolve(b, permB, mtmp));
+              mtmp = utsolve (bt, permB, m * ltsolve (b, permB, mtmp));
               for (octave_idx_type i = 0; i < n; i++)
                 workd[i+iptr(1)-1] = mtmp(i,0);
 
@@ -3026,7 +3026,7 @@
           d[i] = d[k - i - 1];
           d[k - i - 1] = ctmp;
         }
-      eig_val.resize(k);
+      eig_val.resize (k);
 
       if (rvec)
         {
@@ -3051,7 +3051,7 @@
             }
 
           if (note3)
-            eig_vec = ltsolve(b, permB, eig_vec);
+            eig_vec = ltsolve (b, permB, eig_vec);
         }
     }
   else
@@ -3103,13 +3103,13 @@
   if (cresid.is_empty ())
     {
       std::string rand_dist = octave_rand::distribution ();
-      octave_rand::distribution("uniform");
-      Array<double> rr (octave_rand::vector(n));
-      Array<double> ri (octave_rand::vector(n));
+      octave_rand::distribution ("uniform");
+      Array<double> rr (octave_rand::vector (n));
+      Array<double> ri (octave_rand::vector (n));
       cresid = ComplexColumnVector (n);
       for (octave_idx_type i = 0; i < n; i++)
-        cresid(i) = Complex(rr(i),ri(i));
-      octave_rand::distribution(rand_dist);
+        cresid(i) = Complex (rr(i),ri(i));
+      octave_rand::distribution (rand_dist);
     }
 
   if (n < 3)
@@ -3134,7 +3134,7 @@
     {
       (*current_liboctave_error_handler)
         ("eigs: Invalid number of eigenvalues to extract (must be 0 < k < n-1).\n"
-             "      Use 'eig(full(A))' instead");
+             "      Use 'eig (full (A))' instead");
       return -1;
     }
 
@@ -3201,7 +3201,7 @@
   OCTAVE_LOCAL_BUFFER (octave_idx_type, P, (have_b ? b.rows () : m.rows ()));
   OCTAVE_LOCAL_BUFFER (octave_idx_type, Q, (have_b ? b.cols () : m.cols ()));
 
-  if (! LuAminusSigmaB(m, b, cholB, permB, sigma, L, U, P, Q))
+  if (! LuAminusSigmaB (m, b, cholB, permB, sigma, L, U, P, Q))
     return -1;
 
   octave_idx_type lwork = p * (3 * p + 5);
@@ -3366,7 +3366,7 @@
           d[i] = d[k - i - 1];
           d[k - i - 1] = ctmp;
         }
-      eig_val.resize(k);
+      eig_val.resize (k);
 
       if (rvec)
         {
@@ -3412,7 +3412,7 @@
                              int disp, int maxit)
 {
   std::string typ (_typ);
-  bool have_sigma = (std::abs(sigma) ? true : false);
+  bool have_sigma = (std::abs (sigma) ? true : false);
   char bmat = 'I';
   octave_idx_type mode = 1;
   int err = 0;
@@ -3420,13 +3420,13 @@
   if (cresid.is_empty ())
     {
       std::string rand_dist = octave_rand::distribution ();
-      octave_rand::distribution("uniform");
-      Array<double> rr (octave_rand::vector(n));
-      Array<double> ri (octave_rand::vector(n));
+      octave_rand::distribution ("uniform");
+      Array<double> rr (octave_rand::vector (n));
+      Array<double> ri (octave_rand::vector (n));
       cresid = ComplexColumnVector (n);
       for (octave_idx_type i = 0; i < n; i++)
-        cresid(i) = Complex(rr(i),ri(i));
-      octave_rand::distribution(rand_dist);
+        cresid(i) = Complex (rr(i),ri(i));
+      octave_rand::distribution (rand_dist);
     }
 
   if (n < 3)
@@ -3451,7 +3451,7 @@
     {
       (*current_liboctave_error_handler)
         ("eigs: Invalid number of eigenvalues to extract (must be 0 < k < n-1).\n"
-             "      Use 'eig(full(A))' instead");
+             "      Use 'eig (full (A))' instead");
       return -1;
     }
 
@@ -3630,7 +3630,7 @@
           d[i] = d[k - i - 1];
           d[k - i - 1] = ctmp;
         }
-      eig_val.resize(k);
+      eig_val.resize (k);
 
       if (rvec)
         {
--- a/liboctave/f2c-main.c
+++ b/liboctave/f2c-main.c
@@ -31,5 +31,5 @@
 #  ifdef __cplusplus
 extern "C"
 #  endif
-int F77_DUMMY_MAIN () { assert(0); return 1; }
+int F77_DUMMY_MAIN () { assert (0); return 1; }
 #endif
--- a/liboctave/fCMatrix.cc
+++ b/liboctave/fCMatrix.cc
@@ -1081,7 +1081,7 @@
       F77_XFCN (cgetri, CGETRI, (nc, tmp_data, nr, pipvt,
                                  z.fortran_vec (), lwork, info));
 
-      lwork = static_cast<octave_idx_type> (std::real(z(0)));
+      lwork = static_cast<octave_idx_type> (std::real (z(0)));
       lwork = (lwork <  2 *nc ? 2*nc : lwork);
       z.resize (dim_vector (lwork, 1));
       FloatComplex *pz = z.fortran_vec ();
@@ -1091,7 +1091,7 @@
       // Calculate the norm of the matrix, for later use.
       float anorm;
       if (calc_cond)
-        anorm  = retval.abs ().sum ().row(static_cast<octave_idx_type>(0)).max ();
+        anorm = retval.abs ().sum ().row (static_cast<octave_idx_type>(0)).max ();
 
       F77_XFCN (cgetrf, CGETRF, (nc, nc, tmp_data, nr, pipvt, info));
 
@@ -1165,7 +1165,7 @@
         }
 
       if (!mattype.is_hermitian ())
-        ret = finverse(mattype, info, rcon, force, calc_cond);
+        ret = finverse (mattype, info, rcon, force, calc_cond);
 
       if ((mattype.is_hermitian () || calc_cond) && rcon == 0.)
         ret = FloatComplexMatrix (rows (), columns (), FloatComplex (octave_Float_Inf, 0.));
@@ -1828,7 +1828,7 @@
               Array<octave_idx_type> ipvt (dim_vector (nr, 1));
               octave_idx_type *pipvt = ipvt.fortran_vec ();
 
-              if(anorm < 0.)
+              if (anorm < 0.)
                 anorm = atmp.abs ().sum ().
                   row(static_cast<octave_idx_type>(0)).max ();
 
@@ -2096,7 +2096,7 @@
           char job = 'L';
           FloatComplexMatrix atmp = *this;
           FloatComplex *tmp_data = atmp.fortran_vec ();
-          anorm = atmp.abs ().sum ().row(static_cast<octave_idx_type>(0)).max ();
+          anorm = atmp.abs ().sum ().row (static_cast<octave_idx_type>(0)).max ();
 
           F77_XFCN (cpotrf, CPOTRF, (F77_CONST_CHAR_ARG2 (&job, 1), nr,
                                      tmp_data, nr, info
@@ -2180,7 +2180,7 @@
 
           // Calculate the norm of the matrix, for later use.
           if (anorm < 0.)
-            anorm = atmp.abs ().sum ().row(static_cast<octave_idx_type>(0)).max ();
+            anorm = atmp.abs ().sum ().row (static_cast<octave_idx_type>(0)).max ();
 
           F77_XFCN (cgetrf, CGETRF, (nr, nr, tmp_data, nr, pipvt, info));
 
@@ -2406,7 +2406,7 @@
 
   FloatComplexMatrix tmp (b);
   tmp = solve (typ, tmp, info, rcon, sing_handler, true, transt);
-  return tmp.column(static_cast<octave_idx_type> (0));
+  return tmp.column (static_cast<octave_idx_type> (0));
 }
 
 FloatComplexMatrix
--- a/liboctave/fCNDArray.cc
+++ b/liboctave/fCNDArray.cc
@@ -237,7 +237,7 @@
           octave_quit ();
 
           for (octave_idx_type i = 0; i < npts; i++)
-            tmp[i] = elem((i + k*npts)*stride + j*dist);
+            tmp[i] = elem ((i + k*npts)*stride + j*dist);
 
           F77_FUNC (cfftf, CFFTF) (npts, tmp, pwsave);
 
@@ -284,7 +284,7 @@
           octave_quit ();
 
           for (octave_idx_type i = 0; i < npts; i++)
-            tmp[i] = elem((i + k*npts)*stride + j*dist);
+            tmp[i] = elem ((i + k*npts)*stride + j*dist);
 
           F77_FUNC (cfftb, CFFTB) (npts, tmp, pwsave);
 
--- a/liboctave/fCmplxQR.cc
+++ b/liboctave/fCmplxQR.cc
@@ -471,7 +471,7 @@
 
   if (u.length () == m && v.length () == n)
     {
-      init(q*r + FloatComplexMatrix (u) * FloatComplexMatrix (v).hermitian (), get_type ());
+      init (q*r + FloatComplexMatrix (u) * FloatComplexMatrix (v).hermitian (), get_type ());
     }
   else
     (*current_liboctave_error_handler) ("qrupdate: dimensions mismatch");
@@ -487,7 +487,7 @@
 
   if (u.rows () == m && v.rows () == n && u.cols () == v.cols ())
     {
-      init(q*r + u * v.hermitian (), get_type ());
+      init (q*r + u * v.hermitian (), get_type ());
     }
   else
     (*current_liboctave_error_handler) ("qrupdate: dimensions mismatch");
--- a/liboctave/fEIG.cc
+++ b/liboctave/fEIG.cc
@@ -226,8 +226,8 @@
                   return -1;
                 }
 
-              lambda.elem(j) = FloatComplex (wr.elem(j), wi.elem(j));
-              lambda.elem(j+1) = FloatComplex (wr.elem(j+1), wi.elem(j+1));
+              lambda.elem (j) = FloatComplex (wr.elem (j), wi.elem (j));
+              lambda.elem (j+1) = FloatComplex (wr.elem (j+1), wi.elem (j+1));
 
               for (octave_idx_type i = 0; i < nvr; i++)
                 {
@@ -576,10 +576,10 @@
                   return -1;
                 }
 
-              lambda.elem(j) = FloatComplex (ar.elem(j) / beta.elem (j),
-                                             ai.elem(j) / beta.elem (j));
-              lambda.elem(j+1) = FloatComplex (ar.elem(j+1) / beta.elem (j+1),
-                                               ai.elem(j+1) / beta.elem (j+1));
+              lambda.elem (j) = FloatComplex (ar.elem (j) / beta.elem (j),
+                                              ai.elem (j) / beta.elem (j));
+              lambda.elem (j+1) = FloatComplex (ar.elem (j+1) / beta.elem (j+1),
+                                                ai.elem (j+1) / beta.elem (j+1));
 
               for (octave_idx_type i = 0; i < nvr; i++)
                 {
@@ -775,7 +775,7 @@
       lambda.resize (n);
 
       for (octave_idx_type j = 0; j < n; j++)
-        lambda.elem (j) = alpha.elem (j) / beta.elem(j);
+        lambda.elem (j) = alpha.elem (j) / beta.elem (j);
 
       v = vtmp;
     }
--- a/liboctave/fMatrix.cc
+++ b/liboctave/fMatrix.cc
@@ -763,7 +763,7 @@
       // Calculate the norm of the matrix, for later use.
       float anorm = 0;
       if (calc_cond)
-        anorm = retval.abs ().sum ().row(static_cast<octave_idx_type>(0)).max ();
+        anorm = retval.abs ().sum ().row (static_cast<octave_idx_type>(0)).max ();
 
       F77_XFCN (sgetrf, SGETRF, (nc, nc, tmp_data, nr, pipvt, info));
 
@@ -838,7 +838,7 @@
         }
 
       if (!mattype.is_hermitian ())
-        ret = finverse(mattype, info, rcon, force, calc_cond);
+        ret = finverse (mattype, info, rcon, force, calc_cond);
 
       if ((mattype.is_hermitian () || calc_cond) && rcon == 0.)
         ret = FloatMatrix (rows (), columns (), octave_Float_Inf);
@@ -1462,7 +1462,7 @@
               octave_idx_type info = 0;
               char job = 'L';
               anorm = atmp.abs ().sum ().
-                row(static_cast<octave_idx_type>(0)).max ();
+                row (static_cast<octave_idx_type>(0)).max ();
 
               F77_XFCN (spotrf, SPOTRF, (F77_CONST_CHAR_ARG2 (&job, 1), nr,
                                          tmp_data, nr, info
@@ -1498,7 +1498,7 @@
               Array<octave_idx_type> ipvt (dim_vector (nr, 1));
               octave_idx_type *pipvt = ipvt.fortran_vec ();
 
-              if(anorm < 0.)
+              if (anorm < 0.)
                 anorm = atmp.abs ().sum ().
                   row(static_cast<octave_idx_type>(0)).max ();
 
@@ -1762,7 +1762,7 @@
           char job = 'L';
           FloatMatrix atmp = *this;
           float *tmp_data = atmp.fortran_vec ();
-          anorm = atmp.abs ().sum ().row(static_cast<octave_idx_type>(0)).max ();
+          anorm = atmp.abs ().sum ().row (static_cast<octave_idx_type>(0)).max ();
 
           F77_XFCN (spotrf, SPOTRF, (F77_CONST_CHAR_ARG2 (&job, 1), nr,
                                      tmp_data, nr, info
@@ -1838,8 +1838,8 @@
 
           FloatMatrix atmp = *this;
           float *tmp_data = atmp.fortran_vec ();
-          if(anorm < 0.)
-            anorm = atmp.abs ().sum ().row(static_cast<octave_idx_type>(0)).max ();
+          if (anorm < 0.)
+            anorm = atmp.abs ().sum ().row (static_cast<octave_idx_type>(0)).max ();
 
           Array<float> z (dim_vector (4 * nc, 1));
           float *pz = z.fortran_vec ();
@@ -2062,7 +2062,7 @@
 {
   FloatMatrix tmp (b);
   tmp = solve (typ, tmp, info, rcon, sing_handler, true, transt);
-  return tmp.column(static_cast<octave_idx_type> (0));
+  return tmp.column (static_cast<octave_idx_type> (0));
 }
 
 FloatComplexColumnVector
@@ -2094,7 +2094,7 @@
                solve_singularity_handler sing_handler, blas_trans_type transt) const
 {
   FloatComplexMatrix tmp (*this);
-  return tmp.solve(typ, b, info, rcon, sing_handler, transt);
+  return tmp.solve (typ, b, info, rcon, sing_handler, transt);
 }
 
 FloatMatrix
--- a/liboctave/fNDArray.cc
+++ b/liboctave/fNDArray.cc
@@ -241,7 +241,7 @@
           octave_quit ();
 
           for (octave_idx_type i = 0; i < npts; i++)
-            tmp[i] = elem((i + k*npts)*stride + j*dist);
+            tmp[i] = elem ((i + k*npts)*stride + j*dist);
 
           F77_FUNC (cfftf, CFFTF) (npts, tmp, pwsave);
 
@@ -288,7 +288,7 @@
           octave_quit ();
 
           for (octave_idx_type i = 0; i < npts; i++)
-            tmp[i] = elem((i + k*npts)*stride + j*dist);
+            tmp[i] = elem ((i + k*npts)*stride + j*dist);
 
           F77_FUNC (cfftb, CFFTB) (npts, tmp, pwsave);
 
--- a/liboctave/floatQR.cc
+++ b/liboctave/floatQR.cc
@@ -464,7 +464,7 @@
 
   if (u.length () == m && v.length () == n)
     {
-      init(q*r + FloatMatrix (u) * FloatMatrix (v).transpose (), get_type ());
+      init (q*r + FloatMatrix (u) * FloatMatrix (v).transpose (), get_type ());
     }
   else
     (*current_liboctave_error_handler) ("qrupdate: dimensions mismatch");
@@ -480,7 +480,7 @@
 
   if (u.rows () == m && v.rows () == n && u.cols () == v.cols ())
     {
-      init(q*r + u * v.transpose (), get_type ());
+      init (q*r + u * v.transpose (), get_type ());
     }
   else
     (*current_liboctave_error_handler) ("qrupdate: dimensions mismatch");
--- a/liboctave/floatSVD.cc
+++ b/liboctave/floatSVD.cc
@@ -135,7 +135,7 @@
   float *u = left_sm.fortran_vec ();
 
   sigma.resize (nrow_s, ncol_s);
-  float *s_vec  = sigma.fortran_vec ();
+  float *s_vec = sigma.fortran_vec ();
 
   if (! (jobv == 'N' || jobv == 'O'))
     right_sm.resize (nrow_vt, n);
--- a/liboctave/idx-vector.cc
+++ b/liboctave/idx-vector.cc
@@ -108,7 +108,7 @@
 idx_vector::idx_range_rep::idx_range_rep (octave_idx_type _start,
                                           octave_idx_type _limit,
                                           octave_idx_type _step)
-  : start(_start), len (_step ? std::max((_limit - _start) / _step, static_cast<octave_idx_type> (0)) : -1), step (_step)
+  : start(_start), len (_step ? std::max ((_limit - _start) / _step, static_cast<octave_idx_type> (0)) : -1), step (_step)
 {
   if (len < 0)
     {
@@ -325,7 +325,7 @@
 {
   if (len != 0)
     {
-      octave_idx_type *d = new octave_idx_type[len];
+      octave_idx_type *d = new octave_idx_type [len];
       for (octave_idx_type i = 0; i < len; i++)
         d[i] = convert_index (nda.xelem (i), err, ext);
       data = d;
@@ -489,7 +489,7 @@
   if (ext > len*xlog2 (1.0 + len))
     {
       // Use standard sort via octave_sort.
-      octave_idx_type *new_data = new octave_idx_type[len];
+      octave_idx_type *new_data = new octave_idx_type [len];
       new_rep->data = new_data;
 
       std::copy (data, data + len, new_data);
@@ -524,7 +524,7 @@
       else
         new_rep->orig_dims = dim_vector (new_len, 1);
 
-      octave_idx_type *new_data = new octave_idx_type[new_len];
+      octave_idx_type *new_data = new octave_idx_type [new_len];
       new_rep->data = new_data;
 
       for (octave_idx_type i = 0, j = 0; i < ext; i++)
@@ -538,7 +538,7 @@
       for (octave_idx_type i = 0; i < len; i++)
         cnt[data[i]]++;
 
-      octave_idx_type *new_data = new octave_idx_type[len];
+      octave_idx_type *new_data = new octave_idx_type [len];
       new_rep->data = new_data;
 
       for (octave_idx_type i = 0, j = 0; i < ext; i++)
@@ -1145,7 +1145,7 @@
 
   if (is_colon_equiv (n))
     retval = true;
-  else if (length (n) == n && extent(n) == n)
+  else if (length(n) == n && extent(n) == n)
     {
       OCTAVE_LOCAL_BUFFER_INIT (bool, left, n, true);
 
@@ -1190,7 +1190,7 @@
         const octave_idx_type *ri = r->get_data ();
         Array<octave_idx_type> idx (orig_dimensions ());
         for (octave_idx_type i = 0; i < n; i++)
-          idx.xelem(ri[i]) = i;
+          idx.xelem (ri[i]) = i;
         retval = new idx_vector_rep (idx, r->extent (0), DIRECT);
         break;
       }
@@ -1330,7 +1330,7 @@
 
 /*
 
-%!error id=Octave:index-out-of-bounds 1(find([1,1] != 0))
-%!assert ((1:3)(find([1,0,1] != 0)), [1,3])
+%!error id=Octave:index-out-of-bounds 1(find ([1,1] != 0))
+%!assert ((1:3)(find ([1,0,1] != 0)), [1,3])
 
 */
--- a/liboctave/kpse.cc
+++ b/liboctave/kpse.cc
@@ -35,7 +35,7 @@
    myself; if you do, I'd be grateful for any changes. --kb@mail.tug.org */
 
 /* If we have either DOS or OS2, we are DOSISH.  */
-#if defined (DOS) || defined (OS2) || defined (WIN32) || defined(__MSDOS__)
+#if defined (DOS) || defined (OS2) || defined (WIN32) || defined (__MSDOS__)
 #define DOSISH
 #endif
 
@@ -44,11 +44,11 @@
 #endif
 
 extern "C" {
-#if defined(__MINGW32__)
+#if defined (__MINGW32__)
 #include <windows.h>
 #include <fcntl.h>
 #include <dirent.h>
-#elif defined(WIN32)
+#elif defined (WIN32)
 #ifndef _MSC_VER
 #define __STDC__ 1
 #include "win32lib.h"
@@ -76,7 +76,7 @@
 /* If you want to find subdirectories in a directory with non-Unix
    semantics (specifically, if a directory with no subdirectories does
    not have exactly two links), define this.  */
-#if defined(__DJGPP__) || ! defined (DOSISH)
+#if defined (__DJGPP__) || ! defined (DOSISH)
 /* Surprise!  DJGPP returns st_nlink exactly like on Unix.  */
 #define ST_NLINK_TRICK
 #endif /* either not DOSISH or __DJGPP__ */
@@ -99,7 +99,7 @@
 #define DIR_SEP '/'
 #define DIR_SEP_STRING "/"
 #define IS_DEVICE_SEP(ch) ((ch) == ':')
-#define NAME_BEGINS_WITH_DEVICE(name) ((name.length()>0) && IS_DEVICE_SEP((name)[1]))
+#define NAME_BEGINS_WITH_DEVICE(name) ((name.length ()>0) && IS_DEVICE_SEP((name)[1]))
 /* On DOS, it's good to allow both \ and / between directories.  */
 #define IS_DIR_SEP(ch) ((ch) == '/' || (ch) == '\\')
 #else
--- a/liboctave/lo-macros.h
+++ b/liboctave/lo-macros.h
@@ -92,4 +92,8 @@
 #define OCT_MAKE_DECL_LIST(TYPE, PREFIX, NUM) \
   OCT_ITERATE_PARAM_MACRO(OCT_MAKE_DECL_LIST_HELPER, TYPE PREFIX, NUM)
 
+// expands to PREFIX0, PREFIX1, ..., PREFIX ## (NUM-1)
+#define OCT_MAKE_ARG_LIST(PREFIX, NUM)          \
+  OCT_ITERATE_PARAM_MACRO(OCT_MAKE_DECL_LIST_HELPER, PREFIX, NUM)
+
 #endif
--- a/liboctave/lo-specfun.cc
+++ b/liboctave/lo-specfun.cc
@@ -454,7 +454,7 @@
 #endif
 
 Complex
-expm1(const Complex& x)
+expm1 (const Complex& x)
 {
   Complex retval;
 
@@ -509,7 +509,7 @@
 #endif
 
 FloatComplex
-expm1(const FloatComplex& x)
+expm1 (const FloatComplex& x)
 {
   FloatComplex retval;
 
@@ -565,7 +565,7 @@
                         atan2 (1 + r, i));
     }
   else
-    retval = std::log (Complex(1) + x);
+    retval = std::log (Complex (1) + x);
 
   return retval;
 }
@@ -624,7 +624,7 @@
                         atan2 (1 + r, i));
     }
   else
-    retval = std::log (FloatComplex(1) + x);
+    retval = std::log (FloatComplex (1) + x);
 
   return retval;
 }
@@ -873,7 +873,7 @@
           if (kode == 2)
             {
               // Compensate for different scaling factor of besk.
-              tmp2 *= exp(-z - std::abs(z.real ()));
+              tmp2 *= exp (-z - std::abs (z.real ()));
             }
 
           tmp += tmp2;
@@ -1483,7 +1483,7 @@
           if (kode == 2)
             {
               // Compensate for different scaling factor of besk.
-              tmp2 *= exp(-z - std::abs(z.real ()));
+              tmp2 *= exp (-z - std::abs (z.real ()));
             }
 
           tmp += tmp2;
@@ -1893,7 +1893,7 @@
 
   if (! scaled)
     {
-      Complex expz = exp (- 2.0 / 3.0 * z * sqrt(z));
+      Complex expz = exp (- 2.0 / 3.0 * z * sqrt (z));
 
       double rexpz = real (expz);
       double iexpz = imag (expz);
@@ -2023,7 +2023,7 @@
 
   if (! scaled)
     {
-      FloatComplex expz = exp (- static_cast<float> (2.0 / 3.0) * z * sqrt(z));
+      FloatComplex expz = exp (- static_cast<float> (2.0 / 3.0) * z * sqrt (z));
 
       float rexpz = real (expz);
       float iexpz = imag (expz);
@@ -2137,15 +2137,6 @@
 }
 
 static void
-gripe_betainc_nonconformant (octave_idx_type r1, octave_idx_type c1, octave_idx_type r2, octave_idx_type c2, octave_idx_type r3,
-                             octave_idx_type c3)
-{
-  (*current_liboctave_error_handler)
-   ("betainc: nonconformant arguments (x is %dx%d, a is %dx%d, b is %dx%d)",
-     r1, c1, r2, c2, r3, c3);
-}
-
-static void
 gripe_betainc_nonconformant (const dim_vector& d1, const dim_vector& d2,
                              const dim_vector& d3)
 {
@@ -2159,15 +2150,6 @@
 }
 
 static void
-gripe_betaincinv_nonconformant (octave_idx_type r1, octave_idx_type c1, octave_idx_type r2, octave_idx_type c2, octave_idx_type r3,
-                                octave_idx_type c3)
-{
-  (*current_liboctave_error_handler)
-   ("betaincinv: nonconformant arguments (x is %dx%d, a is %dx%d, b is %dx%d)",
-     r1, c1, r2, c2, r3, c3);
-}
-
-static void
 gripe_betaincinv_nonconformant (const dim_vector& d1, const dim_vector& d2,
                                 const dim_vector& d3)
 {
@@ -3130,7 +3112,7 @@
       if (x < 0)
         {
           double y2 = ceil (x / 16.0) * 16.0, del = (x-y2)*(x+y2);
-          result = 2*(std::exp(y2*y2) * std::exp(del)) - result;
+          result = 2*(std::exp (y2*y2) * std::exp (del)) - result;
         }
     }
 
--- a/liboctave/mx-inlines.cc
+++ b/liboctave/mx-inlines.cc
@@ -483,12 +483,12 @@
 #define OP_RED_SUMSQ(ac, el) ac += el*el
 #define OP_RED_SUMSQC(ac, el) ac += cabsq (el)
 
-inline void op_dble_sum(double& ac, float el)
+inline void op_dble_sum (double& ac, float el)
 { ac += el; }
-inline void op_dble_sum(Complex& ac, const FloatComplex& el)
+inline void op_dble_sum (Complex& ac, const FloatComplex& el)
 { ac += el; } // FIXME: guaranteed?
 template <class T>
-inline void op_dble_sum(double& ac, const octave_int<T>& el)
+inline void op_dble_sum (double& ac, const octave_int<T>& el)
 { ac += el.double_value (); }
 
 // The following two implement a simple short-circuiting.
@@ -1177,7 +1177,7 @@
 {
   octave_idx_type l, n, u;
   dim_vector dims = src.dims ();
-  // M*b inconsistency: sum([]) = 0 etc.
+  // M*b inconsistency: sum ([]) = 0 etc.
   if (dims.length () == 2 && dims(0) == 0 && dims(1) == 0)
     dims (1) = 1;
 
--- a/liboctave/mx-op-defs.h
+++ b/liboctave/mx-op-defs.h
@@ -413,7 +413,7 @@
           octave_idx_type len = dm.length (); \
  \
           for (octave_idx_type i = 0; i < len; i++) \
-            r.elem(i, i) OPEQ dm.elem(i, i); \
+            r.elem (i, i) OPEQ dm.elem (i, i); \
         } \
     } \
  \
@@ -483,7 +483,7 @@
           octave_idx_type len = dm.length (); \
  \
           for (octave_idx_type i = 0; i < len; i++) \
-            r.elem(i, i) OPEQ dm.elem(i, i); \
+            r.elem (i, i) OPEQ dm.elem (i, i); \
         } \
       else \
         r.resize (m_nr, m_nc); \
--- a/liboctave/oct-binmap.h
+++ b/liboctave/oct-binmap.h
@@ -30,7 +30,7 @@
 #include "bsxfun.h"
 
 // This source file implements a general binary maping function for
-// arrays. The syntax is binmap<type> (a, b, f, [name]). type denotes
+// arrays. The syntax is binmap<type> (a, b, f,[name]). type denotes
 // the expected return type of the operation. a, b, should be one of
 // the 6 combinations:
 //
@@ -223,7 +223,7 @@
   for (octave_idx_type i = 0; i < nz; i++)
     {
       octave_quit ();
-      retval.xdata(i) = fcn (x, ys.data(i));
+      retval.xdata (i) = fcn (x, ys.data (i));
     }
 
   octave_quit ();
@@ -241,7 +241,7 @@
   for (octave_idx_type i = 0; i < nz; i++)
     {
       octave_quit ();
-      retval.xdata(i) = fcn (xs.data(i), y);
+      retval.xdata (i) = fcn (xs.data (i), y);
     }
 
   octave_quit ();
@@ -276,49 +276,49 @@
       for (octave_idx_type j = 0; j < nc; j++)
         {
           octave_quit ();
-          octave_idx_type ix = xs.cidx(j), iy = ys.cidx(j);
-          octave_idx_type ux = xs.cidx(j+1), uy = ys.cidx(j+1);
+          octave_idx_type ix = xs.cidx (j), iy = ys.cidx (j);
+          octave_idx_type ux = xs.cidx (j+1), uy = ys.cidx (j+1);
           while (ix != ux || iy != uy)
             {
-              octave_idx_type rx = xs.ridx(ix), ry = ys.ridx(ix);
+              octave_idx_type rx = xs.ridx (ix), ry = ys.ridx (ix);
               ix += rx <= ry;
               iy += ry <= rx;
               nz++;
             }
 
-          retval.xcidx(j+1) = nz;
+          retval.xcidx (j+1) = nz;
         }
 
       // Allocate space.
-      retval.change_capacity (retval.xcidx(nc));
+      retval.change_capacity (retval.xcidx (nc));
 
       // Fill.
       nz = 0;
       for (octave_idx_type j = 0; j < nc; j++)
         {
           octave_quit ();
-          octave_idx_type ix = xs.cidx(j), iy = ys.cidx(j);
-          octave_idx_type ux = xs.cidx(j+1), uy = ys.cidx(j+1);
+          octave_idx_type ix = xs.cidx (j), iy = ys.cidx (j);
+          octave_idx_type ux = xs.cidx (j+1), uy = ys.cidx (j+1);
           while (ix != ux || iy != uy)
             {
-              octave_idx_type rx = xs.ridx(ix), ry = ys.ridx(ix);
+              octave_idx_type rx = xs.ridx (ix), ry = ys.ridx (ix);
               if (rx == ry)
                 {
-                  retval.xridx(nz) = rx;
-                  retval.xdata(nz) = fcn (xs.data(ix), ys.data(iy));
+                  retval.xridx (nz) = rx;
+                  retval.xdata (nz) = fcn (xs.data (ix), ys.data (iy));
                   ix++;
                   iy++;
                 }
               else if (rx < ry)
                 {
-                  retval.xridx(nz) = rx;
-                  retval.xdata(nz) = fcn (xs.data(ix), yzero);
+                  retval.xridx (nz) = rx;
+                  retval.xdata (nz) = fcn (xs.data (ix), yzero);
                   ix++;
                 }
               else if (ry < rx)
                 {
-                  retval.xridx(nz) = ry;
-                  retval.xdata(nz) = fcn (xzero, ys.data(iy));
+                  retval.xridx (nz) = ry;
+                  retval.xdata (nz) = fcn (xzero, ys.data (iy));
                   iy++;
                 }
 
--- a/liboctave/oct-fftw.cc
+++ b/liboctave/oct-fftw.cc
@@ -723,7 +723,7 @@
 
   for (size_t i = 0; i < nr; i++)
     for (size_t j = nc/2+1; j < nc; j++)
-      out[j*stride + i*dist] = conj(out[(nc - j)*stride + i*dist]);
+      out[j*stride + i*dist] = conj (out[(nc - j)*stride + i*dist]);
 
   octave_quit ();
 }
@@ -758,10 +758,10 @@
     {
       for (size_t j = 1; j < nr; j++)
         for (size_t k = nc/2+1; k < nc; k++)
-          out[k + (j + i*nr)*nc] = conj(out[nc - k + ((i+1)*nr - j)*nc]);
+          out[k + (j + i*nr)*nc] = conj (out[nc - k + ((i+1)*nr - j)*nc]);
 
       for (size_t j = nc/2+1; j < nc; j++)
-        out[j + i*nr*nc] = conj(out[(i*nr+1)*nc - j]);
+        out[j + i*nr*nc] = conj (out[(i*nr+1)*nc - j]);
     }
 
   octave_quit ();
@@ -782,7 +782,7 @@
             for (size_t l = nc/2+1; l < nc; l++)
               {
                 T tmp = out[i+ j + k + l];
-                out[i + j + k + l] =  out[i + jj + k + l];
+                out[i + j + k + l] = out[i + jj + k + l];
                 out[i + jj + k + l] = tmp;
               }
       jstart = jmax;
--- a/liboctave/oct-group.h
+++ b/liboctave/oct-group.h
@@ -48,7 +48,7 @@
   {
     if (this != &gr)
       {
-        gr_name  = gr.gr_name;
+        gr_name = gr.gr_name;
         gr_passwd = gr.gr_passwd;
         gr_gid = gr.gr_gid;
         gr_mem = gr.gr_mem;
--- a/liboctave/oct-inttypes.cc
+++ b/liboctave/oct-inttypes.cc
@@ -272,7 +272,7 @@
 
 INT_DOUBLE_BINOP_DECL (+, uint64)
 {
-  return (y < 0) ? x - octave_uint64(-y) : x + octave_uint64(y);
+  return (y < 0) ? x - octave_uint64 (-y) : x + octave_uint64 (y);
 }
 
 DOUBLE_INT_BINOP_DECL (+, uint64)
@@ -288,7 +288,7 @@
       // probably), the above will work as expected. If not, it's more
       // complicated - as long as y is within _twice_ the signed range, the
       // result may still be an integer. An instance of such an operation is
-      // 3*2**62 + (1+intmin('int64')) that should yield int64(2**62) + 1.  So
+      // 3*2**62 + (1+intmin ('int64')) that should yield int64 (2**62) + 1.  So
       // what we do is to try to convert y/2 and add it twice. Note that if y/2
       // overflows, the result must overflow as well, and that y/2 cannot be a
       // fractional number.
@@ -310,12 +310,12 @@
 DOUBLE_INT_BINOP_DECL (-, uint64)
 {
   if (x <= static_cast<double> (octave_uint64::max ()))
-    return octave_uint64(x) - y;
+    return octave_uint64 (x) - y;
   else
     {
       // Again a trick to get the corner cases right. Things like
-      // 3**2**63 - intmax('uint64') should produce the correct result, i.e.
-      // int64(2**63) + 1.
+      // 3**2**63 - intmax ('uint64') should produce the correct result, i.e.
+      // int64 (2**63) + 1.
       const double p2_64 = std::pow (2.0, 64);
       if (y.bool_value ())
         {
@@ -340,7 +340,7 @@
   // be eliminated at compile time.
   if (twosc && y.value () == std::numeric_limits<int64_t>::min ())
     {
-      return octave_int64 (x + std::pow(2.0, 63));
+      return octave_int64 (x + std::pow (2.0, 63));
     }
   else
     return x + (-y);
--- a/liboctave/oct-inttypes.h
+++ b/liboctave/oct-inttypes.h
@@ -825,7 +825,7 @@
 
   static int nbits (void) { return std::numeric_limits<T>::digits; }
 
-  static int byte_size (void) { return sizeof(T); }
+  static int byte_size (void) { return sizeof (T); }
 
   static const char *type_name ();
 
--- a/liboctave/oct-locbuf.h
+++ b/liboctave/oct-locbuf.h
@@ -38,7 +38,7 @@
     : data (0)
     {
       if (size)
-        data = new T[size];
+        data = new T [size];
     }
   ~octave_local_buffer (void) { delete [] data; }
   operator T *() const { return data; }
@@ -204,7 +204,7 @@
 // about shadowed parameters.
 
 #define OCTAVE_LOCAL_BUFFER_INIT(T, buf, size, value) \
-  OCTAVE_LOCAL_BUFFER(T, buf, size); \
+  OCTAVE_LOCAL_BUFFER (T, buf, size); \
   for (size_t _buf_iter = 0, _buf_size = size; \
         _buf_iter < _buf_size; _buf_iter++) \
     buf[_buf_iter] = value
--- a/liboctave/oct-md5.cc
+++ b/liboctave/oct-md5.cc
@@ -36,7 +36,7 @@
 static std::string
 oct_md5_result_to_str (const unsigned char *buf)
 {
-  char tmp [33];
+  char tmp[33];
 
   sprintf (tmp,
            "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
--- a/liboctave/oct-mem.h
+++ b/liboctave/oct-mem.h
@@ -128,7 +128,7 @@
   // Some systems let us allocate > 2GB memory even though size_t, which is either
   // buggy or completely cuckoo, so let's check here to stay safe.
   safe_size_comp (n, sizeof (T));
-  return new T[n];
+  return new T [n];
 }
 template <class T>
 inline void no_ctor_delete (T *ptr)
@@ -137,7 +137,7 @@
 #define DEFINE_POD_NEW_DELETE(T) \
 template <> \
 inline T *no_ctor_new<T > (size_t n) \
-{ return reinterpret_cast<T *> (new char[safe_size_comp (n, sizeof (T))]); } \
+{ return reinterpret_cast<T *> (new char [safe_size_comp (n, sizeof (T))]); } \
 template <> \
 inline void no_ctor_delete<T > (T *ptr) \
 { delete [] reinterpret_cast<char *> (ptr); }
--- a/liboctave/oct-rand.cc
+++ b/liboctave/oct-rand.cc
@@ -360,7 +360,7 @@
           break;
 
         case poisson_dist:
-          if (a < 0.0 || xisnan(a) || xisinf(a))
+          if (a < 0.0 || xisnan (a) || xisinf (a))
             retval = octave_NaN;
           else
             {
@@ -371,7 +371,7 @@
           break;
 
         case gamma_dist:
-          if (a <= 0.0 || xisnan(a) || xisinf(a))
+          if (a <= 0.0 || xisnan (a) || xisinf (a))
             retval = octave_NaN;
           else
             F77_FUNC (dgengam, DGENGAM) (1.0, a, retval);
@@ -443,7 +443,7 @@
           break;
 
         case poisson_dist:
-          if (da < 0.0 || xisnan(da) || xisinf(da))
+          if (da < 0.0 || xisnan (da) || xisinf (da))
             dretval = octave_NaN;
           else
             {
@@ -454,7 +454,7 @@
           break;
 
         case gamma_dist:
-          if (da <= 0.0 || xisnan(da) || xisinf(da))
+          if (da <= 0.0 || xisnan (da) || xisinf (da))
             retval = octave_NaN;
           else
             F77_FUNC (dgengam, DGENGAM) (1.0, da, dretval);
@@ -630,7 +630,7 @@
   oct_get_state (tmp);
 
   for (octave_idx_type i = 0; i <= MT_N; i++)
-    s.elem (i) = static_cast<double> (tmp [i]);
+    s.elem (i) = static_cast<double> (tmp[i]);
 
   return s;
 }
@@ -672,7 +672,7 @@
   OCTAVE_LOCAL_BUFFER (uint32_t, tmp, MT_N + 1);
 
   for (octave_idx_type i = 0; i < n; i++)
-    tmp[i] = static_cast<uint32_t> (s.elem(i));
+    tmp[i] = static_cast<uint32_t> (s.elem (i));
 
   if (len == MT_N + 1 && tmp[MT_N] <= MT_N && tmp[MT_N] > 0)
     oct_set_state (tmp);
@@ -748,7 +748,7 @@
     case poisson_dist:
       if (use_old_generators)
         {
-          if (a < 0.0 || xisnan(a) || xisinf(a))
+          if (a < 0.0 || xisnan (a) || xisinf (a))
 #define RAND_FUNC(x) x = octave_NaN;
             MAKE_RAND (len);
 #undef RAND_FUNC
@@ -769,7 +769,7 @@
     case gamma_dist:
       if (use_old_generators)
         {
-          if (a <= 0.0 || xisnan(a) || xisinf(a))
+          if (a <= 0.0 || xisnan (a) || xisinf (a))
 #define RAND_FUNC(x) x = octave_NaN;
             MAKE_RAND (len);
 #undef RAND_FUNC
@@ -838,7 +838,7 @@
       if (use_old_generators)
         {
           double da = a;
-          if (da < 0.0 || xisnan(da) || xisinf(da))
+          if (da < 0.0 || xisnan (da) || xisinf (da))
 #define RAND_FUNC(x) x = octave_NaN;
             MAKE_RAND (len);
 #undef RAND_FUNC
@@ -860,7 +860,7 @@
       if (use_old_generators)
         {
           double da = a;
-          if (da <= 0.0 || xisnan(da) || xisinf(da))
+          if (da <= 0.0 || xisnan (da) || xisinf (da))
 #define RAND_FUNC(x) x = octave_NaN;
             MAKE_RAND (len);
 #undef RAND_FUNC
--- a/liboctave/oct-refcount.h
+++ b/liboctave/oct-refcount.h
@@ -82,6 +82,11 @@
       return static_cast<count_type const volatile&> (count);
     }
 
+  count_type *get (void)
+    {
+      return &count;
+    }
+
 private:
   count_type count;
 };
--- a/liboctave/oct-sort.cc
+++ b/liboctave/oct-sort.cc
@@ -542,7 +542,7 @@
    */
   delete [] a;
   delete [] ia; // Must do this or fool possible next getmemi.
-  a = new T[need];
+  a = new T [need];
   alloced = need;
 
 }
@@ -561,8 +561,8 @@
   delete [] a;
   delete [] ia;
 
-  a = new T[need];
-  ia = new octave_idx_type[need];
+  a = new T [need];
+  ia = new octave_idx_type [need];
   alloced = need;
 }
 
@@ -1184,7 +1184,7 @@
     return nb;
 
   /* Merge what remains of the runs, using a temp array with
-   * min(na, nb) elements.
+   * min (na, nb) elements.
    */
   if (na <= nb)
     return merge_lo (pa, na, pb, nb, comp);
@@ -1238,7 +1238,7 @@
     return nb;
 
   /* Merge what remains of the runs, using a temp array with
-   * min(na, nb) elements.
+   * min (na, nb) elements.
    */
   if (na <= nb)
     return merge_lo (pa, ipa, na, pb, ipb, nb, comp);
@@ -1413,7 +1413,7 @@
             goto fail;
           if (descending)
             std::reverse (data + lo, data + lo + n);
-          /* If short, extend to min(minrun, nremaining). */
+          /* If short, extend to min (minrun, nremaining). */
           if (n < minrun)
             {
               const octave_idx_type force = nremaining <= minrun ? nremaining : minrun;
@@ -1475,7 +1475,7 @@
               std::reverse (data + lo, data + lo + n);
               std::reverse (idx + lo, idx + lo + n);
             }
-          /* If short, extend to min(minrun, nremaining). */
+          /* If short, extend to min (minrun, nremaining). */
           if (n < minrun)
             {
               const octave_idx_type force = nremaining <= minrun ? nremaining : minrun;
@@ -1610,9 +1610,9 @@
 
   while (! runs.empty ())
     {
-      octave_idx_type col  = runs.top ().col;
-      octave_idx_type ofs  = runs.top ().ofs;
-      octave_idx_type nel  = runs.top ().nel;
+      octave_idx_type col = runs.top ().col;
+      octave_idx_type ofs = runs.top ().ofs;
+      octave_idx_type nel = runs.top ().nel;
       runs.pop ();
       assert (nel > 1);
 
--- a/liboctave/oct-syscalls.cc
+++ b/liboctave/oct-syscalls.cc
@@ -358,7 +358,7 @@
 
               (*current_liboctave_error_handler)(child_msg.c_str ());
 
-              exit(0);
+              exit (0);
             }
           else
             {
@@ -372,8 +372,8 @@
               else
 #endif
                 {
-                  fildes[0] = child_stdin [1];
-                  fildes[1] = child_stdout [0];
+                  fildes[0] = child_stdin[1];
+                  fildes[1] = child_stdout[0];
                   return pid;
                 }
             }
--- a/liboctave/oct-time.cc
+++ b/liboctave/oct-time.cc
@@ -175,7 +175,7 @@
       while (chars_written == 0)
         {
           delete [] buf;
-          buf = new char[bufsize];
+          buf = new char [bufsize];
           buf[0] = '\0';
 
           chars_written = nstrftime (buf, bufsize, fmt_str, &t, 0, 0);
--- a/liboctave/randgamma.c
+++ b/liboctave/randgamma.c
@@ -25,8 +25,8 @@
 
 /*
 
-double randg(a)
-void fill_randg(a,n,x)
+double randg (a)
+void fill_randg (a,n,x)
 
 Generate a series of standard gamma distributions.
 
@@ -99,9 +99,9 @@
 oct_fill_randg (double a, octave_idx_type n, double *r)
 {
   octave_idx_type i;
-  /* If a < 1, start by generating gamma(1+a) */
+  /* If a < 1, start by generating gamma (1+a) */
   const double d =  (a < 1. ? 1.+a : a) - 1./3.;
-  const double c = 1./sqrt(9.*d);
+  const double c = 1./sqrt (9.*d);
 
   /* Handle invalid cases */
   if (a <= 0 || INFINITE(a))
@@ -122,7 +122,7 @@
         goto restart; /* rare, so don't bother moving up */
       u = RUNI;
       xsq = x*x;
-      if (u >= 1.-0.0331*xsq*xsq && log(u) >= 0.5*xsq + d*(1-v+log(v)))
+      if (u >= 1.-0.0331*xsq*xsq && log (u) >= 0.5*xsq + d*(1-v+log (v)))
         goto restart;
       r[i] = d*v;
     }
@@ -130,7 +130,7 @@
     { /* Use gamma(a) = gamma(1+a)*U^(1/a) */
       /* Given REXP = -log(U) then U^(1/a) = exp(-REXP/a) */
       for (i = 0; i < n; i++)
-        r[i] *= exp(-REXP/a);
+        r[i] *= exp (-REXP/a);
     }
 }
 
@@ -138,7 +138,7 @@
 oct_randg (double a)
 {
   double ret;
-  oct_fill_randg(a,1,&ret);
+  oct_fill_randg (a,1,&ret);
   return ret;
 }
 
@@ -157,7 +157,7 @@
   octave_idx_type i;
   /* If a < 1, start by generating gamma(1+a) */
   const float d =  (a < 1. ? 1.+a : a) - 1./3.;
-  const float c = 1./sqrt(9.*d);
+  const float c = 1./sqrt (9.*d);
 
   /* Handle invalid cases */
   if (a <= 0 || INFINITE(a))
@@ -178,7 +178,7 @@
         goto frestart; /* rare, so don't bother moving up */
       u = RUNI;
       xsq = x*x;
-      if (u >= 1.-0.0331*xsq*xsq && log(u) >= 0.5*xsq + d*(1-v+log(v)))
+      if (u >= 1.-0.0331*xsq*xsq && log (u) >= 0.5*xsq + d*(1-v+log (v)))
         goto frestart;
       r[i] = d*v;
     }
@@ -186,7 +186,7 @@
     { /* Use gamma(a) = gamma(1+a)*U^(1/a) */
       /* Given REXP = -log(U) then U^(1/a) = exp(-REXP/a) */
       for (i = 0; i < n; i++)
-        r[i] *= exp(-REXP/a);
+        r[i] *= exp (-REXP/a);
     }
 }
 
@@ -194,6 +194,6 @@
 oct_float_randg (float a)
 {
   float ret;
-  oct_fill_float_randg(a,1,&ret);
+  oct_fill_float_randg (a,1,&ret);
   return ret;
 }
--- a/liboctave/randmtzig.c
+++ b/liboctave/randmtzig.c
@@ -117,39 +117,39 @@
    All generators share the same state vector.
 
    === Mersenne Twister ===
-   void oct_init_by_int(uint32_t s)           32-bit initial state
-   void oct_init_by_array(uint32_t k[],int m) m*32-bit initial state
-   void oct_init_by_entropy(void)             random initial state
-   void oct_get_state(uint32_t save[MT_N+1])  saves state in array
-   void oct_set_state(uint32_t save[MT_N+1])  restores state from array
-   static uint32_t randmt(void)               returns 32-bit unsigned int
+   void oct_init_by_int (uint32_t s)           32-bit initial state
+   void oct_init_by_array (uint32_t k[],int m) m*32-bit initial state
+   void oct_init_by_entropy (void)             random initial state
+   void oct_get_state (uint32_t save[MT_N+1])  saves state in array
+   void oct_set_state (uint32_t save[MT_N+1])  restores state from array
+   static uint32_t randmt (void)               returns 32-bit unsigned int
 
    === inline generators ===
-   static uint32_t randi32(void)   returns 32-bit unsigned int
-   static uint64_t randi53(void)   returns 53-bit unsigned int
-   static uint64_t randi54(void)   returns 54-bit unsigned int
-   static float randu32(void)     returns 32-bit uniform in (0,1)
-   static double randu53(void)     returns 53-bit uniform in (0,1)
+   static uint32_t randi32 (void)   returns 32-bit unsigned int
+   static uint64_t randi53 (void)   returns 53-bit unsigned int
+   static uint64_t randi54 (void)   returns 54-bit unsigned int
+   static float randu32 (void)      returns 32-bit uniform in (0,1)
+   static double randu53 (void)     returns 53-bit uniform in (0,1)
 
-   double oct_randu(void)       returns M-bit uniform in (0,1)
-   double oct_randn(void)       returns M-bit standard normal
-   double oct_rande(void)       returns N-bit standard exponential
+   double oct_randu (void)       returns M-bit uniform in (0,1)
+   double oct_randn (void)       returns M-bit standard normal
+   double oct_rande (void)       returns N-bit standard exponential
 
-   float oct_float_randu(void)       returns M-bit uniform in (0,1)
-   float oct_float_randn(void)       returns M-bit standard normal
-   float oct_float_rande(void)       returns N-bit standard exponential
+   float oct_float_randu (void)       returns M-bit uniform in (0,1)
+   float oct_float_randn (void)       returns M-bit standard normal
+   float oct_float_rande (void)       returns N-bit standard exponential
 
    === Array generators ===
-   void oct_fill_randi32(octave_idx_type, uint32_t [])
-   void oct_fill_randi64(octave_idx_type, uint64_t [])
+   void oct_fill_randi32 (octave_idx_type, uint32_t [])
+   void oct_fill_randi64 (octave_idx_type, uint64_t [])
 
-   void oct_fill_randu(octave_idx_type, double [])
-   void oct_fill_randn(octave_idx_type, double [])
-   void oct_fill_rande(octave_idx_type, double [])
+   void oct_fill_randu (octave_idx_type, double [])
+   void oct_fill_randn (octave_idx_type, double [])
+   void oct_fill_rande (octave_idx_type, double [])
 
-   void oct_fill_float_randu(octave_idx_type, float [])
-   void oct_fill_float_randn(octave_idx_type, float [])
-   void oct_fill_float_rande(octave_idx_type, float [])
+   void oct_fill_float_randu (octave_idx_type, float [])
+   void oct_fill_float_randn (octave_idx_type, float [])
+   void oct_fill_float_rande (octave_idx_type, float [])
 */
 
 #if defined (HAVE_CONFIG_H)
@@ -166,9 +166,9 @@
 #include "lo-math.h"
 #include "randmtzig.h"
 
-/* FIXME may want to suppress X86 if sizeof(long)>4 */
-#if !defined(USE_X86_32)
-# if defined(i386) || defined(HAVE_X86_32)
+/* FIXME may want to suppress X86 if sizeof(long) > 4 */
+#if !defined (USE_X86_32)
+# if defined (i386) || defined (HAVE_X86_32)
 #  define USE_X86_32 1
 # else
 #  define USE_X86_32 0
@@ -260,34 +260,34 @@
     int n = 0;
 
     /* Look for entropy in /dev/urandom */
-    FILE* urandom =fopen("/dev/urandom", "rb");
+    FILE* urandom =fopen ("/dev/urandom", "rb");
     if (urandom)
       {
         while (n < MT_N)
           {
             unsigned char word[4];
-            if (fread(word, 4, 1, urandom) != 1)
+            if (fread (word, 4, 1, urandom) != 1)
               break;
             entropy[n++] = word[0]+(word[1]<<8)+(word[2]<<16)+(word[3]<<24);
           }
-        fclose(urandom);
+        fclose (urandom);
       }
 
     /* If there isn't enough entropy, gather some from various sources */
     if (n < MT_N)
-      entropy[n++] = time(NULL); /* Current time in seconds */
+      entropy[n++] = time (NULL); /* Current time in seconds */
     if (n < MT_N)
       entropy[n++] = clock ();    /* CPU time used (usec) */
 #ifdef HAVE_GETTIMEOFDAY
     if (n < MT_N)
       {
         struct timeval tv;
-        if (gettimeofday(&tv, NULL) != -1)
+        if (gettimeofday (&tv, NULL) != -1)
           entropy[n++] = tv.tv_usec;   /* Fractional part of current time */
       }
 #endif
     /* Send all the entropy into the initial state vector */
-    oct_init_by_array(entropy,n);
+    oct_init_by_array (entropy,n);
 }
 
 void
@@ -506,7 +506,7 @@
       /* New x is given by x = f^{-1}(v/x_{i+1} + f(x_{i+1})), thus
        * need inverse operator of y = exp(-0.5*x*x) -> x = sqrt(-2*ln(y))
        */
-      x = sqrt(-2. * log(NOR_SECTION_AREA / x1 + fi[i+1]));
+      x = sqrt (-2. * log (NOR_SECTION_AREA / x1 + fi[i+1]));
       ki[i+1] = (ZIGINT)(x / x1 * NMANTISSA);
       wi[i] = x / NMANTISSA;
       fi[i] = exp (-0.5 * x * x);
@@ -534,7 +534,7 @@
       /* New x is given by x = f^{-1}(v/x_{i+1} + f(x_{i+1})), thus
        * need inverse operator of y = exp(-x) -> x = -ln(y)
        */
-      x = - log(EXP_SECTION_AREA / x1 + fe[i+1]);
+      x = - log (EXP_SECTION_AREA / x1 + fe[i+1]);
       ke[i+1] = (ZIGINT)(x / x1 * EMANTISSA);
       we[i] = x / EMANTISSA;
       fe[i] = exp (-x);
@@ -620,7 +620,7 @@
           while ( yy+yy <= xx*xx);
           return (rabs&0x100 ? -ZIGGURAT_NOR_R-xx : ZIGGURAT_NOR_R+xx);
         }
-      else if ((fi[idx-1] - fi[idx]) * RANDU + fi[idx] < exp(-0.5*x*x))
+      else if ((fi[idx-1] - fi[idx]) * RANDU + fi[idx] < exp (-0.5*x*x))
         return x;
     }
 }
@@ -645,9 +645,9 @@
            * For the exponential tail, the method of Marsaglia[5] provides:
            * x = r - ln(U);
            */
-          return ZIGGURAT_EXP_R - log(RANDU);
+          return ZIGGURAT_EXP_R - log (RANDU);
         }
-      else if ((fe[idx-1] - fe[idx]) * RANDU + fe[idx] < exp(-x))
+      else if ((fe[idx-1] - fe[idx]) * RANDU + fe[idx] < exp (-x))
         return x;
     }
 }
@@ -697,7 +697,7 @@
       /* New x is given by x = f^{-1}(v/x_{i+1} + f(x_{i+1})), thus
        * need inverse operator of y = exp(-0.5*x*x) -> x = sqrt(-2*ln(y))
        */
-      x = sqrt(-2. * log(NOR_SECTION_AREA / x1 + ffi[i+1]));
+      x = sqrt (-2. * log (NOR_SECTION_AREA / x1 + ffi[i+1]));
       fki[i+1] = (ZIGINT)(x / x1 * NMANTISSA);
       fwi[i] = x / NMANTISSA;
       ffi[i] = exp (-0.5 * x * x);
@@ -725,7 +725,7 @@
       /* New x is given by x = f^{-1}(v/x_{i+1} + f(x_{i+1})), thus
        * need inverse operator of y = exp(-x) -> x = -ln(y)
        */
-      x = - log(EXP_SECTION_AREA / x1 + ffe[i+1]);
+      x = - log (EXP_SECTION_AREA / x1 + ffe[i+1]);
       fke[i+1] = (ZIGINT)(x / x1 * EMANTISSA);
       fwe[i] = x / EMANTISSA;
       ffe[i] = exp (-x);
@@ -787,7 +787,7 @@
           while ( yy+yy <= xx*xx);
           return (rabs&0x100 ? -ZIGGURAT_NOR_R-xx : ZIGGURAT_NOR_R+xx);
         }
-      else if ((ffi[idx-1] - ffi[idx]) * RANDU + ffi[idx] < exp(-0.5*x*x))
+      else if ((ffi[idx-1] - ffi[idx]) * RANDU + ffi[idx] < exp (-0.5*x*x))
         return x;
     }
 }
@@ -812,9 +812,9 @@
            * For the exponential tail, the method of Marsaglia[5] provides:
            * x = r - ln(U);
            */
-          return ZIGGURAT_EXP_R - log(RANDU);
+          return ZIGGURAT_EXP_R - log (RANDU);
         }
-      else if ((ffe[idx-1] - ffe[idx]) * RANDU + ffe[idx] < exp(-x))
+      else if ((ffe[idx-1] - ffe[idx]) * RANDU + ffe[idx] < exp (-x))
         return x;
     }
 }
--- a/liboctave/randpoisson.c
+++ b/liboctave/randpoisson.c
@@ -105,7 +105,7 @@
     {
       r  = 1.0 / k;
       rr = r * r;
-      return ((k + 0.5)*log(k) - k + C0 + r*(C1 + rr*(C3 + rr*(C5 + rr*C7))));
+      return ((k + 0.5)*log (k) - k + C0 + r*(C1 + rr*(C3 + rr*(C5 + rr*C7))));
     }
   else
     return (logfak[(int)k]);
@@ -146,7 +146,7 @@
 static double
 f (double k, double l_nu, double c_pm)
 {
-  return exp(k * l_nu - flogfak(k) - c_pm);
+  return exp (k * l_nu - flogfak (k) - c_pm);
 }
 
 static double
@@ -163,13 +163,13 @@
     {                               /* set-up           */
       my_last = my;
       /* approximate deviation of reflection points k2, k4 from my - 1/2 */
-      Ds = sqrt(my + 0.25);
+      Ds = sqrt (my + 0.25);
 
       /* mode m, reflection points k2 and k4, and points k1 and k5,      */
       /* which delimit the centre region of h(x)                         */
-      m  = floor(my);
-      k2 = ceil(my - 0.5 - Ds);
-      k4 = floor(my - 0.5 + Ds);
+      m  = floor (my);
+      k2 = ceil (my - 0.5 - Ds);
+      k4 = floor (my - 0.5 + Ds);
       k1 = k2 + k2 - m + 1L;
       k5 = k4 + k4 - m;
 
@@ -184,18 +184,18 @@
       r5 = my / (k5 + 1.0);
 
       /* reciprocal values of the scale parameters of exp. tail envelope */
-      ll =  log(r1);                                 /* expon. tail left */
-      lr = -log(r5);                                 /* expon. tail right*/
+      ll =  log (r1);                                /* expon. tail left */
+      lr = -log (r5);                                /* expon. tail right*/
 
       /* Poisson constants, necessary for computing function values f(k) */
-      l_my = log(my);
-      c_pm = m * l_my - flogfak(m);
+      l_my = log (my);
+      c_pm = m * l_my - flogfak (m);
 
       /* function values f(k) = p(k)/p(m) at k = k2, k4, k1, k5          */
-      f2 = f(k2, l_my, c_pm);
-      f4 = f(k4, l_my, c_pm);
-      f1 = f(k1, l_my, c_pm);
-      f5 = f(k5, l_my, c_pm);
+      f2 = f (k2, l_my, c_pm);
+      f4 = f (k4, l_my, c_pm);
+      f1 = f (k1, l_my, c_pm);
+      f5 = f (k5, l_my, c_pm);
 
       /* area of the two centre and the two exponential tail regions     */
       /* area of the two immediate acceptance regions between k2, k4     */
@@ -216,26 +216,26 @@
 
           /* immediate acceptance region
              R2 = [k2, m) *[0, f2),  X = k2, ... m -1 */
-          if ((V = U - p1) < 0.0)  return(k2 + floor(U/f2));
+          if ((V = U - p1) < 0.0)  return (k2 + floor (U/f2));
           /* immediate acceptance region
              R1 = [k1, k2)*[0, f1),  X = k1, ... k2-1 */
-          if ((W = V / dl) < f1 )  return(k1 + floor(V/f1));
+          if ((W = V / dl) < f1 )  return (k1 + floor (V/f1));
 
           /* computation of candidate X < k2, and its counterpart Y > k2 */
           /* either squeeze-acceptance of X or acceptance-rejection of Y */
-          Dk = floor(dl * RUNI) + 1.0;
+          Dk = floor (dl * RUNI) + 1.0;
           if (W <= f2 - Dk * (f2 - f2/r2))
             {                                        /* quick accept of  */
-              return(k2 - Dk);                       /* X = k2 - Dk      */
+              return (k2 - Dk);                      /* X = k2 - Dk      */
             }
           if ((V = f2 + f2 - W) < 1.0)
             {                                        /* quick reject of Y*/
               Y = k2 + Dk;
               if (V <= f2 + Dk * (1.0 - f2)/(dl + 1.0))
                 {                                    /* quick accept of  */
-                  return(Y);                         /* Y = k2 + Dk      */
+                  return (Y);                        /* Y = k2 + Dk      */
                 }
-              if (V <= f(Y, l_my, c_pm))  return(Y); /* final accept of Y*/
+              if (V <= f (Y, l_my, c_pm))  return (Y); /* final accept of Y*/
             }
           X = k2 - Dk;
         }
@@ -243,26 +243,26 @@
         {                                            /* centre right     */
           /*  immediate acceptance region
               R3 = [m, k4+1)*[0, f4), X = m, ... k4    */
-          if ((V = U - p3) < 0.0)  return(k4 - floor((U - p2)/f4));
+          if ((V = U - p3) < 0.0)  return (k4 - floor ((U - p2)/f4));
           /* immediate acceptance region
              R4 = [k4+1, k5+1)*[0, f5)                */
-          if ((W = V / dr) < f5 )  return(k5 - floor(V/f5));
+          if ((W = V / dr) < f5 )  return (k5 - floor (V/f5));
 
           /* computation of candidate X > k4, and its counterpart Y < k4 */
           /* either squeeze-acceptance of X or acceptance-rejection of Y */
-          Dk = floor(dr * RUNI) + 1.0;
+          Dk = floor (dr * RUNI) + 1.0;
           if (W <= f4 - Dk * (f4 - f4*r4))
             {                                        /* quick accept of  */
-              return(k4 + Dk);                       /* X = k4 + Dk      */
+              return (k4 + Dk);                      /* X = k4 + Dk      */
             }
           if ((V = f4 + f4 - W) < 1.0)
             {                                        /* quick reject of Y*/
               Y = k4 - Dk;
               if (V <= f4 + Dk * (1.0 - f4)/ dr)
                 {                                    /* quick accept of  */
-                  return(Y);                         /* Y = k4 - Dk      */
+                  return (Y);                        /* Y = k4 - Dk      */
                 }
-              if (V <= f(Y, l_my, c_pm))  return(Y); /* final accept of Y*/
+              if (V <= f (Y, l_my, c_pm))  return (Y); /* final accept of Y*/
             }
           X = k4 + Dk;
         }
@@ -271,26 +271,26 @@
           W = RUNI;
           if (U < p5)
             {                                        /* expon. tail left */
-              Dk = floor(1.0 - log(W)/ll);
+              Dk = floor (1.0 - log (W)/ll);
               if ((X = k1 - Dk) < 0L)  continue;     /* 0 <= X <= k1 - 1 */
               W *= (U - p4) * ll;                    /* W -- U(0, h(x))  */
               if (W <= f1 - Dk * (f1 - f1/r1))
-                return(X);                           /* quick accept of X*/
+                return (X);                          /* quick accept of X*/
             }
           else
             {                                        /* expon. tail right*/
-              Dk = floor(1.0 - log(W)/lr);
+              Dk = floor (1.0 - log (W)/lr);
               X  = k5 + Dk;                          /* X >= k5 + 1      */
               W *= (U - p5) * lr;                    /* W -- U(0, h(x))  */
               if (W <= f5 - Dk * (f5 - f5*r5))
-                return(X);                           /* quick accept of X*/
+                return (X);                          /* quick accept of X*/
             }
         }
 
       /* acceptance-rejection test of candidate X from the original area */
       /* test, whether  W <= f(k),    with  W = U*h(x)  and  U -- U(0, 1)*/
       /* log f(X) = (X - m)*log(my) - log X! + log m!                    */
-      if (log(W) <= X * l_my - flogfak(X) - c_pm)  return(X);
+      if (log (W) <= X * l_my - flogfak (X) - c_pm)  return (X);
     }
 }
 /* ---- pprsc.c end ------ */
@@ -300,7 +300,7 @@
 
 /* Given uniform u, find x such that CDF(L,x)==u.  Return x. */
 static void
-poisson_cdf_lookup(double lambda, double *p, size_t n)
+poisson_cdf_lookup (double lambda, double *p, size_t n)
 {
   /* Table size is predicated on the maximum value of lambda
    * we want to store in the table, and the maximum value of
@@ -316,12 +316,12 @@
 
   /* Precompute the table for the u up to and including 0.458.
    * We will almost certainly need it. */
-  int intlambda = (int)floor(lambda);
+  int intlambda = (int)floor (lambda);
   double P;
   int tableidx;
   size_t i = n;
 
-  t[0] = P = exp(-lambda);
+  t[0] = P = exp (-lambda);
   for (tableidx = 1; tableidx <= intlambda; tableidx++) {
     P = P*lambda/(double)tableidx;
     t[tableidx] = t[tableidx-1] + P;
@@ -369,18 +369,18 @@
 }
 
 static void
-poisson_cdf_lookup_float(double lambda, float *p, size_t n)
+poisson_cdf_lookup_float (double lambda, float *p, size_t n)
 {
   double t[TABLESIZE];
 
   /* Precompute the table for the u up to and including 0.458.
    * We will almost certainly need it. */
-  int intlambda = (int)floor(lambda);
+  int intlambda = (int)floor (lambda);
   double P;
   int tableidx;
   size_t i = n;
 
-  t[0] = P = exp(-lambda);
+  t[0] = P = exp (-lambda);
   for (tableidx = 1; tableidx <= intlambda; tableidx++) {
     P = P*lambda/(double)tableidx;
     t[tableidx] = t[tableidx-1] + P;
@@ -412,8 +412,8 @@
 static void
 poisson_rejection (double lambda, double *p, size_t n)
 {
-  double sq = sqrt(2.0*lambda);
-  double alxm = log(lambda);
+  double sq = sqrt (2.0*lambda);
+  double alxm = log (lambda);
   double g = lambda*alxm - LGAMMA(lambda+1.0);
   size_t i;
 
@@ -425,8 +425,8 @@
           y = tan(M_PI*RUNI);
           em = sq * y + lambda;
         } while (em < 0.0);
-        em = floor(em);
-        t = 0.9*(1.0+y*y)*exp(em*alxm-flogfak(em)-g);
+        em = floor (em);
+        t = 0.9*(1.0+y*y)*exp (em*alxm-flogfak (em)-g);
       } while (RUNI > t);
       p[i] = em;
     }
@@ -436,8 +436,8 @@
 static void
 poisson_rejection_float (double lambda, float *p, size_t n)
 {
-  double sq = sqrt(2.0*lambda);
-  double alxm = log(lambda);
+  double sq = sqrt (2.0*lambda);
+  double alxm = log (lambda);
   double g = lambda*alxm - LGAMMA(lambda+1.0);
   size_t i;
 
@@ -446,11 +446,11 @@
       double y, em, t;
       do {
         do {
-          y = tan(M_PI*RUNI);
+          y = tan (M_PI*RUNI);
           em = sq * y + lambda;
         } while (em < 0.0);
-        em = floor(em);
-        t = 0.9*(1.0+y*y)*exp(em*alxm-flogfak(em)-g);
+        em = floor (em);
+        t = 0.9*(1.0+y*y)*exp (em*alxm-flogfak (em)-g);
       } while (RUNI > t);
       p[i] = em;
     }
@@ -477,20 +477,20 @@
     }
   else if (L <= 10.0)
     {
-      poisson_cdf_lookup(L, p, n);
+      poisson_cdf_lookup (L, p, n);
     }
   else if (L <= 1e8)
     {
       for (i=0; i<n; i++)
-        p[i] = pprsc(L);
+        p[i] = pprsc (L);
     }
   else
     {
       /* normal approximation: from Phys. Rev. D (1994) v50 p1284 */
-      const double sqrtL = sqrt(L);
+      const double sqrtL = sqrt (L);
       for (i = 0; i < n; i++)
         {
-          p[i] = floor(RNOR*sqrtL + L + 0.5);
+          p[i] = floor (RNOR*sqrtL + L + 0.5);
           if (p[i] < 0.0)
             p[i] = 0.0; /* will probably never happen */
         }
@@ -505,7 +505,7 @@
   if (L < 0.0) ret = NAN;
   else if (L <= 12.0) {
     /* From Press, et al. Numerical recipes */
-    double g = exp(-L);
+    double g = exp (-L);
     int em = -1;
     double t = 1.0;
     do {
@@ -515,14 +515,14 @@
     ret = em;
   } else if (L <= 1e8) {
     /* numerical recipes */
-    poisson_rejection(L, &ret, 1);
+    poisson_rejection (L, &ret, 1);
   } else if (INFINITE(L)) {
     /* FIXME R uses NaN, but the normal approx. suggests that as
      * limit should be inf. Which is correct? */
     ret = NAN;
   } else {
     /* normal approximation: from Phys. Rev. D (1994) v50 p1284 */
-    ret = floor(RNOR*sqrt(L) + L + 0.5);
+    ret = floor (RNOR*sqrt (L) + L + 0.5);
     if (ret < 0.0) ret = 0.0; /* will probably never happen */
   }
   return ret;
@@ -541,20 +541,20 @@
     }
   else if (L <= 10.0)
     {
-      poisson_cdf_lookup_float(L, p, n);
+      poisson_cdf_lookup_float (L, p, n);
     }
   else if (L <= 1e8)
     {
       for (i=0; i<n; i++)
-        p[i] = pprsc(L);
+        p[i] = pprsc (L);
     }
   else
     {
       /* normal approximation: from Phys. Rev. D (1994) v50 p1284 */
-      const double sqrtL = sqrt(L);
+      const double sqrtL = sqrt (L);
       for (i = 0; i < n; i++)
         {
-          p[i] = floor(RNOR*sqrtL + L + 0.5);
+          p[i] = floor (RNOR*sqrtL + L + 0.5);
           if (p[i] < 0.0)
             p[i] = 0.0; /* will probably never happen */
         }
@@ -570,7 +570,7 @@
   if (L < 0.0) ret = NAN;
   else if (L <= 12.0) {
     /* From Press, et al. Numerical recipes */
-    double g = exp(-L);
+    double g = exp (-L);
     int em = -1;
     double t = 1.0;
     do {
@@ -580,14 +580,14 @@
     ret = em;
   } else if (L <= 1e8) {
     /* numerical recipes */
-    poisson_rejection_float(L, &ret, 1);
+    poisson_rejection_float (L, &ret, 1);
   } else if (INFINITE(L)) {
     /* FIXME R uses NaN, but the normal approx. suggests that as
      * limit should be inf. Which is correct? */
     ret = NAN;
   } else {
     /* normal approximation: from Phys. Rev. D (1994) v50 p1284 */
-    ret = floor(RNOR*sqrt(L) + L + 0.5);
+    ret = floor (RNOR*sqrt (L) + L + 0.5);
     if (ret < 0.0) ret = 0.0; /* will probably never happen */
   }
   return ret;
--- a/liboctave/sparse-base-chol.cc
+++ b/liboctave/sparse-base-chol.cc
@@ -56,31 +56,31 @@
 
   for (k = 0; k < ncol; k++)
     {
-      p = Sp [k];
-      pend = Sp [k+1];
-      Sp [k] = pdest;
+      p = Sp[k];
+      pend = Sp[k+1];
+      Sp[k] = pdest;
       for (; p < pend; p++)
         {
-          sik = Sx [p];
+          sik = Sx[p];
           if (CHOLMOD_IS_NONZERO (sik))
             {
               if (p != pdest)
                 {
-                  Si [pdest] = Si [p];
-                  Sx [pdest] = sik;
+                  Si[pdest] = Si[p];
+                  Sx[pdest] = sik;
                 }
               pdest++;
             }
         }
     }
-  Sp [ncol] = pdest;
+  Sp[ncol] = pdest;
 }
 #endif
 
 template <class chol_type, class chol_elt, class p_type>
 octave_idx_type
 sparse_base_chol<chol_type, chol_elt, p_type>::sparse_base_chol_rep::init
-  (const chol_type& a, bool natural)
+  (const chol_type& a, bool natural, octave_idx_type nargout)
 {
   volatile octave_idx_type info = 0;
 #ifdef HAVE_CHOLMOD
@@ -157,7 +157,7 @@
   if (natural)
     {
       cm->nmethods = 1 ;
-      cm->method [0].ordering = CHOLMOD_NATURAL ;
+      cm->method[0].ordering = CHOLMOD_NATURAL ;
       cm->postorder = false ;
     }
 
@@ -170,7 +170,7 @@
   is_pd = cm->status == CHOLMOD_OK;
   info = (is_pd ? 0 : cm->status);
 
-  if (is_pd)
+  if (is_pd || nargout > 1)
     {
       BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
       cond = CHOLMOD_NAME(rcond) (Lfactor, cm);
@@ -229,11 +229,11 @@
   octave_idx_type nnz = m->nzmax;
   chol_type ret (m->nrow, nc, nnz);
   for (octave_idx_type j = 0; j < nc+1; j++)
-    ret.xcidx(j) = static_cast<octave_idx_type *>(m->p)[j];
+    ret.xcidx (j) = static_cast<octave_idx_type *>(m->p)[j];
   for (octave_idx_type i = 0; i < nnz; i++)
     {
-      ret.xridx(i) = static_cast<octave_idx_type *>(m->i)[i];
-      ret.xdata(i) = static_cast<chol_elt *>(m->x)[i];
+      ret.xridx (i) = static_cast<octave_idx_type *>(m->i)[i];
+      ret.xdata (i) = static_cast<chol_elt *>(m->x)[i];
     }
   return ret;
 #else
@@ -252,11 +252,11 @@
 
   for (octave_idx_type i = 0; i < n; i++)
     {
-      p.xcidx(i) = i;
-      p.xridx(i) = static_cast<octave_idx_type>(perms(i));
-      p.xdata(i) = 1;
+      p.xcidx (i) = i;
+      p.xridx (i) = static_cast<octave_idx_type>(perms (i));
+      p.xdata (i) = 1;
     }
-  p.xcidx(n) = n;
+  p.xcidx (n) = n;
 
   return p;
 #else
@@ -277,7 +277,7 @@
   double rcond2;
   octave_idx_type info;
   MatrixType mattype (MatrixType::Upper);
-  chol_type linv = L ().hermitian ().inverse(mattype, info, rcond2, 1, 0);
+  chol_type linv = L ().hermitian ().inverse (mattype, info, rcond2, 1, 0);
 
   if (perms.length () == n)
     {
--- a/liboctave/sparse-base-chol.h
+++ b/liboctave/sparse-base-chol.h
@@ -53,7 +53,7 @@
       : count (1), Lsparse (0), Common (), is_pd (false), minor_p (0),
         perms (), cond (0)
       {
-        info = init (a, natural);
+        info = init (a, natural, info);
       }
 
     ~sparse_base_chol_rep (void)
@@ -93,7 +93,8 @@
 
     double cond;
 
-    octave_idx_type init (const chol_type& a, bool natural = true);
+    octave_idx_type init (const chol_type& a, bool natural = true,
+                          octave_idx_type nargout = 1);
 
     void drop_zeros (const cholmod_sparse* S);
 
@@ -113,12 +114,16 @@
     sparse_base_chol_rep (const chol_type& a,
                           const bool natural)
       : count (1), is_pd (false), minor_p (0), perms (), cond (0)
-      { init (a, natural); }
+      {
+        init (a, natural);
+      }
 
     sparse_base_chol_rep (const chol_type& a, octave_idx_type& info,
                           const bool natural)
       : count (1), is_pd (false), minor_p (0), perms (), cond (0)
-      { info = init (a, natural); }
+      {
+        info = init (a, natural, info);
+      }
 
     ~sparse_base_chol_rep (void) { }
 
@@ -143,7 +148,8 @@
 
     double cond;
 
-    octave_idx_type init (const chol_type& a, bool natural = true);
+    octave_idx_type init (const chol_type& a, bool natural = true,
+                          octave_idx_type nargout = 0);
 
     // No copying!
 
--- a/liboctave/sparse-base-lu.cc
+++ b/liboctave/sparse-base-lu.cc
@@ -37,26 +37,26 @@
 
   lu_type Yout (nr, nc, Lfact.nnz () + Ufact.nnz ());
   octave_idx_type ii = 0;
-  Yout.xcidx(0) = 0;
+  Yout.xcidx (0) = 0;
 
   for (octave_idx_type j = 0; j < nc; j++)
     {
-      for (octave_idx_type i = Ufact.cidx (j); i < Ufact.cidx(j + 1); i++)
+      for (octave_idx_type i = Ufact.cidx (j); i < Ufact.cidx (j + 1); i++)
         {
-          Yout.xridx (ii) = Ufact.ridx(i);
-          Yout.xdata (ii++) = Ufact.data(i);
+          Yout.xridx (ii) = Ufact.ridx (i);
+          Yout.xdata (ii++) = Ufact.data (i);
         }
       if (j < rcmin)
         {
           // Note the +1 skips the 1.0 on the diagonal
           for (octave_idx_type i = Lfact.cidx (j) + 1;
-               i < Lfact.cidx(j +1); i++)
+               i < Lfact.cidx (j +1); i++)
             {
-              Yout.xridx (ii) = Lfact.ridx(i);
-              Yout.xdata (ii++) = Lfact.data(i);
+              Yout.xridx (ii) = Lfact.ridx (i);
+              Yout.xdata (ii++) = Lfact.data (i);
             }
         }
-      Yout.xcidx(j + 1) = ii;
+      Yout.xcidx (j + 1) = ii;
     }
 
   return Yout;
--- a/liboctave/sparse-dmsolve.cc
+++ b/liboctave/sparse-dmsolve.cc
@@ -33,6 +33,7 @@
 #include "MatrixType.h"
 #include "oct-sort.h"
 #include "oct-locbuf.h"
+#include "oct-inttypes.h"
 
 template <class T>
 static MSparse<T>
@@ -42,9 +43,17 @@
                 octave_idx_type cend, octave_idx_type maxnz = -1,
                 bool lazy = false)
 {
-  octave_idx_type nz = (rend - rst) * (cend - cst);
+  octave_idx_type nr = rend - rst, nc = cend - cst;
   maxnz = (maxnz < 0 ? A.nnz () : maxnz);
-  MSparse<T> B (rend - rst, cend - cst, (nz < maxnz ? nz : maxnz));
+  octave_idx_type nz;
+
+  // Cast to uint64 to handle overflow in this multiplication
+  if (octave_uint64 (nr)*octave_uint64 (nc) < octave_uint64 (maxnz))
+    nz = nr*nc;
+  else
+    nz = maxnz;
+
+  MSparse<T> B (nr, nc, (nz < maxnz ? nz : maxnz));
   // Some sparse functions can support lazy indexing (where elements
   // in the row are in no particular order), even though octave in
   // general can't. For those functions that can using it is a big
@@ -54,16 +63,16 @@
       nz = 0;
       for (octave_idx_type j = cst ; j < cend ; j++)
         {
-          octave_idx_type qq = (Q ? Q [j] : j);
+          octave_idx_type qq = (Q ? Q[j] : j);
           B.xcidx (j - cst) = nz;
-          for (octave_idx_type p = A.cidx(qq) ; p < A.cidx (qq+1) ; p++)
+          for (octave_idx_type p = A.cidx (qq) ; p < A.cidx (qq+1) ; p++)
             {
               octave_quit ();
-              octave_idx_type r = (Pinv ? Pinv [A.ridx (p)] : A.ridx (p));
+              octave_idx_type r = (Pinv ? Pinv[A.ridx (p)] : A.ridx (p));
               if (r >= rst && r < rend)
                 {
                   B.xdata (nz) = A.data (p);
-                  B.xridx (nz++) =  r - rst ;
+                  B.xridx (nz++) = r - rst ;
                 }
             }
         }
@@ -77,21 +86,21 @@
       nz = 0;
       for (octave_idx_type j = cst ; j < cend ; j++)
         {
-          octave_idx_type qq = (Q ? Q [j] : j);
+          octave_idx_type qq = (Q ? Q[j] : j);
           B.xcidx (j - cst) = nz;
-          for (octave_idx_type p = A.cidx(qq) ; p < A.cidx (qq+1) ; p++)
+          for (octave_idx_type p = A.cidx (qq) ; p < A.cidx (qq+1) ; p++)
             {
               octave_quit ();
-              octave_idx_type r = (Pinv ? Pinv [A.ridx (p)] : A.ridx (p));
+              octave_idx_type r = (Pinv ? Pinv[A.ridx (p)] : A.ridx (p));
               if (r >= rst && r < rend)
                 {
-                  X [r-rst] = A.data (p);
-                  B.xridx (nz++) =  r - rst ;
+                  X[r-rst] = A.data (p);
+                  B.xridx (nz++) = r - rst ;
                 }
             }
           sort.sort (ri + B.xcidx (j - cst), nz - B.xcidx (j - cst));
           for (octave_idx_type p = B.cidx (j - cst); p < nz; p++)
-            B.xdata (p) = X [B.xridx (p)];
+            B.xdata (p) = X[B.xridx (p)];
         }
       B.xcidx (cend - cst) = nz ;
     }
@@ -170,7 +179,7 @@
       for (octave_idx_type i = 0; i < nr; i++)
         {
           octave_quit ();
-          ax [Q [r + i] + aoff] = bx [i + boff];
+          ax[Q[r + i] + aoff] = bx[i + boff];
         }
     }
 }
@@ -197,17 +206,17 @@
 
   OCTAVE_LOCAL_BUFFER (octave_idx_type, Qinv, nr);
   for (octave_idx_type i = 0; i < nr; i++)
-    Qinv [Q [i]] = i;
+    Qinv[Q[i]] = i;
 
   // First count the number of elements in the final array
-  octave_idx_type nel = a.xcidx(c) + b.nnz ();
+  octave_idx_type nel = a.xcidx (c) + b.nnz ();
 
   if (c + b_cols < nc)
-    nel += a.xcidx(nc) - a.xcidx(c + b_cols);
+    nel += a.xcidx (nc) - a.xcidx (c + b_cols);
 
   for (octave_idx_type i = c; i < c + b_cols; i++)
-    for (octave_idx_type j = a.xcidx(i); j < a.xcidx(i+1); j++)
-      if (Qinv [a.xridx(j)] < r || Qinv [a.xridx(j)] >= r + b_rows)
+    for (octave_idx_type j = a.xcidx (i); j < a.xcidx (i+1); j++)
+      if (Qinv[a.xridx (j)] < r || Qinv[a.xridx (j)] >= r + b_rows)
         nel++;
 
   OCTAVE_LOCAL_BUFFER (T, X, nr);
@@ -216,49 +225,49 @@
   a = MSparse<T> (nr, nc, nel);
   octave_idx_type *ri = a.xridx ();
 
-  for (octave_idx_type i = 0; i < tmp.cidx(c); i++)
+  for (octave_idx_type i = 0; i < tmp.cidx (c); i++)
     {
-      a.xdata(i) = tmp.xdata(i);
-      a.xridx(i) = tmp.xridx(i);
+      a.xdata (i) = tmp.xdata (i);
+      a.xridx (i) = tmp.xridx (i);
     }
   for (octave_idx_type i = 0; i < c + 1; i++)
-    a.xcidx(i) = tmp.xcidx(i);
+    a.xcidx (i) = tmp.xcidx (i);
 
-  octave_idx_type ii = a.xcidx(c);
+  octave_idx_type ii = a.xcidx (c);
 
   for (octave_idx_type i = c; i < c + b_cols; i++)
     {
       octave_quit ();
 
-      for (octave_idx_type j = tmp.xcidx(i); j < tmp.xcidx(i+1); j++)
-        if (Qinv [tmp.xridx(j)] < r ||  Qinv [tmp.xridx(j)] >= r + b_rows)
+      for (octave_idx_type j = tmp.xcidx (i); j < tmp.xcidx (i+1); j++)
+        if (Qinv[tmp.xridx (j)] < r ||  Qinv[tmp.xridx (j)] >= r + b_rows)
           {
-            X [tmp.xridx(j)] = tmp.xdata(j);
-            a.xridx(ii++) = tmp.xridx(j);
+            X[tmp.xridx (j)] = tmp.xdata (j);
+            a.xridx (ii++) = tmp.xridx (j);
           }
 
       octave_quit ();
 
-      for (octave_idx_type j = b.cidx(i-c); j < b.cidx(i-c+1); j++)
+      for (octave_idx_type j = b.cidx (i-c); j < b.cidx (i-c+1); j++)
         {
-          X [Q [r + b.ridx(j)]] = b.data(j);
-          a.xridx(ii++) = Q [r + b.ridx(j)];
+          X[Q[r + b.ridx (j)]] = b.data (j);
+          a.xridx (ii++) = Q[r + b.ridx (j)];
         }
 
       sort.sort (ri + a.xcidx (i), ii - a.xcidx (i));
       for (octave_idx_type p = a.xcidx (i); p < ii; p++)
-        a.xdata (p) = X [a.xridx (p)];
-      a.xcidx(i+1) = ii;
+        a.xdata (p) = X[a.xridx (p)];
+      a.xcidx (i+1) = ii;
     }
 
   for (octave_idx_type i = c + b_cols; i < nc; i++)
     {
-      for (octave_idx_type j = tmp.xcidx(i); j < tmp.cidx(i+1); j++)
+      for (octave_idx_type j = tmp.xcidx (i); j < tmp.cidx (i+1); j++)
         {
-          a.xdata(ii) = tmp.xdata(j);
-          a.xridx(ii++) = tmp.xridx(j);
+          a.xdata (ii) = tmp.xdata (j);
+          a.xridx (ii++) = tmp.xridx (j);
         }
-      a.xcidx(i+1) = ii;
+      a.xcidx (i+1) = ii;
     }
 }
 
@@ -287,7 +296,7 @@
       for (octave_idx_type i = 0; i < b_nr; i++)
         {
           octave_quit ();
-          Btx [p [i] + off] = Bx [ i + off];
+          Btx[p[i] + off] = Bx[ i + off];
         }
     }
 }
@@ -318,23 +327,23 @@
   octave_sort<octave_idx_type> sort;
   octave_idx_type *ri = a.xridx ();
   OCTAVE_LOCAL_BUFFER (RT, X, b_nr);
-  a.xcidx(0) = 0;
+  a.xcidx (0) = 0;
   for (octave_idx_type j = 0; j < b_nc; j++)
     {
-      for (octave_idx_type i = b.cidx(j); i < b.cidx(j+1); i++)
+      for (octave_idx_type i = b.cidx (j); i < b.cidx (j+1); i++)
         {
           octave_quit ();
-          octave_idx_type r = p [b.ridx (i)];
-          X [r] = b.data (i);
-          a.xridx(nz++) = p [b.ridx (i)];
+          octave_idx_type r = p[b.ridx (i)];
+          X[r] = b.data (i);
+          a.xridx (nz++) = p[b.ridx (i)];
         }
       sort.sort (ri + a.xcidx (j), nz - a.xcidx (j));
       for (octave_idx_type i = a.cidx (j); i < nz; i++)
         {
           octave_quit ();
-          a.xdata (i) = X [a.xridx (i)];
+          a.xdata (i) = X[a.xridx (i)];
         }
-      a.xcidx(j+1) = nz;
+      a.xcidx (j+1) = nz;
     }
 }
 
@@ -389,7 +398,7 @@
       csm.p = const_cast<octave_idx_type *>(a.cidx ());
       csm.i = const_cast<octave_idx_type *>(a.ridx ());
 
-#if defined(CS_VER) && (CS_VER >= 2)
+#if defined (CS_VER) && (CS_VER >= 2)
       CXSPARSE_DNAME (d) *dm = CXSPARSE_DNAME(_dmperm) (&csm, 0);
       octave_idx_type *p = dm->p;
       octave_idx_type *q = dm->q;
@@ -400,26 +409,26 @@
 #endif
       OCTAVE_LOCAL_BUFFER (octave_idx_type, pinv, nr);
       for (octave_idx_type i = 0; i < nr; i++)
-        pinv [p [i]] = i;
+        pinv[p[i]] = i;
       RT btmp;
       dmsolve_permute (btmp, b, pinv);
       info = 0;
       retval.resize (nc, b_nc);
 
       // Leading over-determined block
-      if (dm->rr [2] < nr && dm->cc [3] < nc)
+      if (dm->rr[2] < nr && dm->cc[3] < nc)
         {
-          ST m = dmsolve_extract (a, pinv, q, dm->rr [2], nr, dm->cc [3], nc,
+          ST m = dmsolve_extract (a, pinv, q, dm->rr[2], nr, dm->cc[3], nc,
                                   nnz_remaining, true);
           nnz_remaining -= m.nnz ();
           RT mtmp =
             qrsolve (m, dmsolve_extract (btmp, 0, 0, dm->rr[2], b_nr, 0,
                                          b_nc), info);
-          dmsolve_insert (retval, mtmp, q, dm->cc [3], 0);
-          if (dm->rr [2] > 0 && !info)
+          dmsolve_insert (retval, mtmp, q, dm->cc[3], 0);
+          if (dm->rr[2] > 0 && !info)
             {
-              m = dmsolve_extract (a, pinv, q, 0, dm->rr [2],
-                                   dm->cc [3], nc, nnz_remaining, true);
+              m = dmsolve_extract (a, pinv, q, 0, dm->rr[2],
+                                   dm->cc[3], nc, nnz_remaining, true);
               nnz_remaining -= m.nnz ();
               RT ctmp = dmsolve_extract (btmp, 0, 0, 0,
                                          dm->rr[2], 0, b_nc);
@@ -429,12 +438,12 @@
 
       // Structurally non-singular blocks
       // FIXME Should use fine Dulmange-Mendelsohn decomposition here.
-      if (dm->rr [1] < dm->rr [2] && dm->cc [2] < dm->cc [3] && !info)
+      if (dm->rr[1] < dm->rr[2] && dm->cc[2] < dm->cc[3] && !info)
         {
-          ST m = dmsolve_extract (a, pinv, q, dm->rr [1], dm->rr [2],
-                                  dm->cc [2], dm->cc [3], nnz_remaining, false);
+          ST m = dmsolve_extract (a, pinv, q, dm->rr[1], dm->rr[2],
+                                  dm->cc[2], dm->cc[3], nnz_remaining, false);
           nnz_remaining -= m.nnz ();
-          RT btmp2 = dmsolve_extract (btmp, 0, 0, dm->rr [1], dm->rr [2],
+          RT btmp2 = dmsolve_extract (btmp, 0, 0, dm->rr[1], dm->rr[2],
                                       0, b_nc);
           double rcond = 0.0;
           MatrixType mtyp (MatrixType::Full);
@@ -446,11 +455,11 @@
               mtmp = qrsolve (m, btmp2, info);
             }
 
-          dmsolve_insert (retval, mtmp, q, dm->cc [2], 0);
-          if (dm->rr [1] > 0 && !info)
+          dmsolve_insert (retval, mtmp, q, dm->cc[2], 0);
+          if (dm->rr[1] > 0 && !info)
             {
-              m = dmsolve_extract (a, pinv, q, 0, dm->rr [1], dm->cc [2],
-                                   dm->cc [3], nnz_remaining, true);
+              m = dmsolve_extract (a, pinv, q, 0, dm->rr[1], dm->cc[2],
+                                   dm->cc[3], nnz_remaining, true);
               nnz_remaining -= m.nnz ();
               RT ctmp = dmsolve_extract (btmp, 0, 0, 0,
                                          dm->rr[1], 0, b_nc);
@@ -459,13 +468,13 @@
         }
 
       // Trailing under-determined block
-      if (dm->rr [1] > 0 && dm->cc [2] > 0 && !info)
+      if (dm->rr[1] > 0 && dm->cc[2] > 0 && !info)
         {
-          ST m = dmsolve_extract (a, pinv, q, 0, dm->rr [1], 0,
-                                  dm->cc [2], nnz_remaining, true);
+          ST m = dmsolve_extract (a, pinv, q, 0, dm->rr[1], 0,
+                                  dm->cc[2], nnz_remaining, true);
           RT mtmp =
-            qrsolve (m, dmsolve_extract(btmp, 0, 0, 0, dm->rr [1] , 0,
-                                        b_nc), info);
+            qrsolve (m, dmsolve_extract (btmp, 0, 0, 0, dm->rr[1] , 0,
+                                         b_nc), info);
           dmsolve_insert (retval, mtmp, q, 0, 0);
         }
 
--- a/liboctave/sparse-util.cc
+++ b/liboctave/sparse-util.cc
@@ -28,6 +28,7 @@
 #include <stdio.h>
 #include <stdarg.h>
 #include "lo-error.h"
+#include "oct-sparse.h"
 #include "sparse-util.h"
 
 // FIXME this overload is here due to API change in SuiteSparse (3.1 -> 3.2)
@@ -40,10 +41,15 @@
 void
 SparseCholError (int status, const char *file, int line, const char *message)
 {
-  (*current_liboctave_warning_handler)("warning %i, at line %i in file %s",
-                                     status, line, file);
+  // Ignore CHOLMOD_NOT_POSDEF, since we handle that in Fchol as an
+  // error or exit status.
+  if (status != CHOLMOD_NOT_POSDEF)
+    {
+      (*current_liboctave_warning_handler)("warning %i, at line %i in file %s",
+                                           status, line, file);
 
-  (*current_liboctave_warning_handler)(message);
+      (*current_liboctave_warning_handler)(message);
+    }
 }
 
 int
--- a/liboctave/str-vec.cc
+++ b/liboctave/str-vec.cc
@@ -54,7 +54,7 @@
   for (std::list<std::string>::const_iterator p = lst.begin ();
        p != lst.end ();
        p++)
-    elem(i++) = *p;
+    elem (i++) = *p;
 }
 
 string_vector::string_vector (const std::set<std::string>& lst)
@@ -69,7 +69,7 @@
   for (std::set<std::string>::const_iterator p = lst.begin ();
        p != lst.end ();
        p++)
-    elem(i++) = *p;
+    elem (i++) = *p;
 }
 
 // Create a string vector from a NULL terminated list of C strings.
@@ -125,9 +125,9 @@
       octave_idx_type k = 0;
 
       for (octave_idx_type i = 1; i < len; i++)
-        if (elem(i) != elem(k))
+        if (elem (i) != elem (k))
           if (++k != i)
-            elem(k) = elem(i);
+            elem (k) = elem (i);
 
       if (len != ++k)
         resize (k);
@@ -143,7 +143,7 @@
 
   resize (len + 1);
 
-  elem(len) = s;
+  elem (len) = s;
 
   return *this;
 }
@@ -158,7 +158,7 @@
   resize (new_len);
 
   for (octave_idx_type i = 0; i < sv_len; i++)
-    elem(len + i) = sv[i];
+    elem (len + i) = sv[i];
 
   return *this;
 }
@@ -175,9 +175,9 @@
       octave_idx_type i;
 
       for (i = 0; i < len - 1; i++)
-        retval += elem(i) + sep;
+        retval += elem (i) + sep;
 
-      retval += elem(i);
+      retval += elem (i);
     }
 
   return retval;
@@ -190,10 +190,10 @@
 
   char **retval = new char * [len + 1];
 
-  retval [len] = 0;
+  retval[len] = 0;
 
   for (octave_idx_type i = 0; i < len; i++)
-    retval[i] = strsave (elem(i).c_str ());
+    retval[i] = strsave (elem (i).c_str ());
 
   return retval;
 }
--- a/liboctave/str-vec.h
+++ b/liboctave/str-vec.h
@@ -79,7 +79,7 @@
 
     for (octave_idx_type i = 0; i < n; i++)
       {
-        octave_idx_type tmp = elem(i).length ();
+        octave_idx_type tmp = elem (i).length ();
 
         if (tmp > longest)
           longest = tmp;
--- a/liboctave/tempnam.c
+++ b/liboctave/tempnam.c
@@ -43,16 +43,16 @@
 {
   size_t len;
   register char *s;
-  register char *t = __stdio_gen_tempname(dir, pfx, 1, &len, (FILE **) NULL);
+  register char *t = __stdio_gen_tempname (dir, pfx, 1, &len, (FILE **) NULL);
 
   if (t == NULL)
     return NULL;
 
-  s = (char *) malloc(len);
+  s = (char *) malloc (len);
   if (s == NULL)
     return NULL;
 
-  (void) memcpy(s, t, len);
+  (void) memcpy (s, t, len);
   return s;
 }
 
--- a/liboctave/tempname.c
+++ b/liboctave/tempname.c
@@ -112,14 +112,14 @@
 
   if (dir_search)
     {
-      register const char *d = getenv("TMPDIR");
-      if (d != NULL && !diraccess(d))
+      register const char *d = getenv ("TMPDIR");
+      if (d != NULL && !diraccess (d))
         d = NULL;
-      if (d == NULL && dir != NULL && diraccess(dir))
+      if (d == NULL && dir != NULL && diraccess (dir))
         d = dir;
-      if (d == NULL && diraccess(tmpdir))
+      if (d == NULL && diraccess (tmpdir))
         d = tmpdir;
-      if (d == NULL && diraccess("/tmp"))
+      if (d == NULL && diraccess ("/tmp"))
         d = "/tmp";
       if (d == NULL)
         {
@@ -139,14 +139,14 @@
 
   if (pfx != NULL && *pfx != '\0')
     {
-      plen = strlen(pfx);
+      plen = strlen (pfx);
       if (plen > 5)
         plen = 5;
     }
   else
     plen = 0;
 
-  if (dir != tmpdir && !strcmp(dir, tmpdir))
+  if (dir != tmpdir && !strcmp (dir, tmpdir))
     dir = tmpdir;
   idx = &indices[(plen == 0 && dir == tmpdir) ? 1 : 0];
 
--- a/m4/acinclude.m4
+++ b/m4/acinclude.m4
@@ -37,271 +37,55 @@
 dnl
 dnl ----------------------------------------------------------------------
 dnl
-dnl Figure out the hardware-vendor-os info.
-dnl
-dnl OCTAVE_HOST_TYPE
-AC_DEFUN([OCTAVE_HOST_TYPE],
-[AC_CANONICAL_HOST
-if test -z "$host"; then
-  host=unknown
-fi
-canonical_host_type=$host
-if test "$host" = unknown; then
-  AC_MSG_WARN([configuring Octave for unknown system type
-])
-fi
-AC_SUBST(canonical_host_type)])
-dnl
-dnl Set default value for a variable and substitute it.
-dnl
-dnl OCTAVE_SET_DEFAULT
-AC_DEFUN([OCTAVE_SET_DEFAULT],
-[ifelse($#, 2, [: ${$1=$2}
-])dnl
-AC_MSG_RESULT([defining $1 to be $$1])
-AC_SUBST($1)])
-dnl
-dnl Check for ar.
-dnl
-AC_DEFUN([OCTAVE_PROG_AR],
-[if test -z "$AR"; then
-  AR=ar
-fi
-AC_SUBST(AR)
 
-if test -z "$ARFLAGS"; then
-  ARFLAGS="rc"
-fi
-AC_SUBST(ARFLAGS)
-])
-dnl
-dnl See if the compiler supports placement delete
 dnl
-AC_DEFUN([OCTAVE_PLACEMENT_DELETE],
-[AC_CACHE_CHECK([whether <new> defines placement delete operator],
-octave_cv_placement_delete,
-[AC_LANG_PUSH(C++)
-AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <new>]],
-[[operator delete((void *)0, (void *)0);]])],
-octave_cv_placement_delete=yes, octave_cv_placement_delete=no)])
-if test $octave_cv_placement_delete = yes; then
-AC_DEFINE(HAVE_PLACEMENT_DELETE,1,[Define if C++ supports operator delete(void *, void *)])
-fi
-AC_LANG_POP(C++)
-])
-dnl
-dnl See if the compiler dynamic auto arrays
+dnl Alphabetical list of macros in the OCTAVE_ namespace
 dnl
-AC_DEFUN([OCTAVE_DYNAMIC_AUTO_ARRAYS],
-[AC_CACHE_CHECK([whether C++ supports dynamic auto arrays],
-octave_cv_dynamic_auto_arrays,
-[AC_LANG_PUSH(C++)
-AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],
-[[void test(char *); int length(); char x[length()]; test(x);]])],
-octave_cv_dynamic_auto_arrays=yes, octave_cv_dynamic_auto_arrays=no)])
-if test $octave_cv_dynamic_auto_arrays = yes; then
-AC_DEFINE(HAVE_DYNAMIC_AUTO_ARRAYS,1,[Define if C++ supports dynamic auto arrays])
-fi
-AC_LANG_POP(C++)
-])
-dnl
-dnl See if the C++ library has the bit_and, bit_or and bit_xor
-dnl templates defined.
-dnl
-AC_DEFUN([OCTAVE_CXX_BITWISE_OP_TEMPLATES],
-[AC_CACHE_CHECK([whether bit_and, bit_or and bit_xor are defined in the c++ library],
-octave_cv_cxx_bitwise_op_templates,
-[AC_LANG_PUSH(C++)
-AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <functional>]],
-[[int x = 0;
-int y = 1;
-int z1 = std::bit_and<int>() (x, y);
-int z2 = std::bit_or<int>() (x, y);
-int z3 = std::bit_xor<int>() (x, y);]])],
-octave_cv_cxx_bitwise_op_templates=yes, octave_cv_cxx_bitwise_op_templates=no)])
-if test $octave_cv_cxx_bitwise_op_templates = yes; then
-AC_DEFINE(HAVE_CXX_BITWISE_OP_TEMPLATES,1,[Define if C++ library has templated bitwise operators])
-fi
-AC_LANG_POP(C++)
-])
 
 dnl
-dnl See if the C++ library has functions to set real and imaginary
-dnl parts of complex numbers independently.
-dnl
-AC_DEFUN([OCTAVE_CXX_COMPLEX_SETTERS],
-[AC_CACHE_CHECK([whether complex class can set components independently],
-octave_cv_cxx_complex_setters,
-[AC_LANG_PUSH(C++)
-AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <complex>]],
-[[std::complex<double> x; x.real (1.0); x.imag (2.0);]])],
-octave_cv_cxx_complex_setters=yes, octave_cv_cxx_complex_setters=no)])
-if test $octave_cv_cxx_complex_setters = yes; then
-AC_DEFINE(HAVE_CXX_COMPLEX_SETTERS,1,[Define if C++ complex class has void real (T) and void imag (T) methods])
-fi
-AC_LANG_POP(C++)
-])
-dnl
-dnl See if the C++ library has functions to access real and imaginary
-dnl parts of complex numbers independently via references.
-dnl
-AC_DEFUN([OCTAVE_CXX_COMPLEX_REFERENCE_ACCESSORS],
-[AC_CACHE_CHECK([whether complex class can reference components independently],
-octave_cv_cxx_complex_reference_accessors,
-[AC_LANG_PUSH(C++)
-AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <complex>]],
-[[std::complex<double> x; x.real () = 1.0; x.imag () = 1.0;]])],
-octave_cv_cxx_complex_reference_accessors=yes, octave_cv_cxx_complex_reference_accessors=no)])
-if test $octave_cv_cxx_complex_reference_accessors = yes; then
-AC_DEFINE(HAVE_CXX_COMPLEX_REFERENCE_ACCESSORS,1,[Define if C++ complex class has T& real (void) and T& imag (void) methods])
-fi
-AC_LANG_POP(C++)
-])
-dnl
-dnl See if the Carbon Framework defines CGDisplayBitsPerPixel.
-dnl
-AC_DEFUN([OCTAVE_CARBON_CGDISPLAYBITSPERPIXEL],
-[AC_CACHE_CHECK([whether CGDisplayBitsPerPixel is defined in the Carbon Framework],
-octave_cv_carbon_cgdisplaybitsperpixel,
-[AC_LANG_PUSH(C++)
-AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
-#include <Carbon/Carbon.h>
-]], [[
-CGDirectDisplayID display = CGMainDisplayID ();
-size_t depth = CGDisplayBitsPerPixel (display);
-]])],
-octave_cv_carbon_cgdisplaybitsperpixel=yes, octave_cv_carbon_cgdisplaybitsperpixel=no)])
-if test $octave_cv_carbon_cgdisplaybitsperpixel = yes; then
-AC_DEFINE(HAVE_CARBON_CGDISPLAYBITSPERPIXEL,1,[Define if Carbon Framework has CGDisplayBitsPerPixel])
-fi
-AC_LANG_POP(C++)
-])
-dnl
-dnl The following test is from Karl Berry's Kpathseach library.  I'm
-dnl including it here in case we someday want to make the use of
-dnl kpathsea optional.
+dnl Check if the Carbon Framework defines CGDisplayBitsPerPixel.
 dnl
-dnl Some BSD putenv's, e.g., FreeBSD, do malloc/free's on the environment.
-dnl This test program is due to Mike Hibler <mike@cs.utah.edu>.
-dnl We don't actually need to run this if we don't have putenv, but it
-dnl doesn't hurt.
-AC_DEFUN([OCTAVE_SMART_PUTENV],
-[AC_MSG_CHECKING([whether putenv uses malloc])
-AC_CACHE_VAL(octave_cv_func_putenv_malloc,
-[AC_RUN_IFELSE([AC_LANG_SOURCE([[
-#define VAR	"YOW_VAR"
-#define STRING1 "GabbaGabbaHey"
-#define STRING2 "Yow!!"		/* should be shorter than STRING1 */
-extern char *getenv (); /* in case char* and int don't mix gracefully */
-main ()
-{
-  char *str1, *rstr1, *str2, *rstr2;
-  str1 = getenv (VAR);
-  if (str1)
-    exit (1);
-  str1 = malloc (strlen (VAR) + 1 + strlen (STRING1) + 1);
-  if (str1 == 0)
-    exit (2);
-  strcpy (str1, VAR);
-  strcat (str1, "=");
-  strcat (str1, STRING1);
-  if (putenv (str1) < 0)
-    exit (3);
-  rstr1 = getenv (VAR);
-  if (rstr1 == 0)
-    exit (4);
-  rstr1 -= strlen (VAR) + 1;
-  if (strncmp (rstr1, VAR, strlen (VAR)))
-    exit (5);
-  str2 = malloc (strlen (VAR) + 1 + strlen (STRING2) + 1);
-  if (str2 == 0 || str1 == str2)
-    exit (6);
-  strcpy (str2, VAR);
-  strcat (str2, "=");
-  strcat (str2, STRING2);
-  if (putenv (str2) < 0)
-    exit (7);
-  rstr2 = getenv (VAR);
-  if (rstr2 == 0)
-    exit (8);
-  rstr2 -= strlen (VAR) + 1;
-#if 0
-  printf ("rstr1=0x%x, rstr2=0x%x\n", rstr1, rstr2);
-  /*
-   * If string from first call was reused for the second call,
-   * you had better not do a free on the first string!
-   */
-  if (rstr1 == rstr2)
-          printf ("#define SMART_PUTENV\n");
-  else
-          printf ("#undef SMART_PUTENV\n");
-#endif
-  exit (rstr1 == rstr2 ? 0 : 1);
-}]])], octave_cv_func_putenv_malloc=yes, octave_cv_func_putenv_malloc=no,
-    octave_cv_func_putenv_malloc=no)])dnl
-AC_MSG_RESULT([$octave_cv_func_putenv_malloc])
-if test $octave_cv_func_putenv_malloc = yes; then
-  AC_DEFINE(SMART_PUTENV,1,[To quiet autoheader.])
-fi])
-dnl
-dnl Check to see if C++ compiler needs the new friend template declaration 
-dnl syntax. 
-dnl
-dnl OCTAVE_CXX_NEW_FRIEND_TEMPLATE_DECL
-AC_DEFUN([OCTAVE_CXX_NEW_FRIEND_TEMPLATE_DECL], [
-  AC_REQUIRE([AC_PROG_CXX])
-  AC_MSG_CHECKING([for C++ support for new friend template declaration])
-  AC_CACHE_VAL(octave_cv_cxx_new_friend_template_decl, [
-    AC_LANG_PUSH(C++)
-    rm -f conftest.h
-    cat > conftest.h <<EOB
-       struct A {
-	 friend int operator== (const A&, const A&);
-	 A (int) { }
-       };
-
-       template <class T> int
-       operator== (const T&, const T&)
-       {
-	 return 0;
-       }
-EOB
-    AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include "conftest.h"]],
-      [[A a (1);
-        return a == A(1);]])],
-      [octave_cv_cxx_new_friend_template_decl=no],
-      [octave_cv_cxx_new_friend_template_decl=yes])
+AC_DEFUN([OCTAVE_CARBON_CGDISPLAYBITSPERPIXEL], [
+  AC_CACHE_CHECK([whether CGDisplayBitsPerPixel is defined in the Carbon Framework],
+    [octave_cv_func_carbon_cgdisplaybitsperpixel],
+    [AC_LANG_PUSH(C++)
+    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+        #include <Carbon/Carbon.h>
+        ]], [[
+        CGDirectDisplayID display = CGMainDisplayID ();
+        size_t depth = CGDisplayBitsPerPixel (display);
+      ]])],
+      octave_cv_func_carbon_cgdisplaybitsperpixel=yes,
+      octave_cv_func_carbon_cgdisplaybitsperpixel=no)
     AC_LANG_POP(C++)
   ])
-  AC_MSG_RESULT([$octave_cv_cxx_new_friend_template_decl])
-  if test $octave_cv_cxx_new_friend_template_decl = yes; then
-    AC_DEFINE(CXX_NEW_FRIEND_TEMPLATE_DECL,1,[Define if your compiler supports `<>' stuff for template friends.])
+  if test $octave_cv_func_carbon_cgdisplaybitsperpixel = yes; then
+    AC_DEFINE(HAVE_CARBON_CGDISPLAYBITSPERPIXEL, 1,
+      [Define to 1 if Carbon Framework has CGDisplayBitsPerPixel.])
   fi
 ])
 dnl
-dnl Check to see if C compiler handles FLAG command line option.  If
-dnl two arguments are specified, execute the second arg as shell
-dnl commands.  Otherwise, add FLAG to CFLAGS if the compiler accepts
-dnl the flag.
+dnl Check if C compiler handles FLAG command line option.  If two
+dnl arguments are specified, execute the second arg as shell commands.
+dnl Otherwise, add FLAG to CFLAGS if the compiler accepts the flag.
 dnl
-dnl OCTAVE_CC_FLAG
 AC_DEFUN([OCTAVE_CC_FLAG], [
-  ac_safe=`echo "$1" | sed 'y%./+-:=%__p___%'`
+  ac_safe=`echo "$1" | sed 'y% ./+-:=%___p___%'`
   AC_MSG_CHECKING([whether ${CC-cc} accepts $1])
-  AC_CACHE_VAL(octave_cv_cc_flag_$ac_safe, [
-    AC_LANG_PUSH(C)
+  AC_CACHE_VAL([octave_cv_cc_flag_$ac_safe],
+    [AC_LANG_PUSH(C)
     XCFLAGS="$CFLAGS"
     CFLAGS="$CFLAGS $1"
     AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],
-      eval "octave_cv_cc_flag_$ac_safe=yes",
-      eval "octave_cv_cc_flag_$ac_safe=no")
+      [eval "octave_cv_cc_flag_$ac_safe=yes"],
+      [eval "octave_cv_cc_flag_$ac_safe=no"])
     CFLAGS="$XCFLAGS"
     AC_LANG_POP(C)
   ])
   if eval "test \"`echo '$octave_cv_cc_flag_'$ac_safe`\" = yes"; then
     AC_MSG_RESULT(yes)
-    ifelse([$2], , [
-      CFLAGS="$CFLAGS $1"
+    ifelse([$2], , 
+      [CFLAGS="$CFLAGS $1"
       AC_MSG_RESULT([adding $1 to CFLAGS])], [$2])
   else
     AC_MSG_RESULT(no)
@@ -309,166 +93,129 @@
   fi
 ])
 dnl
-dnl Check to see if C++ compiler handles FLAG command line option.  If
-dnl two arguments are specified, execute the second arg as shell
-dnl commands.  Otherwise, add FLAG to CXXFLAGS if the compiler accepts
-dnl the flag.
+dnl Check whether a math mapper function is available in <cmath>.
+dnl Will define HAVE_CMATH_FUNC if there is a double variant and
+dnl HAVE_CMATH_FUNCF if there is a float variant.
+dnl Currently capable of checking for functions with single 
+dnl argument and returning bool/int/real.
 dnl
-dnl OCTAVE_CXX_FLAG
-AC_DEFUN([OCTAVE_CXX_FLAG], [
-  ac_safe=`echo "$1" | sed 'y%./+-:=%__p___%'`
-  AC_MSG_CHECKING([whether ${CXX-g++} accepts $1])
-  AC_CACHE_VAL(octave_cv_cxx_flag_$ac_safe, [
-    AC_LANG_PUSH(C++)
-    XCXXFLAGS="$CXXFLAGS"
-    CXXFLAGS="$CXXFLAGS $1"
-    AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],
-      eval "octave_cv_cxx_flag_$ac_safe=yes",
-      eval "octave_cv_cxx_flag_$ac_safe=no")
-    CXXFLAGS="$XCXXFLAGS"
+AC_DEFUN([OCTAVE_CHECK_FUNC_CMATH], [
+  ac_safe=`echo "$1" | sed 'y% ./+-:=%___p___%'`
+
+  AC_CACHE_CHECK([for std::$1 in <cmath>],
+    [octave_cv_func_cmath_$ac_safe],
+    [AC_LANG_PUSH(C++)
+    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+        #include <cmath>
+        void take_func (bool (*func) (double x));
+        void take_func (int (*func) (double x));
+        void take_func (double (*func) (double x));
+        ]], [[
+        take_func(std::$1);
+        ]])],
+      [eval "octave_cv_func_cmath_$ac_safe=yes"],
+      [eval "octave_cv_func_cmath_$ac_safe=no"])
     AC_LANG_POP(C++)
   ])
-  if eval "test \"`echo '$octave_cv_cxx_flag_'$ac_safe`\" = yes"; then
-    AC_MSG_RESULT(yes)
-    ifelse([$2], , [
-      CXXFLAGS="$CXXFLAGS $1"
-      AC_MSG_RESULT([adding $1 to CXXFLAGS])], [$2])
-  else
-    AC_MSG_RESULT(no)
-    ifelse([$3], , , [$3])
+  if eval "test \"`echo '$octave_cv_func_cmath_'$ac_safe`\" = yes"; then
+    AC_DEFINE(AS_TR_CPP([[HAVE_CMATH_][$1]]), 1,
+      [Define to 1 if <cmath> provides $1.])
+  fi
+
+  AC_CACHE_CHECK([for std::$1 (float variant) in <cmath>],
+    [octave_cv_func_cmath_f$ac_safe],
+    [AC_LANG_PUSH(C++)
+    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+        #include <cmath>
+        void take_func (bool (*func) (float x));
+        void take_func (int (*func) (float x));
+        void take_func (float (*func) (float x));
+        ]], [[
+        take_func(std::$1);
+        ]])],
+      [eval "octave_cv_func_cmath_f$ac_safe=yes"],
+      [eval "octave_cv_func_cmath_f$ac_safe=no"])
+    AC_LANG_POP(C++)
+  ])
+  if eval "test \"`echo '$octave_cv_func_cmath_f'$ac_safe`\" = yes"; then
+    AC_DEFINE(AS_TR_CPP([[HAVE_CMATH_][$1][F]]), 1,
+      [Define to 1 if <cmath> provides float variant of $1.])
   fi
 ])
 dnl
-dnl Check to see if Fortran compiler handles FLAG command line option.  If
-dnl two arguments are specified, execute the second arg as shell
-dnl commands.  Otherwise, add FLAG to FFLAGS if the compiler accepts
-dnl the flag.
+dnl Check if Fortran compiler has the intrinsic function ISNAN.
 dnl
-dnl OCTAVE_F77_FLAG
-AC_DEFUN([OCTAVE_F77_FLAG], [
-  ac_safe=`echo "$1" | sed 'y%./+-:=%__p___%'`
-  AC_MSG_CHECKING([whether ${F77-g77} accepts $1])
-  AC_CACHE_VAL(octave_cv_f77_flag_$ac_safe, [
-    AC_LANG_PUSH(Fortran 77)
-    XFFLAGS="$FFLAGS"
-    FFLAGS="$FFLAGS $1"
-    AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],
-      eval "octave_cv_f77_flag_$ac_safe=yes",
-      eval "octave_cv_f77_flag_$ac_safe=no")
-    FFLAGS="$XFFLAGS"
-    AC_LANG_POP(Fortran 77)
-  ])
-  if eval "test \"`echo '$octave_cv_f77_flag_'$ac_safe`\" = yes"; then
-    AC_MSG_RESULT(yes)
-    ifelse([$2], , [
-      FFLAGS="$FFLAGS $1"
-      AC_MSG_RESULT([adding $1 to FFLAGS])], [$2])
-  else
-    AC_MSG_RESULT(no)
-    ifelse([$3], , , [$3])
-  fi
-])
-dnl
-dnl Check to see whether Fortran compiler has the intrinsic function ISNAN.
-dnl
-AC_DEFUN([OCTAVE_CHECK_FORTRAN_HAVE_ISNAN], [
-  AC_LANG_PUSH(Fortran 77)
+AC_DEFUN([OCTAVE_CHECK_FUNC_FORTRAN_ISNAN], [
   AC_CACHE_CHECK([whether $F77 has the intrinsic function ISNAN],
-                 [octave_cv_fortran_have_isnan],
-[AC_COMPILE_IFELSE(
-[      program foo
+    [octave_cv_func_fortran_isnan],
+    [AC_LANG_PUSH(Fortran 77)
+    AC_COMPILE_IFELSE(
+[[      program foo
       implicit none
       real x
       double precision y
       if (isnan(x)) then
-         print *, 'x is NaN'
+        print *, 'x is NaN'
       end if
       if (isnan(y)) then
-         print *, 'y is NaN'
+        print *, 'y is NaN'
       end if
-      end program], [octave_cv_fortran_have_isnan=yes], [octave_cv_fortran_have_isnan=no]
-)])
-  AC_LANG_POP(Fortran 77)      
+      end program
+]],
+      octave_cv_func_fortran_isnan=yes, octave_cv_func_fortran_isnan=no)
+    AC_LANG_POP(Fortran 77)      
+  ])
 ])
 dnl
-dnl Check to see whether the default Fortran INTEGER is 64 bits wide.
+dnl Check if function gluTessCallback is called with "(...)".
 dnl
-AC_DEFUN([OCTAVE_CHECK_FORTRAN_INTEGER_SIZE], [
-  octave_fintsize_save_FFLAGS="$FFLAGS"
-  FFLAGS="$FFLAGS $F77_INTEGER_8_FLAG"
-  AC_LANG_PUSH(Fortran 77)
-  AC_CACHE_CHECK([whether $F77 generates correct size integers],
-                 [octave_cv_fortran_integer_size],
-[AC_COMPILE_IFELSE(
-[      subroutine foo(n, in, out)
-      integer n, in(n), out(n)
-      integer i
-      do 10 i = 1, n
-        out(i) = in(i)
-   10 continue
-      return
-      end],
-[mv conftest.$ac_objext fintsize.$ac_objext
-
-  octave_fintsize_save_LIBS="$LIBS"
-  LIBS="fintsize.$ac_objext $[]_AC_LANG_PREFIX[]LIBS"
-  AC_LANG_PUSH(C)dnl
-  AC_RUN_IFELSE([AC_LANG_PROGRAM([[#include <assert.h>]], [[
-#ifdef USE_64_BIT_IDX_T
-#if IDX_TYPE_LONG
-  typedef long octave_idx_type;
-#else
-  typedef int octave_idx_type;
-#endif
-#else
-  typedef int octave_idx_type;
-#endif
-  octave_idx_type n = 2;
-  octave_idx_type in[2];
-  octave_idx_type out[2];
-  in[0] = 13;
-  in[0] = 42;
-  F77_FUNC(foo,FOO) (&n, &in, &out);
-  assert (in[0] == out[0] && in[1] == out[1]);
-]])],
-  [octave_cv_fortran_integer_size=yes],
-  [octave_cv_fortran_integer_size=no],
-  [octave_cv_fortran_integer_size=yes])
-  AC_LANG_POP(C)dnl
-  LIBS="$octave_fintsize_save_LIBS"
-rm -f conftest.$ac_objext fintsize.$ac_objext
-], [
-  rm -f conftest.$ac_objext
-  AC_MSG_FAILURE([cannot compile a simple Fortran program])
-  octave_cv_fortran_integer_size=no])])
-  AC_LANG_POP(Fortran 77)
-  FFLAGS="$octave_fintsize_save_FFLAGS"
+AC_DEFUN([OCTAVE_CHECK_FUNC_GLUTESSCALLBACK_THREEDOTS], [
+  AC_CACHE_CHECK([whether gluTessCallback is called with "(...)"],
+    [octave_cv_func_glutesscallback_threedots],
+    [AC_LANG_PUSH(C++)
+    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+        #ifdef HAVE_GL_GLU_H
+        # include <GL/glu.h>
+        #elif defined HAVE_OPENGL_GLU_H || defined HAVE_FRAMEWORK_OPENGL
+        # include <OpenGL/glu.h>
+        #endif
+        ]], [[
+        GLvoid (*func)(...);
+        gluTessCallback(0, 0, func);
+        ]])],
+      octave_cv_func_glutesscallback_threedots=yes,
+      octave_cv_func_glutesscallback_threedots=no)
+    AC_LANG_POP(C++)
+  ])
+  if test $octave_cv_func_glutesscallback_threedots = "yes"; then
+    AC_DEFINE(HAVE_GLUTESSCALLBACK_THREEDOTS, 1, 
+      [Define to 1 if gluTessCallback is called with (...).])
+  fi
 ])
 dnl
-dnl
-dnl Adds warnings to final summary
+dnl Check whether HDF5 library has version 1.6 API functions.
 dnl
-AC_DEFUN([OCTAVE_CONFIGURE_WARNING], [
-  AC_MSG_WARN([$][$1])
-  m4_set_add([summary_warning_list], [$1])
+AC_DEFUN([OCTAVE_CHECK_HDF5_HAS_VER_16_API], [
+  AC_CACHE_CHECK([whether HDF5 library has enforced version 1.6 API],
+    [octave_cv_hdf5_has_ver_16_api],
+    [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+      #include <hdf5.h>
+      ]], [[
+      H5Eset_auto (0, 0);
+      ]])],
+      octave_cv_hdf5_has_ver_16_api=yes,
+      octave_cv_hdf5_has_ver_16_api=no)
+  ])
+  if test "$octave_cv_hdf5_has_ver_16_api" != "yes"; then
+    AC_DEFINE(HAVE_HDF5_18, 1, [Define to 1 if >=HDF5-1.8 is available.])
+  fi
 ])
 dnl
-dnl
-dnl Prints final summary
+dnl Usage:
+dnl OCTAVE_CHECK_LIB(LIBRARY, DOC-NAME, WARN-MSG, HEADER, FUNC,
+dnl                  LANG, DOC-STRING, EXTRA-CHECK)
 dnl
-AC_DEFUN([OCTAVE_CONFIGURE_WARNING_SUMMARY], [
-  m4_set_foreach([summary_warning_list], [elt], [
-    if test -n "[$]elt"; then
-      AC_MSG_WARN([$]elt)
-      warn_msg_printed=true
-    fi])
-])
-dnl
-dnl
-dnl
-dnl OCTAVE_CHECK_LIBRARY(LIBRARY, DOC-NAME, WARN-MSG, HEADER, FUNC,
-dnl                      LANG, DOC-STRING, EXTRA-CHECK)
-AC_DEFUN([OCTAVE_CHECK_LIBRARY], [
+AC_DEFUN([OCTAVE_CHECK_LIB], [
   AC_ARG_WITH([$1-includedir],
     [AS_HELP_STRING([--with-$1-includedir=DIR],
       [look for $2 include files in DIR])],
@@ -508,34 +255,34 @@
   m4_set_add([summary_warning_list], [warn_$1])
 
   if test -n "$m4_toupper([$1])_LIBS"; then
-    octave_check_library_save_CPPFLAGS="$CPPFLAGS"
+    octave_check_lib_save_CPPFLAGS="$CPPFLAGS"
     CPPFLAGS="$m4_toupper([$1])_CPPFLAGS $CPPFLAGS"
     m4_ifnblank([$6], [AC_LANG_PUSH($6)])
     octave_$1_check_for_lib=false
     m4_ifblank([$4], [octave_$1_check_for_lib=true],
                [AC_CHECK_HEADERS($4, [octave_$1_check_for_lib=true; break])])
     if $octave_$1_check_for_lib; then
-      octave_check_library_save_LDFLAGS="$LDFLAGS"
+      octave_check_lib_save_LDFLAGS="$LDFLAGS"
       LDFLAGS="$m4_toupper([$1])_LDFLAGS $LDFLAGS"
-      octave_check_library_save_LIBS="$LIBS"
+      octave_check_lib_save_LIBS="$LIBS"
       LIBS="$m4_toupper([$1])_LIBS $LIBS"
       octave_$1_ok=no
       AC_MSG_CHECKING([for $5 in $m4_toupper([$1])_LIBS])
       AC_LINK_IFELSE([AC_LANG_CALL([], [$5])],
-	[octave_$1_ok=yes])
+        [octave_$1_ok=yes])
       AC_MSG_RESULT([$octave_$1_ok])
       if test $octave_$1_ok = yes; then
-	m4_ifblank([$8], [
-	  warn_$1=
-	  AC_DEFINE([HAVE_]m4_toupper([$1]), 1,
-            [Define if $2 is available.])
-	  [TEXINFO_]m4_toupper([$1])="@set [HAVE_]m4_toupper([$1])"], [$8])
+        m4_ifblank([$8], [
+          warn_$1=
+          AC_DEFINE([HAVE_]m4_toupper([$1]), 1,
+            [Define to 1 if $2 is available.])
+          [TEXINFO_]m4_toupper([$1])="@set [HAVE_]m4_toupper([$1])"], [$8])
       fi
-      LIBS="$octave_check_library_save_LIBS"
-      LDFLAGS="$octave_check_library_save_LDFLAGS"
+      LIBS="$octave_check_lib_save_LIBS"
+      LDFLAGS="$octave_check_lib_save_LDFLAGS"
     fi
     m4_ifnblank([$6], [AC_LANG_POP($6)])
-    CPPFLAGS="$octave_check_library_save_CPPFLAGS"
+    CPPFLAGS="$octave_check_lib_save_CPPFLAGS"
   fi
   AC_SUBST(m4_toupper([$1])_LIBS)
   AC_SUBST([TEXINFO_]m4_toupper([$1]))
@@ -545,615 +292,18 @@
   fi
 ])
 dnl
-dnl Check for flex
-dnl
-AC_DEFUN([OCTAVE_PROG_FLEX], [
-### For now, don't define LEXLIB to be -lfl -- we don't use anything in
-### it, and it might not be installed.
-###
-### Also make sure that we generate an interactive scanner if we are
-### using flex.
-  AC_PROG_LEX
-  case "$LEX" in
-    flex*)
-      LFLAGS="-I"
-      AC_MSG_RESULT([defining LFLAGS to be $LFLAGS])
-      LEXLIB=
-    ;;
-    *)
-      LEX='$(top_srcdir)/build-aux/missing flex'
-      warn_flex="
-
-I didn't find flex, but it's only a problem if you need to reconstruct
-lex.cc, which is the case if you're building from VCS sources.
-"
-      OCTAVE_CONFIGURE_WARNING([warn_flex])
-    ;;
-  esac
-  AC_SUBST(LFLAGS)
-])
-dnl
-dnl Check for bison
-dnl
-AC_DEFUN([OCTAVE_PROG_BISON], [
-  AC_PROG_YACC
-  case "$YACC" in
-    bison*)
-    ;;
-    *)
-      YACC='$(top_srcdir)/build-aux/missing bison'
-      warn_bison="
-
-I didn't find bison, but it's only a problem if you need to
-reconstruct parse.cc, which is the case if you're building from VCS
-sources.
-
-"
-      OCTAVE_CONFIGURE_WARNING([warn_bison])
-    ;;
-  esac
-])
-dnl
-dnl What pager should we use?
-dnl
-AC_DEFUN([OCTAVE_PROG_PAGER],
-[if test "$cross_compiling" = yes; then
-  DEFAULT_PAGER=less
-  AC_MSG_RESULT([assuming $DEFAULT_PAGER exists on $canonical_host_type host])
-  AC_SUBST(DEFAULT_PAGER)
-else
-  octave_possible_pagers="less more page pg"
-  case "$canonical_host_type" in
-    *-*-cygwin* | *-*-mingw32* | *-*-msdosmsvc)
-      octave_possible_pagers="$octave_possible_pagers more.com"
-    ;;
-  esac
-
-  AC_CHECK_PROGS(DEFAULT_PAGER, $octave_possible_pagers, [])
-  if test -z "$DEFAULT_PAGER"; then
-    warn_less="I couldn't find \`less', \`more', \`page', or \`pg'"
-    OCTAVE_CONFIGURE_WARNING([warn_less])
-  fi
-fi
-])
-dnl
-dnl Does gnuplot exist?
-dnl
-AC_DEFUN([OCTAVE_PROG_GNUPLOT], [
-gp_names="gnuplot"
-gp_default="gnuplot"
-if test "$cross_compiling" = yes; then
-  GNUPLOT="$gp_default"
-  AC_MSG_RESULT([assuming $GNUPLOT exists on $canonical_host_type host])
-else
-  AC_CHECK_PROGS(GNUPLOT, [$gp_names])
-  if test -z "$GNUPLOT"; then
-    warn_gnuplot=yes
-
-    GNUPLOT="$gp_default"
-    warn_gnuplot = "
-
-gnuplot not found. It isn't necessary to have gnuplot installed, but
-without native graphics or gnuplot you won't be able to use any of
-Octave's plotting commands.
-
-"
-    OCTAVE_CONFIGURE_WARNING([warn_gnuplot])
-  fi
-fi
-AC_SUBST(GNUPLOT)
-])
-dnl
-dnl Is gperf installed?
-dnl
-dnl OCTAVE_PROG_GPERF
-AC_DEFUN([OCTAVE_PROG_GPERF], [
-  AC_CHECK_PROG(GPERF, gperf, gperf, [])
-  if test -z "$GPERF"; then
-    GPERF='$(top_srcdir)/build-aux/missing gperf'
-    warn_gperf="
-
-I didn't find gperf, but it's only a problem if you need to
-reconstruct oct-gperf.h 
-"
-    OCTAVE_CONFIGURE_WARNING([warn_gperf])
-  fi
-  AC_SUBST(GPERF)
-])
-dnl
-dnl Is ghostscript installed?
-dnl
-dnl OCTAVE_PROG_GHOSTSCRIPT
-AC_DEFUN([OCTAVE_PROG_GHOSTSCRIPT], [
-  case "$canonical_host_type" in
-    *-*-mingw* | *-*-msdosmsvc)
-      gs_names="gswin32c gs mgs"
-    ;;
-    *)
-      gs_names="gs"
-    ;;
-  esac
-  AC_CHECK_PROGS(GHOSTSCRIPT, [$gs_names])
-  if test -z "$GHOSTSCRIPT"; then
-    GHOSTSCRIPT='$(top_srcdir)/build-aux/missing gs'
-    warn_ghostscript="
-
-I didn't find ghostscript, so reconstructing figures for the manual
-will fail, and saving graphics in some output formats will fail when
-using Octave
-"
-
-    OCTAVE_CONFIGURE_WARNING([warn_ghostscript])
-  fi
-  AC_SUBST(GHOSTSCRIPT)
-])
-dnl
-dnl Is texi2dvi installed?
-dnl
-dnl OCTAVE_PROG_TEXI2DVI
-AC_DEFUN([OCTAVE_PROG_TEXI2DVI], [
-  AC_CHECK_PROG(TEXI2DVI, texi2dvi, texi2dvi, [])
-  if test -z "$TEXI2DVI"; then
-    TEXI2DVI='$(top_srcdir)/build-aux/missing texi2dvi'
-    warn_texi2dvi="
-
-I didn't find texi2dvi, but it's only a problem if you need to
-reconstruct the DVI version of the manual
-"
-    OCTAVE_CONFIGURE_WARNING([warn_texi2dvi])
-  fi
-  AC_SUBST(TEXI2DVI)
-])
-dnl
-dnl Is texi2pdf installed?
-dnl
-dnl OCTAVE_PROG_TEXI2PDF
-AC_DEFUN([OCTAVE_PROG_TEXI2PDF], [
-  AC_REQUIRE([OCTAVE_PROG_TEXI2DVI])
-  AC_CHECK_PROG(TEXI2PDF, texi2pdf, texi2pdf, [])
-  if test -z "$TEXI2PDF"; then
-    missing=true;
-    if test -n "$TEXI2DVI"; then
-      TEXI2PDF="$TEXI2DVI --pdf"
-      missing=false;
-    fi
-  else
-    missing=false;
-  fi
-  if $missing; then
-    TEXI2PDF='$(top_srcdir)/build-aux/missing texi2pdf'
-    warn_texi2pdf="
-
-I didn't find texi2pdf, but it's only a problem if you need to
-reconstruct the PDF version of the manual
-"
-    OCTAVE_CONFIGURE_WARNING([warn_texi2pdf])
-  fi
-  AC_SUBST(TEXI2PDF)
-])
-dnl
-dnl See if the C++ library is ISO compliant.
-dnl FIXME: This is obviously very simplistic, and trivially fooled.
-dnl
-dnl OCTAVE_CXX_ISO_COMPLIANT_LIBRARY
-AC_DEFUN([OCTAVE_CXX_ISO_COMPLIANT_LIBRARY], [
-  AC_REQUIRE([AC_PROG_CXX])
-  AC_MSG_CHECKING([if C++ library is ISO compliant])
-  AC_CACHE_VAL(octave_cv_cxx_iso_compliant_library, [
-    AC_LANG_PUSH(C++)
-    rm -f conftest.h
-### Omitting cwctype for now, since it is broken with gcc-3.0.x and
-### possibly other versions...
-    for inc in algorithm bitset cassert cctype cerrno cfloat ciso646 \
-	climits clocale cmath complex csetjmp csignal cstdarg cstddef \
-	cstdio cstdlib cstring ctime cwchar deque exception \
-	fstream functional iomanip ios iosfwd iostream istream iterator \
-	limits list locale map memory new numeric ostream queue set \
-	sstream stack stdexcept streambuf string strstream typeinfo \
-	utility valarray vector; do
-      echo "#include <$inc>" >> conftest.h
-    done
-    AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include "conftest.h"]],
-      [[std::bitset<50> flags;
-        flags.set();
-        int digits = std::numeric_limits<unsigned long>::digits;
-        digits = 0;]])],
-      [octave_cv_cxx_iso_compliant_library=yes],
-      [octave_cv_cxx_iso_compliant_library=no])
-    AC_LANG_POP(C++)
-  ])
-  AC_MSG_RESULT([$octave_cv_cxx_iso_compliant_library])
-  if test $octave_cv_cxx_iso_compliant_library = yes; then
-    AC_DEFINE(CXX_ISO_COMPLIANT_LIBRARY, 1, [Define if your C++ runtime library is ISO compliant.])
-  fi
-])
-dnl
-dnl Allow the user disable support for command line editing using GNU
-dnl readline.
-dnl
-dnl OCTAVE_ENABLE_READLINE
-AC_DEFUN([OCTAVE_ENABLE_READLINE], [
-  USE_READLINE=true
-  READLINE_LIBS=
-  AC_ARG_ENABLE(readline,
-    [  --enable-readline       use readline library (default is yes)],
-    [if test "$enableval" = no; then
-       USE_READLINE=false
-       warn_readline="command editing and history features require GNU Readline"
-     fi])
-  if $USE_READLINE; then
-    save_LIBS="$LIBS"
-    LIBS="$TERM_LIBS"
-    AC_CHECK_LIB(readline, rl_set_keyboard_input_timeout, [
-      READLINE_LIBS="-lreadline"
-      AC_DEFINE(USE_READLINE, 1, [Define to use the readline library.])
-    ], [
-      AC_MSG_WARN([I need GNU Readline 4.2 or later])
-      AC_MSG_ERROR([this is fatal unless you specify --disable-readline])
-    ])
-    LIBS="$save_LIBS"
-  fi
-  AC_SUBST(READLINE_LIBS)
-])
-dnl
-dnl Check to see if C++ reintrepret cast works for function pointers.
-dnl
-dnl OCTAVE_CXX_BROKEN_REINTERPRET_CAST
-dnl
-AC_DEFUN([OCTAVE_CXX_BROKEN_REINTERPRET_CAST], [
-  AC_REQUIRE([AC_PROG_CXX])
-  AC_LANG_PUSH(C++)
-  AC_CACHE_CHECK([for broken C++ reinterpret_cast],
-    octave_cv_cxx_broken_reinterpret_cast, [
-    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <cmath>]], [[
-      typedef double (*fptr) (double);
-      fptr psin = sin;
-      void *vptr = reinterpret_cast<void *> (psin);
-      psin = reinterpret_cast<fptr> (vptr);]])],
-      octave_cv_cxx_broken_reinterpret_cast=no,
-      octave_cv_cxx_broken_reinterpret_cast=yes)])
-  if test $octave_cv_cxx_broken_reinterpret_cast = yes ; then
-    AC_DEFINE(CXX_BROKEN_REINTERPRET_CAST, 1, [Define if C++ reinterpret_cast fails for function pointers.])
-fi
-  AC_LANG_POP(C++)])
-dnl
-dnl Find find.
-dnl
-# Prefer GNU find if found.
-AN_MAKEVAR([FIND],  [OCTAVE_PROG_FIND])
-AN_PROGRAM([gfind], [OCTAVE_PROG_FIND])
-AN_PROGRAM([find],  [OCTAVE_PROG_FIND])
-AC_DEFUN([OCTAVE_PROG_FIND],
-[AC_CHECK_PROGS(FIND, gfind find, )])
-dnl
-dnl Find sed.
-dnl
-# Check for a fully-functional sed program, that truncates
-# as few characters as possible and that supports "\(X\|Y\)"
-# style regular expression alternation.  Prefer GNU sed if found.
-AC_DEFUN([OCTAVE_PROG_SED],
-[AC_MSG_CHECKING([for a usable sed])
-if test -z "$SED"; then
-  AC_CACHE_VAL(ac_cv_path_sed, [
-  # Loop through the user's path and test for sed and gsed.
-  # Then use that list of sed's as ones to test for truncation.
-  _AS_PATH_WALK([$PATH],
-    [for ac_prog in sed gsed; do
-      for ac_exec_ext in '' $ac_executable_extensions; do
-	if AS_EXECUTABLE_P(["$as_dir/$ac_prog$ac_exec_ext"]); then
-	  _sed_list="$_sed_list $as_dir/$ac_prog$ac_exec_ext"
-	fi
-      done
-    done
-    ])
-    AS_TMPDIR(sed)
-    _max=0
-    _count=0
-    # Add /usr/xpg4/bin/sed as it is typically found on Solaris
-    # along with /bin/sed that truncates output.
-    for _sed in $_sed_list /usr/xpg4/bin/sed; do
-      test ! -f ${_sed} && break
-      cat /dev/null > "$tmp/sed.in"
-      _count=0
-      echo $ECHO_N "0123456789$ECHO_C" >"$tmp/sed.in"
-      # Check for GNU sed and select it if it is found.
-      if "${_sed}" --version 2>&1 < /dev/null | egrep '(GNU)' > /dev/null; then
-	octave_cv_path_sed=${_sed}
-	break;
-      fi
-      # Reject if RE alternation is not handled.
-      if test "`echo 'this and that' | ${_sed} -n 's/\(this\|that\).*$/\1/p'`" != "this"; then
-        continue;
-      fi
-      while true; do
-	cat "$tmp/sed.in" "$tmp/sed.in" >"$tmp/sed.tmp"
-	mv "$tmp/sed.tmp" "$tmp/sed.in"
-	cp "$tmp/sed.in" "$tmp/sed.nl"
-	echo >>"$tmp/sed.nl"
-	${_sed} -e 's/a$//' < "$tmp/sed.nl" >"$tmp/sed.out" || break
-	cmp -s "$tmp/sed.out" "$tmp/sed.nl" || break
-	# 10000 chars as input seems more than enough
-	test $_count -gt 10 && break
-	_count=`expr $_count + 1`
-	if test $_count -gt $_max; then
-	  _max=$_count
-	  octave_cv_path_sed=$_sed
-	fi
-      done
-    done
-    rm -rf "$tmp"
-  ])
-  SED=$octave_cv_path_sed
-  if test -z "$SED"; then
-    AC_MSG_ERROR([no usable version of sed found])
-  fi
-fi
-AC_SUBST(SED)
-AC_MSG_RESULT([$SED])
-])
-dnl
-dnl Find Perl.
-dnl
-dnl OCTAVE_PROG_PERL
-AC_DEFUN([OCTAVE_PROG_PERL],
-[AC_CHECK_PROG(PERL, perl, perl, [])
-  AC_SUBST(PERL)
-])
-dnl
-dnl Find Python.
-dnl
-dnl OCTAVE_PROG_PYTHON
-AC_DEFUN([OCTAVE_PROG_PYTHON],
-[AC_CHECK_PROG(PYTHON, python, python, [])
-  AC_SUBST(PYTHON)
-])
-dnl
-dnl Find desktop-file-install.
-dnl
-dnl OCTAVE_PROG_DESKTOP_FILE_INSTALL
-AC_DEFUN([OCTAVE_PROG_DESKTOP_FILE_INSTALL],
-[AC_CHECK_PROG(DESKTOP_FILE_INSTALL, desktop-file-install, desktop-file-install, [])
-  AC_SUBST(DESKTOP_FILE_INSTALL)
-])
-dnl
-dnl Check for IEEE 754 data format.
-dnl
-AC_DEFUN([OCTAVE_IEEE754_DATA_FORMAT],
-[AC_MSG_CHECKING([for IEEE 754 data format])
-AC_CACHE_VAL(octave_cv_ieee754_data_format,
-[AC_RUN_IFELSE([AC_LANG_SOURCE([[
-int
-main (void) 
-{
-  typedef union { unsigned char c[8]; double d; } ieeebytes;
-   
-  ieeebytes l = {0x1c, 0xbc, 0x6e, 0xf2, 0x54, 0x8b, 0x11, 0x43};
-  ieeebytes b = {0x43, 0x11, 0x8b, 0x54, 0xf2, 0x6e, 0xbc, 0x1c};
-
-  return l.d != 1234567891234567.0 && b.d != 1234567891234567.0;
-}]])],
-  octave_cv_ieee754_data_format=yes,
-  octave_cv_ieee754_data_format=no,
-  octave_cv_ieee754_data_format=yes)])
-if test "$cross_compiling" = yes; then
-  AC_MSG_RESULT([$octave_cv_ieee754_data_format assumed for cross compilation])
-else
-  AC_MSG_RESULT([$octave_cv_ieee754_data_format])
-fi
-if test "$octave_cv_ieee754_data_format" = yes; then
-  AC_DEFINE(HAVE_IEEE754_DATA_FORMAT, 1, [Define if your system uses IEEE 754 data format.])
-else
-  ## If the format is unknown, then you will probably not have a
-  ## useful system, so we will abort here.  Anyone wishing to
-  ## experiment with building Octave on a system without IEEE
-  ## floating point should be capable of removing this check and
-  ## the one in the octave_ieee_init function in liboctave/lo-ieee.cc.
-  AC_MSG_ERROR([IEEE 754 data format required for building Octave])
-fi
-])
-dnl
-dnl Check for UMFPACK seperately split complex matrix and RHS. Note
-dnl that as umfpack.h can be in three different places, rather than
-dnl include it, just declare the functions needed.
-dnl
-dnl Assumes that the check for umfpack has already been performed.
-dnl
-AC_DEFUN([OCTAVE_UMFPACK_SEPERATE_SPLIT],
-[AC_MSG_CHECKING([for UMFPACK seperate complex matrix and rhs split])
-AC_CACHE_VAL(octave_cv_umfpack_seperate_split,
-[AC_RUN_IFELSE([AC_LANG_SOURCE([[
-#include <stdlib.h>
-#if defined (HAVE_UFSPARSE_UMFPACK_h)
-#include <ufsparse/umfpack.h>
-#elif defined (HAVE_UMFPACK_UMFPACK_H)
-#include <umfpack/umfpack.h>
-#elif defined (HAVE_UMFPACK_H)
-#include <umfpack.h>
-#endif
-int n = 5;
-int Ap[] = {0, 2, 5, 9, 10, 12};
-int Ai[]  = {0, 1, 0, 2, 4, 1, 2, 3, 4, 2, 1, 4};
-double Ax[] = {2., 0., 3., 0., 3., 0., -1., 0., 4., 0., 4., 0., 
-	      -3., 0., 1., 0., 2., 0., 2., 0., 6., 0., 1., 0.};
-double br[] = {8., 45., -3., 3., 19.};
-double bi[] = {0., 0., 0., 0., 0.};
-int main (void)
-{
-  double *null = (double *) NULL ;
-  double *x = (double *)malloc (2 * n * sizeof(double));
-  int i ;
-  void *Symbolic, *Numeric ;
-  (void) umfpack_zi_symbolic (n, n, Ap, Ai, Ax, null, &Symbolic, null, null) ;
-  (void) umfpack_zi_numeric (Ap, Ai, Ax, null, Symbolic, &Numeric, null, null) ;
-  umfpack_zi_free_symbolic (&Symbolic) ;
-  (void) umfpack_zi_solve (0, Ap, Ai, Ax, null, x, null, br, bi, 
-		Numeric, null, null) ;
-  umfpack_zi_free_numeric (&Numeric) ;
-  for (i = 0; i < n; i++, x+=2) 
-    if (fabs(*x - i - 1.) > 1.e-13)
-      return (1);
-  return (0) ;
-}
-]])],
-  octave_cv_umfpack_seperate_split=yes,
-  octave_cv_umfpack_seperate_split=no,
-  octave_cv_umfpack_seperate_split=yes)])
-if test "$cross_compiling" = yes; then
-  AC_MSG_RESULT([$octave_cv_umfpack_seperate_split assumed for cross compilation])
-else
-  AC_MSG_RESULT([$octave_cv_umfpack_seperate_split])
-fi
-if test "$octave_cv_umfpack_seperate_split" = yes; then
-  AC_DEFINE(UMFPACK_SEPARATE_SPLIT, 1, [Define if the UMFPACK Complex solver allow matrix and RHS to be split independently])
-fi
-])
-dnl
-dnl Check whether using HDF5 DLL under Windows. This is done by
-dnl testing for a data symbol in the HDF5 library, which would
-dnl requires the definition of _HDF5USEDL_ under MSVC compiler.
-dnl
-AC_DEFUN([OCTAVE_HDF5_DLL], [
-  AC_CACHE_CHECK([if _HDF5USEDLL_ needs to be defined],octave_cv_hdf5_dll, [
-    AC_TRY_LINK([#include <hdf5.h>], [hid_t x = H5T_NATIVE_DOUBLE; return x],
-      octave_cv_hdf5_dll=no, [
-      save_CFLAGS="$CFLAGS"
-      CFLAGS="$CFLAGS -DWIN32 -D_HDF5USEDLL_"
-      save_LIBS="$LIBS"
-      LIBS="$HDF5_LIBS $LIBS"
-      AC_TRY_LINK([#include <hdf5.h>], [hid_t x = H5T_NATIVE_DOUBLE; return x],
-        octave_cv_hdf5_dll=yes,
-	octave_cv_hdf5_dll=no)
-      CFLAGS="$save_CFLAGS"
-      LIBS="$save_LIBS"])])
-  if test "$octave_cv_hdf5_dll" = yes; then
-    AC_DEFINE(_HDF5USEDLL_, 1, [Define if using HDF5 dll (Win32)])
-  fi])
-dnl
-dnl Check whether HDF5 library has version 1.6 API functions.
-dnl
-AC_DEFUN([OCTAVE_HDF5_HAS_ENFORCED_16_API], [
-  AC_CACHE_CHECK([whether HDF5 library has enforced version 1.6 API],
-    octave_cv_hdf5_has_enforced_16_api, [
-    AC_TRY_LINK([
-#include <hdf5.h>
-], [
-  H5Eset_auto (0, 0);], [
-      octave_cv_hdf5_has_enforced_16_api=yes], [
-      octave_cv_hdf5_has_enforced_16_api=no])])
-  if test "$octave_cv_hdf5_has_enforced_16_api" != "yes"; then
-    AC_DEFINE(HAVE_HDF5_18, 1, [Define if >=HDF5-1.8 is available.])
-  fi
-])
-dnl
-dnl Check for the QHull version.
-dnl
-AC_DEFUN([OCTAVE_CHECK_QHULL_VERSION],
-  [AC_CACHE_CHECK([for qh_version in $QHULL_LIBS],
-    octave_cv_lib_qhull_version,  [
-      AC_LINK_IFELSE([AC_LANG_PROGRAM([[
-#include <stdio.h>
-#if defined (HAVE_LIBQHULL_LIBQHULL_H)
-# include <libqhull/libqhull.h>
-# include <libqhull/qset.h>
-# include <libqhull/geom.h>
-# include <libqhull/poly.h>
-# include <libqhull/io.h>
-#elif defined (HAVE_QHULL_LIBQHULL_H) || defined (HAVE_QHULL_QHULL_H)
-# if defined (HAVE_QHULL_LIBQHULL_H)
-#  include <qhull/libqhull.h>
-# else
-#  include <qhull/qhull.h>
-# endif
-# include <qhull/qset.h>
-# include <qhull/geom.h>
-# include <qhull/poly.h>
-# include <qhull/io.h>
-#elif defined (HAVE_LIBQHULL_H) || defined (HAVE_QHULL_H)
-# if defined (HAVE_LIBQHULL_H)
-#  include <libqhull.h>
-# else
-#  include <qhull.h>
-# endif
-# include <qset.h>
-# include <geom.h>
-# include <poly.h>
-# include <io.h>
-#endif
-]], [[
-const char *tmp = qh_version;
-]])], [octave_cv_lib_qhull_version=yes], [octave_cv_lib_qhull_version=no])])
-  if test "$octave_cv_lib_qhull_version" = no; then
-    AC_DEFINE(NEED_QHULL_VERSION, 1,
-      [Define if the QHull library needs a qh_version variable defined.])
-  fi
-])
-dnl
-dnl Check whether QHull works (does not crash)
-dnl
-AC_DEFUN([OCTAVE_CHECK_QHULL_OK],
-  [AC_CACHE_CHECK([whether the qhull library works],
-    octave_cv_lib_qhull_ok, [
-      AC_RUN_IFELSE([AC_LANG_PROGRAM([[
-#include <stdio.h>
-#if defined (HAVE_LIBQHULL_LIBQHULL_H)
-# include <libqhull/libqhull.h>
-# include <libqhull/qset.h>
-# include <libqhull/geom.h>
-# include <libqhull/poly.h>
-# include <libqhull/io.h>
-#elif defined (HAVE_QHULL_LIBQHULL_H) || defined (HAVE_QHULL_QHULL_H)
-# if defined (HAVE_QHULL_LIBQHULL_H)
-#  include <qhull/libqhull.h>
-# else
-#  include <qhull/qhull.h>
-# endif
-# include <qhull/qset.h>
-# include <qhull/geom.h>
-# include <qhull/poly.h>
-# include <qhull/io.h>
-#elif defined (HAVE_LIBQHULL_H) || defined (HAVE_QHULL_H)
-# if defined (HAVE_LIBQHULL_H)
-#  include <libqhull.h>
-# else
-#  include <qhull.h>
-# endif
-# include <qset.h>
-# include <geom.h>
-# include <poly.h>
-# include <io.h>
-#endif
-#ifdef NEED_QHULL_VERSION
-char *qh_version = "version";
-#endif
-]], [[
-int dim = 2;
-int n = 4;
-coordT points[8] = { -0.5, -0.5, -0.5, 0.5, 0.5, -0.5, 0.5, 0.5 };
-boolT ismalloc = 0;
-return qh_new_qhull (dim, n, points, ismalloc, "qhull ", 0, stderr); 
-]])],
-  [octave_cv_lib_qhull_ok=yes],
-  [octave_cv_lib_qhull_ok=no],
-  [octave_cv_lib_qhull_ok=yes])])
-  if test "$octave_cv_lib_qhull_ok" = "yes"; then
-    $1
-  else
-    $2
-  fi
-])
-dnl
-dnl Check whether ARPACK works (does not crash)
+dnl Check whether ARPACK works (does not crash).
 dnl
 dnl Using a pure Fortran program doesn't seem to crash when linked
-dnl with the buggy ARPACK library but the C++ program does.  Maybe
-dnl it is the memory allocation that exposes the bug and using statically
+dnl with the buggy ARPACK library but the C++ program does.  Maybe it
+dnl is the memory allocation that exposes the bug and using statically
 dnl allocated arrays in Fortran does not?
 dnl
-AC_DEFUN([OCTAVE_CHECK_ARPACK_OK], [
+AC_DEFUN([OCTAVE_CHECK_LIB_ARPACK_OK], [
   AC_LANG_PUSH(C++)
   AC_CACHE_CHECK([whether the arpack library works],
-    [octave_cv_lib_arpack_ok], [
-      AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+    [octave_cv_lib_arpack_ok],
+    [AC_RUN_IFELSE([AC_LANG_PROGRAM([[
 // External functions from ARPACK library
 extern "C" int
 F77_FUNC (dnaupd, DNAUPD) (int&, const char *, const int&, const char *,
@@ -1269,7 +419,7 @@
   double sigmar = 0.0;
   double sigmai = 0.0;
 
-  // In Octave, this is n*(k+1), but k+2 avoids segfault
+  // In Octave, this is n*(k+1), but n*(k+2) avoids segfault
   double *z = new double [n * (k + 1)];
 
   F77_FUNC (dneupd, DNEUPD) (rvec, "A", sel, dr, di, z, n, sigmar,
@@ -1277,13 +427,16 @@
                              resid, p, v, n, ip, ipntr, workd,
                              workl, lwork, info, 1L, 1L, 2L);
 }
+
 ]], [[
+
   for (int i = 0; i < 10; i++)
     doit ();
-]])],
-  [octave_cv_lib_arpack_ok=yes],
-  [octave_cv_lib_arpack_ok=no],
-  [octave_cv_lib_arpack_ok=yes])])
+    ]])],
+    octave_cv_lib_arpack_ok=yes,
+    octave_cv_lib_arpack_ok=no,
+    octave_cv_lib_arpack_ok=yes)
+  ])
   AC_LANG_POP(C++)
   if test "$octave_cv_lib_arpack_ok" = "yes"; then
     $1
@@ -1292,132 +445,1204 @@
   fi
 ])
 dnl
-dnl Check for OpenGL.  If found, define OPENGL_LIBS
+dnl Check whether using HDF5 DLL under Windows.  This is done by
+dnl testing for a data symbol in the HDF5 library, which would
+dnl require the definition of _HDF5USEDL_ under MSVC compiler.
 dnl
-dnl FIXME -- the following tests should probably check for the
+AC_DEFUN([OCTAVE_CHECK_LIB_HDF5_DLL], [
+  AC_CACHE_CHECK([if _HDF5USEDLL_ needs to be defined],
+    [octave_cv_lib_hdf5_dll],
+    [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+        #include <hdf5.h>
+        ]], [[
+        hid_t x = H5T_NATIVE_DOUBLE;
+        return x
+      ]])],
+      [octave_cv_lib_hdf5_dll=no],
+      [save_CFLAGS="$CFLAGS"
+      CFLAGS="$CFLAGS -DWIN32 -D_HDF5USEDLL_"
+      save_LIBS="$LIBS"
+      LIBS="$HDF5_LIBS $LIBS"
+      AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+          #include <hdf5.h>
+          ]], [[
+          hid_t x = H5T_NATIVE_DOUBLE;
+          return x
+        ]])],
+        octave_cv_lib_hdf5_dll=yes,
+        octave_cv_lib_hdf5_dll=no)
+      CFLAGS="$save_CFLAGS"
+      LIBS="$save_LIBS"
+    ])
+  ])
+  if test "$octave_cv_lib_hdf5_dll" = yes; then
+    AC_DEFINE(_HDF5USEDLL_, 1, [Define to 1 if using HDF5 dll (Win32).])
+  fi
+])
+dnl
+dnl Check for OpenGL.  If found, define OPENGL_LIBS.
+dnl
+dnl FIXME: The following tests should probably check for the
 dnl libraries separately.
 dnl
-dnl FIXME -- should we allow a way to specify a directory for OpenGL
+dnl FIXME: Should we allow a way to specify a directory for OpenGL
 dnl libraries and header files?
 dnl
-AC_DEFUN([OCTAVE_OPENGL], [
-OPENGL_LIBS=
+AC_DEFUN([OCTAVE_CHECK_LIB_OPENGL], [
+  OPENGL_LIBS=
 
-### On MacOSX systems the OpenGL framework can be used
-OCTAVE_HAVE_FRAMEWORK(OpenGL, [
-#include <OpenGL/gl.h>
-#include <OpenGL/glu.h> ], [GLint par; glGetIntegerv (GL_VIEWPORT, &par);],
-  [have_framework_opengl="yes"], [have_framework_opengl="no"])
+  ## On MacOSX systems the OpenGL framework can be used
+  OCTAVE_HAVE_FRAMEWORK(OpenGL, [[
+    #include <OpenGL/gl.h>
+    #include <OpenGL/glu.h>
+    ]], [[
+    GLint par; glGetIntegerv (GL_VIEWPORT, &par);
+    ]],
+    have_framework_opengl=yes, have_framework_opengl=no)
 
-if test $have_framework_opengl = "yes"; then
-  AC_DEFINE(HAVE_FRAMEWORK_OPENGL, 1, [Define if framework OPENGL is available.])
-  OPENGL_LIBS="-Wl,-framework -Wl,OpenGL"
-  AC_MSG_NOTICE([adding -Wl,-framework -Wl,OpenGL to OPENGL_LIBS])
-  OCTAVE_GLUTESSCALLBACK_THREEDOTS
-else
-  case $canonical_host_type in
-    *-*-mingw32* | *-*-msdosmsvc)
-      AC_CHECK_HEADERS(windows.h)
-    ;;
-  esac
-  have_opengl_incs=no
-  AC_CHECK_HEADERS([GL/gl.h OpenGL/gl.h], [
-    AC_CHECK_HEADERS([GL/glu.h OpenGL/glu.h], [
-      have_opengl_incs=yes; break], [], [
+  if test $have_framework_opengl = "yes"; then
+    AC_DEFINE(HAVE_FRAMEWORK_OPENGL, 1,
+      [Define to 1 if framework OPENGL is available.])
+    OPENGL_LIBS="-Wl,-framework -Wl,OpenGL"
+    AC_MSG_NOTICE([adding -Wl,-framework -Wl,OpenGL to OPENGL_LIBS])
+    OCTAVE_CHECK_FUNC_GLUTESSCALLBACK_THREEDOTS
+  else
+    case $canonical_host_type in
+      *-*-mingw32* | *-*-msdosmsvc)
+        AC_CHECK_HEADERS(windows.h)
+      ;;
+    esac
+    have_opengl_incs=no
+    AC_CHECK_HEADERS([GL/gl.h OpenGL/gl.h],
+      [AC_CHECK_HEADERS([GL/glu.h OpenGL/glu.h],
+        [have_opengl_incs=yes; break], [], [
 #ifdef HAVE_WINDOWS_H
 #include <windows.h>
 #endif
-    ])
-    break
-    ], [], [
+      ])
+      break
+      ], [], [
 #ifdef HAVE_WINDOWS_H
-#include <windows.h>
+# include <windows.h>
 #endif
     ])
 
-  if test "$have_opengl_incs" = "yes"; then
-    case $canonical_host_type in
-      *-*-mingw32* | *-*-msdosmsvc)
-        save_LIBS="$LIBS"
-        LIBS="$LIBS -lopengl32"
-        AC_MSG_CHECKING([for glEnable in -lopengl32])
-        AC_TRY_LINK([
-#if HAVE_WINDOWS_H
-#include <windows.h>
-#endif
-#if defined (HAVE_GL_GL_H)
-#include <GL/gl.h>
-#elif defined (HAVE_OPENGL_GL_H)
-#include <OpenGL/gl.h>
-#endif
-], [glEnable(GL_SMOOTH);], OPENGL_LIBS="-lopengl32 -lglu32")
-        LIBS="$save_LIBS"
-        if test "x$OPENGL_LIBS" != "x"; then
-          AC_MSG_RESULT(yes)
-        else
-          AC_MSG_RESULT(no)
-        fi
-        ;;
-      *)
-        AC_CHECK_LIB(GL, glEnable, OPENGL_LIBS="-lGL -lGLU")
-        ;;
-    esac
+    if test "$have_opengl_incs" = "yes"; then
+      case $canonical_host_type in
+        *-*-mingw32* | *-*-msdosmsvc)
+          save_LIBS="$LIBS"
+          LIBS="$LIBS -lopengl32"
+          AC_MSG_CHECKING([for glEnable in -lopengl32])
+          AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+            #if HAVE_WINDOWS_H
+            # include <windows.h>
+            #endif
+            #if defined (HAVE_GL_GL_H)
+            # include <GL/gl.h>
+            #elif defined (HAVE_OPENGL_GL_H)
+            # include <OpenGL/gl.h>
+            #endif
+            ]], [[ 
+            glEnable(GL_SMOOTH);
+            ]])], [OPENGL_LIBS="-lopengl32 -lglu32"])
+
+          LIBS="$save_LIBS"
+          if test "x$OPENGL_LIBS" != "x"; then
+            AC_MSG_RESULT(yes)
+          else
+            AC_MSG_RESULT(no)
+          fi
+          ;;
+        *)
+          ## Non-Mac, Non-Windows systems use this check
+          AC_CHECK_LIB(GL, [glEnable], [OPENGL_LIBS="-lGL -lGLU"])
+          ;;
+      esac
+    fi
+  fi
+  AC_SUBST(OPENGL_LIBS)
+])
+dnl
+dnl Check whether Qhull works (does not crash).
+dnl
+AC_DEFUN([OCTAVE_CHECK_LIB_QHULL_OK], [
+  AC_CACHE_CHECK([whether the qhull library works],
+    [octave_cv_lib_qhull_ok],
+    [AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+        #include <stdio.h>
+        #if defined (HAVE_LIBQHULL_LIBQHULL_H)
+        # include <libqhull/libqhull.h>
+        # include <libqhull/qset.h>
+        # include <libqhull/geom.h>
+        # include <libqhull/poly.h>
+        # include <libqhull/io.h>
+        #elif defined (HAVE_QHULL_LIBQHULL_H) || defined (HAVE_QHULL_QHULL_H)
+        # if defined (HAVE_QHULL_LIBQHULL_H)
+        #  include <qhull/libqhull.h>
+        # else
+        #  include <qhull/qhull.h>
+        # endif
+        # include <qhull/qset.h>
+        # include <qhull/geom.h>
+        # include <qhull/poly.h>
+        # include <qhull/io.h>
+        #elif defined (HAVE_LIBQHULL_H) || defined (HAVE_QHULL_H)
+        # if defined (HAVE_LIBQHULL_H)
+        #  include <libqhull.h>
+        # else
+        #  include <qhull.h>
+        # endif
+        # include <qset.h>
+        # include <geom.h>
+        # include <poly.h>
+        # include <io.h>
+        #endif
+        #ifdef NEED_QHULL_VERSION
+          char *qh_version = "version";
+        #endif
+        ]], [[
+        int dim = 2;
+        int n = 4;
+        coordT points[8] = { -0.5, -0.5, -0.5, 0.5, 0.5, -0.5, 0.5, 0.5 };
+        boolT ismalloc = 0;
+        return qh_new_qhull (dim, n, points, ismalloc, "qhull ", 0, stderr); 
+      ]])],
+      octave_cv_lib_qhull_ok=yes,
+      octave_cv_lib_qhull_ok=no,
+      octave_cv_lib_qhull_ok=yes)
+  ])
+  if test "$octave_cv_lib_qhull_ok" = "yes"; then
+    $1
+  else
+    $2
+  fi
+])
+dnl
+dnl Check for support of OpenMP with a given compiler flag.
+dnl If found define HAVE_OPENMP and add the compile flag
+dnl to CFLAGS and CXXFLAGS.
+dnl
+AC_DEFUN([OCTAVE_CHECK_OPENMP], [
+  AC_MSG_CHECKING([for support of OpenMP])
+  XCFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS $1"
+  AC_CACHE_VAL([octave_cv_check_openmp],
+    [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+        #include <omp.h>
+        #include <stdio.h>
+        ]], [[
+        int main(int argc, char* argv[])
+        {
+          _Pragma("omp parallel")  
+          printf("Hello, world.\n");
+          return 0;
+        }
+      ]])],
+      octave_cv_openmp=yes, octave_cv_openmmp=no, octave_cv_openmp=no)
+  ])
+  AC_MSG_RESULT([$octave_cv_openmp])
+  if test "$octave_cv_openmp" = yes; then
+    AC_DEFINE(HAVE_OPENMP, 1, [Define to 1 if compiler supports OpenMP.])
+    CXXFLAGS="$CXXFLAGS $1"
+  else
+    CFLAGS="$XCFLAGS"
+  fi
+])
+dnl
+dnl Check for the Qhull version.
+dnl
+AC_DEFUN([OCTAVE_CHECK_QHULL_VERSION], [
+  AC_CACHE_CHECK([for qh_version in $QHULL_LIBS],
+    [octave_cv_lib_qhull_version],
+    [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+        #include <stdio.h>
+        #if defined (HAVE_LIBQHULL_LIBQHULL_H)
+        # include <libqhull/libqhull.h>
+        # include <libqhull/qset.h>
+        # include <libqhull/geom.h>
+        # include <libqhull/poly.h>
+        # include <libqhull/io.h>
+        #elif defined (HAVE_QHULL_LIBQHULL_H) || defined (HAVE_QHULL_QHULL_H)
+        # if defined (HAVE_QHULL_LIBQHULL_H)
+        #  include <qhull/libqhull.h>
+        # else
+        #  include <qhull/qhull.h>
+        # endif
+        # include <qhull/qset.h>
+        # include <qhull/geom.h>
+        # include <qhull/poly.h>
+        # include <qhull/io.h>
+        #elif defined (HAVE_LIBQHULL_H) || defined (HAVE_QHULL_H)
+        # if defined (HAVE_LIBQHULL_H)
+        #  include <libqhull.h>
+        # else
+        #  include <qhull.h>
+        # endif
+        # include <qset.h>
+        # include <geom.h>
+        # include <poly.h>
+        # include <io.h>
+        #endif
+        ]], [[
+        const char *tmp = qh_version;
+      ]])], 
+      octave_cv_lib_qhull_version=yes, octave_cv_lib_qhull_version=no)
+  ])
+  if test "$octave_cv_lib_qhull_version" = no; then
+    AC_DEFINE(NEED_QHULL_VERSION, 1,
+      [Define to 1 if the Qhull library needs a qh_version variable defined.])
+  fi
+])
+dnl
+dnl Check if the default Fortran INTEGER is 64 bits wide.
+dnl
+AC_DEFUN([OCTAVE_CHECK_SIZEOF_FORTRAN_INTEGER], [
+  AC_CACHE_CHECK([whether $F77 generates correct size integers],
+    [octave_cv_sizeof_fortran_integer],
+    [octave_fintsize_save_FFLAGS="$FFLAGS"
+    FFLAGS="$FFLAGS $F77_INTEGER_8_FLAG"
+    AC_LANG_PUSH(Fortran 77)
+    AC_COMPILE_IFELSE(
+[[      subroutine foo(n, in, out)
+      integer n, in(n), out(n)
+      integer i
+      do 10 i = 1, n
+        out(i) = in(i)
+   10 continue
+      return
+      end
+]],
+      [mv conftest.$ac_objext fintsize.$ac_objext
+      octave_fintsize_save_LIBS="$LIBS"
+      LIBS="fintsize.$ac_objext $[]_AC_LANG_PREFIX[]LIBS"
+      AC_LANG_PUSH(C)
+      AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+          #include <assert.h> ]], [[
+          #ifdef USE_64_BIT_IDX_T
+          #if IDX_TYPE_LONG
+            typedef long octave_idx_type;
+          #else
+            typedef int octave_idx_type;
+          #endif
+          #else
+            typedef int octave_idx_type;
+          #endif
+          octave_idx_type n = 2;
+          octave_idx_type in[2];
+          octave_idx_type out[2];
+          in[0] = 13;
+          in[0] = 42;
+          F77_FUNC(foo,FOO) (&n, &in, &out);
+          assert (in[0] == out[0] && in[1] == out[1]);
+        ]])],
+        octave_cv_sizeof_fortran_integer=yes,
+        octave_cv_sizeof_fortran_integer=no,
+        octave_cv_sizeof_fortran_integer=yes)
+      AC_LANG_POP(C)
+      LIBS="$octave_fintsize_save_LIBS"
+      rm -f conftest.$ac_objext fintsize.$ac_objext],
+      [rm -f conftest.$ac_objext
+      AC_MSG_FAILURE([cannot compile a simple Fortran program])
+      octave_cv_sizeof_fortran_integer=no])
+    AC_LANG_POP(Fortran 77)
+    FFLAGS="$octave_fintsize_save_FFLAGS"
+  ])
+])
+dnl
+dnl Add warning to final summary.
+dnl
+AC_DEFUN([OCTAVE_CONFIGURE_WARNING], [
+  AC_MSG_WARN([$][$1])
+  m4_set_add([summary_warning_list], [$1])
+])
+dnl
+dnl Print final summary.
+dnl
+AC_DEFUN([OCTAVE_CONFIGURE_WARNING_SUMMARY], [
+  m4_set_foreach([summary_warning_list], [elt], [
+    if test -n "[$]elt"; then
+      AC_MSG_WARN([$]elt)
+      warn_msg_printed=true
+    fi])
+])
+dnl
+dnl Check if the C++ library has the bit_and, bit_or, and bit_xor
+dnl templates defined.
+dnl
+AC_DEFUN([OCTAVE_CXX_BITWISE_OP_TEMPLATES], [
+  AC_CACHE_CHECK([whether bit_and, bit_or, bit_xor are defined in the C++ library],
+    [octave_cv_cxx_bitwise_op_templates],
+    [AC_LANG_PUSH(C++)
+    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+        #include <functional>
+        ]], [[
+        int x = 0;
+        int y = 1;
+        int z1 = std::bit_and<int>() (x, y);
+        int z2 = std::bit_or<int>() (x, y);
+        int z3 = std::bit_xor<int>() (x, y);
+      ]])],
+      octave_cv_cxx_bitwise_op_templates=yes,
+      octave_cv_cxx_bitwise_op_templates=no)
+    AC_LANG_POP(C++)
+  ])
+  if test $octave_cv_cxx_bitwise_op_templates = yes; then
+    AC_DEFINE(HAVE_CXX_BITWISE_OP_TEMPLATES, 1,
+      [Define to 1 if C++ library has templated bitwise operators.])
   fi
-fi
-AC_SUBST(OPENGL_LIBS)
+])
+dnl
+dnl Check if C++ reinterpret cast works for function pointers.
+dnl
+AC_DEFUN([OCTAVE_CXX_BROKEN_REINTERPRET_CAST],
+  [AC_REQUIRE([AC_PROG_CXX])
+  AC_CACHE_CHECK([for broken C++ reinterpret_cast],
+    [octave_cv_cxx_broken_reinterpret_cast],
+    [AC_LANG_PUSH(C++)
+    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+        #include <cmath> ]], [[
+        typedef double (*fptr) (double);
+        fptr psin = sin;
+        void *vptr = reinterpret_cast<void *> (psin);
+        psin = reinterpret_cast<fptr> (vptr);
+      ]])],
+      octave_cv_cxx_broken_reinterpret_cast=no,
+      octave_cv_cxx_broken_reinterpret_cast=yes)
+    AC_LANG_POP(C++)
+  ])
+  if test $octave_cv_cxx_broken_reinterpret_cast = yes ; then
+    AC_DEFINE(CXX_BROKEN_REINTERPRET_CAST, 1,
+      [Define to 1 if C++ reinterpret_cast fails for function pointers.])
+  fi
+])
+dnl
+dnl Check if the C++ library has functions to access real and imaginary
+dnl parts of complex numbers independently via references.
+dnl
+AC_DEFUN([OCTAVE_CXX_COMPLEX_REFERENCE_ACCESSORS], [
+  AC_CACHE_CHECK([whether complex class can reference components independently],
+    [octave_cv_cxx_complex_reference_accessors],
+    [AC_LANG_PUSH(C++)
+    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+        #include <complex>
+        ]], [[
+        std::complex<double> x;
+        x.real () = 1.0;
+        x.imag () = 1.0;
+      ]])],
+      octave_cv_cxx_complex_reference_accessors=yes,
+      octave_cv_cxx_complex_reference_accessors=no)
+    AC_LANG_POP(C++)
+  ])
+  if test $octave_cv_cxx_complex_reference_accessors = yes; then
+    AC_DEFINE(HAVE_CXX_COMPLEX_REFERENCE_ACCESSORS, 1,
+      [Define to 1 if C++ complex class has T& real (void) and T& imag (void) methods.])
+  fi
+])
+dnl
+dnl Check if the C++ library has functions to set real and imaginary
+dnl parts of complex numbers independently.
+dnl
+AC_DEFUN([OCTAVE_CXX_COMPLEX_SETTERS], [
+  AC_CACHE_CHECK([whether complex class can set components independently],
+    [octave_cv_cxx_complex_setters],
+    [AC_LANG_PUSH(C++)
+    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+        #include <complex>
+        ]], [[
+        std::complex<double> x;
+        x.real (1.0);
+        x.imag (2.0);
+      ]])],
+      octave_cv_cxx_complex_setters=yes, octave_cv_cxx_complex_setters=no)
+    AC_LANG_POP(C++)
+  ])
+  if test $octave_cv_cxx_complex_setters = yes; then
+    AC_DEFINE(HAVE_CXX_COMPLEX_SETTERS, 1, 
+      [Define to 1 if C++ complex class has void real (T) and void imag (T) methods.])
+  fi
+])
+dnl
+dnl Check if the compiler supports dynamic auto arrays.
+dnl
+AC_DEFUN([OCTAVE_CXX_DYNAMIC_AUTO_ARRAYS], [
+  AC_CACHE_CHECK([whether C++ supports dynamic auto arrays],
+    [octave_cv_cxx_dynamic_auto_arrays],
+    [AC_LANG_PUSH(C++)
+    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[
+        void test(char *);
+        int length();
+        char x[length()];
+        test(x);
+      ]])],
+      octave_cv_cxx_dynamic_auto_arrays=yes, 
+      octave_cv_cxx_dynamic_auto_arrays=no)
+    AC_LANG_POP(C++)
+  ])
+  if test $octave_cv_cxx_dynamic_auto_arrays = yes; then
+    AC_DEFINE(HAVE_DYNAMIC_AUTO_ARRAYS, 1,
+      [Define to 1 if C++ supports dynamic auto arrays.])
+  fi
+])
+dnl
+dnl Check if C++ compiler handles FLAG command line option.  If two
+dnl arguments are specified, execute the second arg as shell commands.
+dnl Otherwise, add FLAG to CXXFLAGS if the compiler accepts the flag.
+dnl
+AC_DEFUN([OCTAVE_CXX_FLAG], [
+  ac_safe=`echo "$1" | sed 'y%./+-:=%__p___%'`
+  AC_MSG_CHECKING([whether ${CXX-g++} accepts $1])
+  AC_CACHE_VAL([octave_cv_cxx_flag_$ac_safe],
+    [AC_LANG_PUSH(C++)
+    XCXXFLAGS="$CXXFLAGS"
+    CXXFLAGS="$CXXFLAGS $1"
+    AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],
+      eval "octave_cv_cxx_flag_$ac_safe=yes",
+      eval "octave_cv_cxx_flag_$ac_safe=no")
+    CXXFLAGS="$XCXXFLAGS"
+    AC_LANG_POP(C++)
+  ])
+  if eval "test \"`echo '$octave_cv_cxx_flag_'$ac_safe`\" = yes"; then
+    AC_MSG_RESULT(yes)
+    ifelse([$2], ,
+      [CXXFLAGS="$CXXFLAGS $1"
+      AC_MSG_RESULT([adding $1 to CXXFLAGS])], [$2])
+  else
+    AC_MSG_RESULT(no)
+    ifelse([$3], , , [$3])
+  fi
+])
+dnl
+dnl Check if the C++ library is ISO compliant.
+dnl FIXME: This is obviously very simplistic, and trivially fooled.
+dnl
+AC_DEFUN([OCTAVE_CXX_ISO_COMPLIANT_LIBRARY], [
+  AC_REQUIRE([AC_PROG_CXX])
+  AC_MSG_CHECKING([if C++ library is ISO compliant])
+  AC_CACHE_VAL([octave_cv_cxx_iso_compliant_library],
+    [AC_LANG_PUSH(C++)
+    rm -f conftest.h
+    ## Omitting cwctype for now, since it is broken with gcc-3.0.x and
+    ## possibly other versions...
+    for inc in algorithm bitset cassert cctype cerrno cfloat ciso646 \
+        climits clocale cmath complex csetjmp csignal cstdarg cstddef \
+        cstdio cstdlib cstring ctime cwchar deque exception \
+        fstream functional iomanip ios iosfwd iostream istream iterator \
+        limits list locale map memory new numeric ostream queue set \
+        sstream stack stdexcept streambuf string strstream typeinfo \
+        utility valarray vector; do
+      echo "#include <$inc>" >> conftest.h
+    done
+    AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+        #include "conftest.h"
+        ]], [[
+        std::bitset<50> flags;
+        flags.set();
+        int digits = std::numeric_limits<unsigned long>::digits;
+        digits = 0;
+      ]])],
+      octave_cv_cxx_iso_compliant_library=yes,
+      octave_cv_cxx_iso_compliant_library=no)
+    AC_LANG_POP(C++)
+  ])
+  AC_MSG_RESULT([$octave_cv_cxx_iso_compliant_library])
+  if test $octave_cv_cxx_iso_compliant_library = yes; then
+    AC_DEFINE(CXX_ISO_COMPLIANT_LIBRARY, 1, 
+      [Define to 1 if your C++ runtime library is ISO compliant.])
+  fi
+])
+dnl
+dnl Check if C++ compiler needs the new friend template declaration
+dnl syntax. 
+dnl
+AC_DEFUN([OCTAVE_CXX_NEW_FRIEND_TEMPLATE_DECL], [
+  AC_REQUIRE([AC_PROG_CXX])
+  AC_MSG_CHECKING([for C++ support for new friend template declaration])
+  AC_CACHE_VAL([octave_cv_cxx_new_friend_template_decl],
+    [AC_LANG_PUSH(C++)
+    rm -f conftest.h
+    cat > conftest.h <<EOB
+       struct A {
+         friend int operator== (const A&, const A&);
+         A (int) { }
+       };
+
+       template <class T> int
+       operator== (const T&, const T&)
+       {
+         return 0;
+       }
+EOB
+    AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+        #include "conftest.h"
+        ]], [[
+        A a (1);
+        return a == A(1);
+      ]])],
+      octave_cv_cxx_new_friend_template_decl=no,
+      octave_cv_cxx_new_friend_template_decl=yes)
+    AC_LANG_POP(C++)
+  ])
+  AC_MSG_RESULT([$octave_cv_cxx_new_friend_template_decl])
+  if test $octave_cv_cxx_new_friend_template_decl = yes; then
+    AC_DEFINE(CXX_NEW_FRIEND_TEMPLATE_DECL, 1,
+      [Define to 1 if your compiler supports `<>' stuff for template friends.])
+  fi
+])
+dnl
+dnl Check if the compiler supports placement delete.
+dnl
+AC_DEFUN([OCTAVE_CXX_PLACEMENT_DELETE], [
+  AC_CACHE_CHECK([whether <new> defines placement delete operator],
+    [octave_cv_cxx_placement_delete],
+    [AC_LANG_PUSH(C++)
+    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+        #include <new>
+        ]], [[
+        operator delete((void *)0, (void *)0);
+      ]])],
+      octave_cv_cxx_placement_delete=yes, 
+      octave_cv_cxx_placement_delete=no)
+    AC_LANG_POP(C++)
+  ])
+  if test $octave_cv_cxx_placement_delete = yes; then
+    AC_DEFINE(HAVE_PLACEMENT_DELETE, 1,
+      [Define to 1 if C++ supports operator delete(void *, void *).])
+  fi
+])
+dnl
+dnl Allow the user disable support for command line editing using GNU
+dnl readline.
+dnl
+AC_DEFUN([OCTAVE_ENABLE_READLINE], [
+  USE_READLINE=true
+  READLINE_LIBS=
+  AC_ARG_ENABLE(readline,
+    [AS_HELP_STRING([--enable-readline],
+      [use readline library (default is yes)])],
+    [if test "$enableval" = no; then
+       USE_READLINE=false
+       warn_readline="command editing and history features require GNU Readline"
+     fi])
+  if $USE_READLINE; then
+    save_LIBS="$LIBS"
+    LIBS="$TERM_LIBS"
+    AC_CHECK_LIB(readline, rl_set_keyboard_input_timeout,
+      [READLINE_LIBS="-lreadline"
+      AC_DEFINE(USE_READLINE, 1, [Define to 1 to use the readline library.])
+      ],
+      [AC_MSG_WARN([I need GNU Readline 4.2 or later])
+      AC_MSG_ERROR([this is fatal unless you specify --disable-readline])
+    ])
+    LIBS="$save_LIBS"
+  fi
+  AC_SUBST(READLINE_LIBS)
+])
+dnl
+dnl Check if Fortran compiler handles FLAG command line option.  If
+dnl two arguments are specified, execute the second arg as shell
+dnl commands.  Otherwise, add FLAG to FFLAGS if the compiler accepts
+dnl the flag.
+dnl
+AC_DEFUN([OCTAVE_F77_FLAG], [
+  ac_safe=`echo "$1" | sed 'y%./+-:=%__p___%'`
+  AC_MSG_CHECKING([whether ${F77-g77} accepts $1])
+  AC_CACHE_VAL(octave_cv_f77_flag_$ac_safe, [
+    AC_LANG_PUSH(Fortran 77)
+    XFFLAGS="$FFLAGS"
+    FFLAGS="$FFLAGS $1"
+    AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],
+      eval "octave_cv_f77_flag_$ac_safe=yes",
+      eval "octave_cv_f77_flag_$ac_safe=no")
+    FFLAGS="$XFFLAGS"
+    AC_LANG_POP(Fortran 77)
+  ])
+  if eval "test \"`echo '$octave_cv_f77_flag_'$ac_safe`\" = yes"; then
+    AC_MSG_RESULT(yes)
+    ifelse([$2], ,
+      [FFLAGS="$FFLAGS $1"
+      AC_MSG_RESULT([adding $1 to FFLAGS])], [$2])
+  else
+    AC_MSG_RESULT(no)
+    ifelse([$3], , , [$3])
+  fi
 ])
 dnl
-dnl See if function gluTessCallback is called with "(...)"
+dnl Check whether fast signed integer arithmetics using bit tricks
+dnl can be used in oct-inttypes.h.  Defines HAVE_FAST_INT_OPS if
+dnl the following conditions hold:
+dnl 1. Signed numbers are represented by twos complement
+dnl    (see <http://en.wikipedia.org/wiki/Two%27s_complement>)
+dnl 2. static_cast to unsigned int counterpart works like interpreting
+dnl    the signed bit pattern as unsigned (and is thus zero-cost).
+dnl 3. Signed addition and subtraction yield the same bit results as unsigned.
+dnl    (We use casts to prevent optimization interference, so there is no
+dnl     need for things like -ftrapv).
+dnl 4. Bit operations on signed integers work like on unsigned integers,
+dnl    except for the shifts.  Shifts are arithmetic.
+dnl
+AC_DEFUN([OCTAVE_FAST_INT_OPS], [
+  AC_CACHE_CHECK([whether fast integer arithmetics is usable],
+    [octave_cv_fast_int_ops],
+    [AC_LANG_PUSH(C++)
+    AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+        #include <limits>
+        template<class UT, class ST>
+        static bool 
+        do_test (UT, ST)
+        {
+          volatile ST s = std::numeric_limits<ST>::min () / 3;
+          volatile UT u = static_cast<UT> (s);
+          if (*(reinterpret_cast<volatile ST *> (&u)) != s) return true;
+          
+          u = 0; u = ~u;
+          if (*(reinterpret_cast<volatile ST *> (&u)) != -1) return true;
+          
+          ST sx, sy;
+          sx = std::numeric_limits<ST>::max () / 2 + 1;
+          sy = std::numeric_limits<ST>::max () / 2 + 2;
+          if (static_cast<ST> (static_cast<UT> (sx) + static_cast<UT> (sy))
+              != std::numeric_limits<ST>::min () + 1) return true;
+          if (static_cast<ST> (static_cast<UT> (sx) - static_cast<UT> (sy))
+              != -1) return true;
+          
+          if ((sx & sy) != (static_cast<UT> (sx) & static_cast<UT> (sy)))
+            return true;
+          if ((sx | sy) != (static_cast<UT> (sx) | static_cast<UT> (sy)))
+            return true;
+          if ((sx ^ sy) != (static_cast<UT> (sx) ^ static_cast<UT> (sy)))
+            return true;
+          if ((-1 >> 1) != -1) return true;
+          return false;
+        }
+      
+        #define DO_TEST(T) \
+          if (do_test (static_cast<unsigned T> (0), static_cast<signed T> (0)))\
+            return sizeof (T);
+
+        ]],[[
+
+        DO_TEST(char)
+        DO_TEST(short)
+        DO_TEST(int)
+        DO_TEST(long)
+        #if (defined(HAVE_LONG_LONG_INT) && defined(HAVE_UNSIGNED_LONG_LONG_INT))
+          DO_TEST(long long)
+        #endif
+      ]])],
+      octave_cv_fast_int_ops=yes,
+      octave_cv_fast_int_ops=no,
+      octave_cv_fast_int_ops=yes)
+    AC_LANG_POP(C++)
+  ])
+  if test $octave_cv_fast_int_ops = yes; then
+    AC_DEFINE(HAVE_FAST_INT_OPS, 1,
+      [Define to 1 if signed integers use two's complement.])
+  fi
+])
+dnl
+dnl Check to see if the compiler and the linker can handle the flags
+dnl "-framework $1" for the given prologue $2 and the given body $3 of
+dnl a source file.  Arguments 2 and 3 optionally can also be empty.
+dnl Add options (lower case letters $1) "--with-framework-$1" and
+dnl "--without-framework-$1".  If this test is successful then perform
+dnl $4, otherwise do $5.
+dnl
+AC_DEFUN([OCTAVE_HAVE_FRAMEWORK], [
+  AC_MSG_CHECKING([whether ${LD-ld} accepts -framework $1])
+  AC_CACHE_VAL([octave_cv_framework_$1],
+    [XLDFLAGS="$LDFLAGS"
+    LDFLAGS="$LDFLAGS -framework $1"
+    AC_LANG_PUSH(C++)
+    AC_LINK_IFELSE([AC_LANG_PROGRAM([$2], [$3])],
+      eval "octave_cv_framework_$1=yes",
+      eval "octave_cv_framework_$1=no")
+    AC_LANG_POP(C++)
+    LDFLAGS="$XLDFLAGS"
+  ])
+  if test "$octave_cv_framework_$1" = "yes"; then
+    AC_MSG_RESULT(yes)
+    AC_ARG_WITH(framework-m4_tolower($1),
+      [AS_HELP_STRING([--without-framework-m4_tolower($1)], 
+        [don't use framework $1])],
+         with_have_framework=$withval, with_have_framework=yes)
+    if test "$with_have_framework" = "yes"; then
+      [$4]
+    else
+      AC_MSG_NOTICE([framework rejected by --without-framework-m4_tolower($1)])
+      [$5]
+    fi
+  else
+    AC_MSG_RESULT(no)
+    [$5]
+  fi
+])
+dnl
+dnl Figure out the hardware-vendor-os info.
+dnl
+dnl Hanging '])' in AC_MSG_WARN is for adding newline to output
+dnl
+AC_DEFUN([OCTAVE_HOST_TYPE], [
+  AC_CANONICAL_HOST
+  if test -z "$host"; then
+    host=unknown
+  fi
+  canonical_host_type=$host
+  if test "$host" = unknown; then
+    AC_MSG_WARN([configuring Octave for unknown system type
+])
+  fi
+  AC_SUBST(canonical_host_type)
+])
+dnl
+dnl Check for IEEE 754 data format.
 dnl
-dnl OCTAVE_GLUTESSCALLBACK_THREEDOTS
-AC_DEFUN([OCTAVE_GLUTESSCALLBACK_THREEDOTS],
-[AC_CACHE_CHECK([whether gluTessCallback is called with "(...)"],
-octave_cv_glutesscallback_threedots,
-[AC_LANG_PUSH(C++)
-AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
-#ifdef HAVE_GL_GLU_H
-#include <GL/glu.h>
-#elif defined HAVE_OPENGL_GLU_H || defined HAVE_FRAMEWORK_OPENGL
-#include <OpenGL/glu.h>
-#endif]],
-[[GLvoid (*func)(...); gluTessCallback(0, 0, func);]])],
-octave_cv_glutesscallback_threedots="yes", octave_cv_glutesscallback_threedots="no")])
-AC_LANG_POP(C++)
-if test $octave_cv_glutesscallback_threedots = "yes"; then
-  AC_DEFINE(HAVE_GLUTESSCALLBACK_THREEDOTS, 1, 
-    [Define if gluTessCallback is called with (...)])
-fi
+AC_DEFUN([OCTAVE_IEEE754_DATA_FORMAT], [
+  AC_MSG_CHECKING([for IEEE 754 data format])
+  AC_CACHE_VAL([octave_cv_ieee754_data_format],
+    [AC_RUN_IFELSE([AC_LANG_SOURCE([[
+        int
+        main (void) 
+        {
+          typedef union { unsigned char c[8]; double d; } ieeebytes;
+           
+          ieeebytes l = {0x1c, 0xbc, 0x6e, 0xf2, 0x54, 0x8b, 0x11, 0x43};
+          ieeebytes b = {0x43, 0x11, 0x8b, 0x54, 0xf2, 0x6e, 0xbc, 0x1c};
+
+          return l.d != 1234567891234567.0 && b.d != 1234567891234567.0;
+        }
+      ]])],
+      octave_cv_ieee754_data_format=yes,
+      octave_cv_ieee754_data_format=no,
+      octave_cv_ieee754_data_format=yes)
+  ])
+  if test "$cross_compiling" = yes; then
+    AC_MSG_RESULT([$octave_cv_ieee754_data_format assumed for cross compilation])
+  else
+    AC_MSG_RESULT([$octave_cv_ieee754_data_format])
+  fi
+  if test "$octave_cv_ieee754_data_format" = yes; then
+    AC_DEFINE(HAVE_IEEE754_DATA_FORMAT, 1,
+      [Define to 1 if your system uses IEEE 754 data format.])
+  else
+    ## If the format is unknown, then you will probably not have a
+    ## useful system, so we will abort here.  Anyone wishing to
+    ## experiment with building Octave on a system without IEEE
+    ## floating point should be capable of removing this check and
+    ## the one in the octave_ieee_init function in liboctave/lo-ieee.cc.
+    AC_MSG_ERROR([IEEE 754 data format required for building Octave])
+  fi
+])
+dnl
+dnl Check for ar.
+dnl
+AC_DEFUN([OCTAVE_PROG_AR], [
+  if test -z "$AR"; then
+    AR=ar
+  fi
+  AC_SUBST(AR)
+
+  if test -z "$ARFLAGS"; then
+    ARFLAGS="rc"
+  fi
+  AC_SUBST(ARFLAGS)
+])
+dnl
+dnl Check for bison.
+dnl
+AC_DEFUN([OCTAVE_PROG_BISON], [
+  AC_PROG_YACC
+  case "$YACC" in
+    bison*)
+    ;;
+    *)
+      YACC='$(top_srcdir)/build-aux/missing bison'
+      warn_bison="
+
+I didn't find bison, but it's only a problem if you need to
+reconstruct parse.cc, which is the case if you're building from VCS
+sources.
+"
+      OCTAVE_CONFIGURE_WARNING([warn_bison])
+    ;;
+  esac
+])
+dnl
+dnl Find desktop-file-install program.
+dnl
+AC_DEFUN([OCTAVE_PROG_DESKTOP_FILE_INSTALL], [
+  AC_CHECK_PROG(DESKTOP_FILE_INSTALL, desktop-file-install, desktop-file-install, [])
+  AC_SUBST(DESKTOP_FILE_INSTALL)
+])
+dnl
+dnl Find find program.
+dnl
+# Prefer GNU find if found.
+AN_MAKEVAR([FIND],  [OCTAVE_PROG_FIND])
+AN_PROGRAM([gfind], [OCTAVE_PROG_FIND])
+AN_PROGRAM([find],  [OCTAVE_PROG_FIND])
+AC_DEFUN([OCTAVE_PROG_FIND], [
+  AC_CHECK_PROGS(FIND, [gfind find])
+])
+dnl
+dnl Check for flex.
+dnl
+AC_DEFUN([OCTAVE_PROG_FLEX], [
+  ## For now, don't define LEXLIB to be -lfl -- we don't use anything in
+  ## it, and it might not be installed.
+  ##
+  ## Also make sure that we generate an interactive scanner if we are
+  ## using flex.
+  AC_PROG_LEX
+  case "$LEX" in
+    flex*)
+      LFLAGS="-I"
+      AC_MSG_RESULT([defining LFLAGS to be $LFLAGS])
+      LEXLIB=
+    ;;
+    *)
+      LEX='$(top_srcdir)/build-aux/missing flex'
+      warn_flex="
+
+I didn't find flex, but it's only a problem if you need to reconstruct
+lex.cc, which is the case if you're building from VCS sources.
+"
+      OCTAVE_CONFIGURE_WARNING([warn_flex])
+    ;;
+  esac
+  AC_SUBST(LFLAGS)
+])
+dnl
+dnl Check for ghostscript.
+dnl
+AC_DEFUN([OCTAVE_PROG_GHOSTSCRIPT], [
+  case "$canonical_host_type" in
+    *-*-mingw* | *-*-msdosmsvc)
+      gs_names="gswin32c gs mgs"
+    ;;
+    *)
+      gs_names="gs"
+    ;;
+  esac
+  AC_CHECK_PROGS(GHOSTSCRIPT, [$gs_names])
+  if test -z "$GHOSTSCRIPT"; then
+    GHOSTSCRIPT='$(top_srcdir)/build-aux/missing gs'
+    warn_ghostscript="
+
+I didn't find ghostscript, so reconstructing figures for the manual
+will fail, and saving graphics in some output formats will fail when
+using Octave
+"
+    OCTAVE_CONFIGURE_WARNING([warn_ghostscript])
+  fi
+  AC_SUBST(GHOSTSCRIPT)
 ])
 dnl
-dnl Check for support of OpenMP with a given compiler flag. If
-dnl found define HAVE_OPENMP and add the compile flag to CFLAGS
-dnl and CXXFLAGS.
+dnl Check for gnuplot.
+dnl
+AC_DEFUN([OCTAVE_PROG_GNUPLOT], [
+  gp_names="gnuplot"
+  gp_default="gnuplot"
+  if test "$cross_compiling" = yes; then
+    GNUPLOT="$gp_default"
+    AC_MSG_RESULT([assuming $GNUPLOT exists on $canonical_host_type host])
+  else
+    AC_CHECK_PROGS(GNUPLOT, [$gp_names])
+    if test -z "$GNUPLOT"; then
+      GNUPLOT="$gp_default"
+      warn_gnuplot="
+
+gnuplot not found.  It isn't necessary to have gnuplot installed, but
+without native graphics or gnuplot you won't be able to use any of
+Octave's plotting commands.
+"
+      OCTAVE_CONFIGURE_WARNING([warn_gnuplot])
+    fi
+  fi
+  AC_SUBST(GNUPLOT)
+])
+dnl
+dnl Check for gperf.
+dnl
+AC_DEFUN([OCTAVE_PROG_GPERF], [
+  AC_CHECK_PROG(GPERF, gperf, gperf, [])
+  if test -z "$GPERF"; then
+    GPERF='$(top_srcdir)/build-aux/missing gperf'
+    warn_gperf="
+
+I didn't find gperf, but it's only a problem if you need to
+reconstruct oct-gperf.h 
+"
+    OCTAVE_CONFIGURE_WARNING([warn_gperf])
+  fi
+  AC_SUBST(GPERF)
+])
+dnl
+dnl Check for makeinfo.
+dnl
+AC_DEFUN([OCTAVE_PROG_MAKEINFO], [
+  dnl use MKINFO, not MAKEINFO, for variable name because Automake
+  dnl automatically defines a value for MAKEINFO even when it does not
+  dnl exist which will then fool the 'test -z' line.
+  AC_CHECK_PROG(MKINFO, makeinfo, makeinfo, [])
+  if test -z "$MKINFO"; then
+    AC_MSG_ERROR([makeinfo program required for reading documentation])
+  fi
+])
+dnl
+dnl What pager should we use?
+dnl
+AC_DEFUN([OCTAVE_PROG_PAGER], [
+  if test "$cross_compiling" = yes; then
+    DEFAULT_PAGER=less
+    AC_MSG_RESULT([assuming $DEFAULT_PAGER exists on $canonical_host_type host])
+    AC_SUBST(DEFAULT_PAGER)
+  else
+    octave_possible_pagers="less more page pg"
+    case "$canonical_host_type" in
+      *-*-cygwin* | *-*-mingw32* | *-*-msdosmsvc)
+        octave_possible_pagers="$octave_possible_pagers more.com"
+      ;;
+    esac
+
+    AC_CHECK_PROGS(DEFAULT_PAGER, $octave_possible_pagers, [])
+    if test -z "$DEFAULT_PAGER"; then
+      warn_less="I couldn't find \`less', \`more', \`page', or \`pg'"
+      OCTAVE_CONFIGURE_WARNING([warn_less])
+    fi
+  fi
+])
+dnl
+dnl Find Perl program.
+dnl
+AC_DEFUN([OCTAVE_PROG_PERL], [
+  AC_CHECK_PROG(PERL, perl, perl, [])
+  AC_SUBST(PERL)
+])
+dnl
+dnl Find Python program.
+dnl
+AC_DEFUN([OCTAVE_PROG_PYTHON], [
+  AC_CHECK_PROG(PYTHON, python, python, [])
+  AC_SUBST(PYTHON)
+])
+dnl
+dnl Find sed program.
 dnl
-AC_DEFUN([OCTAVE_CHECK_OPENMP],
-[AC_MSG_CHECKING([for support of OpenMP])
-XCFLAGS="$CFLAGS"
-CFLAGS="$CFLAGS $1"
-AC_CACHE_VAL(octave_cv_check_openmp,[
-AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
-#include <omp.h>
-#include <stdio.h>
-]], [[
-int main(int argc, char* argv[])
-{
-  _Pragma("omp parallel")  
-  printf("Hello, world.\n");
-  return 0;
-}
-]])],octave_cv_openmp=yes, octave_cv_openmmp=no, octave_cv_openmp=no)])
-AC_MSG_RESULT($octave_cv_openmp)
-if test "$octave_cv_openmp" = yes; then
-  AC_DEFINE(HAVE_OPENMP,1,[Define if compiler supports OpenMP])
-  CXXFLAGS="$CXXFLAGS $1"
-else
-  CFLAGS="$XCFLAGS"
-fi
+# Check for a fully-functional sed program, that truncates
+# as few characters as possible and that supports "\(X\|Y\)"
+# style regular expression alternation.  Prefer GNU sed if found.
+AC_DEFUN([OCTAVE_PROG_SED], [
+  AC_MSG_CHECKING([for a usable sed])
+  if test -z "$SED"; then
+    AC_CACHE_VAL([octave_cv_prog_sed],
+      [# Loop through the user's path and search for sed and gsed.
+      # Next, test potential sed programs in list for truncation.
+      _AS_PATH_WALK([$PATH],
+        [for ac_prog in sed gsed; do
+          for ac_exec_ext in '' $ac_executable_extensions; do
+            if AS_EXECUTABLE_P(["$as_dir/$ac_prog$ac_exec_ext"]); then
+              _sed_list="$_sed_list $as_dir/$ac_prog$ac_exec_ext"
+            fi
+          done
+        done
+      ])
+      AS_TMPDIR(sed)
+      _max=0
+      _count=0
+      # Add /usr/xpg4/bin/sed as it is typically found on Solaris
+      # along with /bin/sed that truncates output.
+      for _sed in $_sed_list /usr/xpg4/bin/sed; do
+        test ! -f ${_sed} && break
+        cat /dev/null > "$tmp/sed.in"
+        _count=0
+        echo $ECHO_N "0123456789$ECHO_C" >"$tmp/sed.in"
+        # Check for GNU sed and select it if it is found.
+        if "${_sed}" --version 2>&1 < /dev/null | egrep '(GNU)' > /dev/null; then
+          octave_cv_prog_sed=${_sed}
+          break;
+        fi
+        # Reject if RE alternation is not handled.
+        if test "`echo 'this and that' | ${_sed} -n 's/\(this\|that\).*$/\1/p'`" != "this"; then
+          continue;
+        fi
+        while true; do
+          cat "$tmp/sed.in" "$tmp/sed.in" >"$tmp/sed.tmp"
+          mv "$tmp/sed.tmp" "$tmp/sed.in"
+          cp "$tmp/sed.in" "$tmp/sed.nl"
+          echo >>"$tmp/sed.nl"
+          ${_sed} -e 's/a$//' < "$tmp/sed.nl" >"$tmp/sed.out" || break
+          cmp -s "$tmp/sed.out" "$tmp/sed.nl" || break
+          # 10000 chars as input seems more than enough
+          test $_count -gt 10 && break
+          _count=`expr $_count + 1`
+          if test $_count -gt $_max; then
+            _max=$_count
+            octave_cv_prog_sed=$_sed
+          fi
+        done
+      done
+      rm -rf "$tmp"
+    ])
+    SED=$octave_cv_prog_sed
+    if test -z "$SED"; then
+      AC_MSG_ERROR([no usable version of sed found])
+    fi
+  fi
+  AC_SUBST(SED)
+  AC_MSG_RESULT([$SED])
+])
+dnl
+dnl Check for texi2dvi.
+dnl
+AC_DEFUN([OCTAVE_PROG_TEXI2DVI], [
+  AC_CHECK_PROG(TEXI2DVI, texi2dvi, texi2dvi, [])
+  if test -z "$TEXI2DVI"; then
+    TEXI2DVI='$(top_srcdir)/build-aux/missing texi2dvi'
+    warn_texi2dvi="
+
+I didn't find texi2dvi, but it's only a problem if you need to
+reconstruct the DVI version of the manual
+"
+    OCTAVE_CONFIGURE_WARNING([warn_texi2dvi])
+  fi
+  AC_SUBST(TEXI2DVI)
+])
+dnl
+dnl Check for texi2pdf.
+dnl
+AC_DEFUN([OCTAVE_PROG_TEXI2PDF], [
+  AC_REQUIRE([OCTAVE_PROG_TEXI2DVI])
+  AC_CHECK_PROG(TEXI2PDF, texi2pdf, texi2pdf, [])
+  if test -z "$TEXI2PDF"; then
+    missing=true;
+    if test -n "$TEXI2DVI"; then
+      TEXI2PDF="$TEXI2DVI --pdf"
+      missing=false;
+    fi
+  else
+    missing=false;
+  fi
+  if $missing; then
+    TEXI2PDF='$(top_srcdir)/build-aux/missing texi2pdf'
+    warn_texi2pdf="
+
+I didn't find texi2pdf, but it's only a problem if you need to
+reconstruct the PDF version of the manual
+"
+    OCTAVE_CONFIGURE_WARNING([warn_texi2pdf])
+  fi
+  AC_SUBST(TEXI2PDF)
 ])
 dnl
+dnl Set default value for a variable and substitute it.
+dnl
+AC_DEFUN([OCTAVE_SET_DEFAULT], [
+  ifelse($#, 2, [: ${$1=$2}
+])dnl
+  AC_MSG_RESULT([defining $1 to be $$1])
+  AC_SUBST($1)
+])
+dnl
+dnl Check for UMFPACK separately split complex matrix and RHS.
+dnl
+dnl Macro assumes that the check for umfpack has already been performed.
+dnl
+AC_DEFUN([OCTAVE_UMFPACK_SEPARATE_SPLIT], [
+  AC_MSG_CHECKING([for UMFPACK separate complex matrix and rhs split])
+  AC_CACHE_VAL(octave_cv_umfpack_separate_split,
+    [AC_RUN_IFELSE([AC_LANG_SOURCE([[
+        #include <stdlib.h>
+        #if defined (HAVE_SUITESPARSE_UMFPACK_H)
+        # include <suitesparse/umfpack.h>
+        #elif defined (HAVE_UFSPARSE_UMFPACK_H)
+        # include <ufsparse/umfpack.h>
+        #elif defined (HAVE_UMFPACK_UMFPACK_H)
+        # include <umfpack/umfpack.h>
+        #elif defined (HAVE_UMFPACK_H)
+        # include <umfpack.h>
+        #endif
+        int n = 5;
+        int Ap[] = {0, 2, 5, 9, 10, 12};
+        int Ai[]  = {0, 1, 0, 2, 4, 1, 2, 3, 4, 2, 1, 4};
+        double Ax[] = {2., 0., 3., 0., 3., 0., -1., 0., 4., 0., 4., 0., 
+                      -3., 0., 1., 0., 2., 0., 2., 0., 6., 0., 1., 0.};
+        double br[] = {8., 45., -3., 3., 19.};
+        double bi[] = {0., 0., 0., 0., 0.};
+        int main (void)
+        {
+          double *null = (double *) NULL ;
+          double *x = (double *)malloc (2 * n * sizeof(double));
+          int i ;
+          void *Symbolic, *Numeric ;
+          (void) umfpack_zi_symbolic (n, n, Ap, Ai, Ax, null, &Symbolic, null, null) ;
+          (void) umfpack_zi_numeric (Ap, Ai, Ax, null, Symbolic, &Numeric, null, null) ;
+          umfpack_zi_free_symbolic (&Symbolic) ;
+          (void) umfpack_zi_solve (0, Ap, Ai, Ax, null, x, null, br, bi, 
+                                   Numeric, null, null) ;
+          umfpack_zi_free_numeric (&Numeric) ;
+          for (i = 0; i < n; i++, x+=2) 
+            if (fabs(*x - i - 1.) > 1.e-13)
+              return (1);
+          return (0) ;
+        }
+      ]])],
+      octave_cv_umfpack_separate_split=yes,
+      octave_cv_umfpack_separate_split=no,
+      octave_cv_umfpack_separate_split=yes)
+  ])
+  if test "$cross_compiling" = yes; then
+    AC_MSG_RESULT([$octave_cv_umfpack_separate_split assumed for cross compilation])
+  else
+    AC_MSG_RESULT([$octave_cv_umfpack_separate_split])
+  fi
+  if test "$octave_cv_umfpack_separate_split" = yes; then
+    AC_DEFINE(UMFPACK_SEPARATE_SPLIT, 1, 
+      [Define to 1 if the UMFPACK Complex solver allows matrix and RHS to be split independently.])
+  fi
+])
+dnl
+dnl Check for unordered map headers and whether tr1 namespace is
+dnl required.
+dnl
+AC_DEFUN([OCTAVE_UNORDERED_MAP_HEADERS], [
+  AC_CHECK_HEADERS([unordered_map], [],
+    [AC_CHECK_HEADERS([tr1/unordered_map])])
+  AC_CACHE_CHECK([whether unordered_map requires tr1 namespace], 
+    [octave_cv_header_require_tr1_namespace],
+    [AC_LANG_PUSH(C++)
+    octave_cv_header_require_tr1_namespace=no
+    if test "$ac_cv_header_unordered_map" = "yes"; then
+      ## Have <unordered_map>, but still have to check whether
+      ## tr1 namespace is required (like MSVC, for instance).
+      AC_COMPILE_IFELSE(
+        [AC_LANG_PROGRAM([[
+          #include <unordered_map>
+          ]], [[
+          std::unordered_map<int,int> m;
+        ]])],
+        octave_cv_header_require_tr1_namespace=no, 
+        octave_cv_header_require_tr1_namespace=yes)
+    elif test "$ac_cv_header_tr1_unordered_map" = "yes"; then
+      octave_cv_header_require_tr1_namespace=yes
+    fi
+    AC_LANG_POP(C++)
+  ])
+  if test "$octave_cv_header_require_tr1_namespace" = "yes"; then
+    AC_DEFINE(USE_UNORDERED_MAP_WITH_TR1, 1, 
+      [Define to 1 if unordered_map requires the use of tr1 namespace.])
+  fi
+])
+
+dnl         End of macros written by Octave developers
+dnl ------------------------------------------------------------
+dnl
+
+dnl
+dnl    The following macros were taken from other sources. 
+dnl ------------------------------------------------------------
+
+dnl
 dnl Configure paths for FreeType2
 dnl Marcelo Magallon 2001-10-26, based on gtk.m4 by Owen Taylor
 dnl
@@ -1442,96 +1667,93 @@
 dnl MINIMUM-VERSION is what libtool reports; the default is `7.0.1' (this is
 dnl FreeType 2.0.4).
 dnl
-AC_DEFUN([AC_CHECK_FT2],
-  [dnl Get the cflags and libraries from the freetype-config script
-   dnl
-   AC_ARG_WITH([ft-prefix],
-     dnl don't quote AS_HELP_STRING!
-     AS_HELP_STRING([--with-ft-prefix=PREFIX],
-                    [Prefix where FreeType is installed (optional)]),
-     [ft_config_prefix="$withval"],
-     [ft_config_prefix=""])
-  
-   AC_ARG_WITH([ft-exec-prefix],
-     dnl don't quote AS_HELP_STRING!
-     AS_HELP_STRING([--with-ft-exec-prefix=PREFIX],
-                    [Exec prefix where FreeType is installed (optional)]),
-     [ft_config_exec_prefix="$withval"],
-     [ft_config_exec_prefix=""])
+AC_DEFUN([AC_CHECK_FT2], [
+  dnl
+  dnl Get the cflags and libraries from the freetype-config script
+  dnl
+  AC_ARG_WITH([ft-prefix],
+    [AS_HELP_STRING([--with-ft-prefix=PREFIX],
+                   [Prefix where FreeType is installed (optional)])],
+    [ft_config_prefix="$withval"],
+    [ft_config_prefix=""])
+ 
+  AC_ARG_WITH([ft-exec-prefix],
+    [AS_HELP_STRING([--with-ft-exec-prefix=PREFIX],
+                   [Exec prefix where FreeType is installed (optional)])],
+    [ft_config_exec_prefix="$withval"],
+    [ft_config_exec_prefix=""])
 
-   AC_ARG_ENABLE([freetypetest],
-     dnl don't quote AS_HELP_STRING!
-     AS_HELP_STRING([--disable-freetypetest],
-                    [Do not try to compile and run a test FreeType program]),
-     [],
-     [enable_fttest=yes])
+  AC_ARG_ENABLE([freetypetest],
+    [AS_HELP_STRING([--disable-freetypetest],
+                    [Do not try to compile and run a test FreeType program])],
+    [],
+    [enable_fttest=yes])
 
-   if test x$ft_config_exec_prefix != x ; then
-     ft_config_args="$ft_config_args --exec-prefix=$ft_config_exec_prefix"
-     if test x${FT2_CONFIG+set} != xset ; then
-       FT2_CONFIG=$ft_config_exec_prefix/bin/freetype-config
-     fi
-   fi
+  if test x$ft_config_exec_prefix != x ; then
+    ft_config_args="$ft_config_args --exec-prefix=$ft_config_exec_prefix"
+    if test x${FT2_CONFIG+set} != xset ; then
+      FT2_CONFIG=$ft_config_exec_prefix/bin/freetype-config
+    fi
+  fi
 
-   if test x$ft_config_prefix != x ; then
-     ft_config_args="$ft_config_args --prefix=$ft_config_prefix"
-     if test x${FT2_CONFIG+set} != xset ; then
-       FT2_CONFIG=$ft_config_prefix/bin/freetype-config
-     fi
-   fi
+  if test x$ft_config_prefix != x ; then
+    ft_config_args="$ft_config_args --prefix=$ft_config_prefix"
+    if test x${FT2_CONFIG+set} != xset ; then
+      FT2_CONFIG=$ft_config_prefix/bin/freetype-config
+    fi
+  fi
 
-   AC_PATH_PROG([FT2_CONFIG], [freetype-config], [no])
+  AC_PATH_PROG([FT2_CONFIG], [freetype-config], [no])
 
-   min_ft_version=m4_if([$1], [], [7.0.1], [$1])
-   AC_MSG_CHECKING([for FreeType -- version >= $min_ft_version])
-   no_ft=""
-   if test "$FT2_CONFIG" = "no" ; then
-     no_ft=yes
-   else
-     FT2_CFLAGS=`$FT2_CONFIG $ft_config_args --cflags`
-     FT2_LIBS=`$FT2_CONFIG $ft_config_args --libs`
-     ft_config_major_version=`$FT2_CONFIG $ft_config_args --version | \
-       sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
-     ft_config_minor_version=`$FT2_CONFIG $ft_config_args --version | \
-       sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
-     ft_config_micro_version=`$FT2_CONFIG $ft_config_args --version | \
-       sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
-     ft_min_major_version=`echo $min_ft_version | \
-       sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
-     ft_min_minor_version=`echo $min_ft_version | \
-       sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
-     ft_min_micro_version=`echo $min_ft_version | \
-       sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
-     if test x$enable_fttest = xyes ; then
-       ft_config_is_lt=""
-       if test $ft_config_major_version -lt $ft_min_major_version ; then
-         ft_config_is_lt=yes
-       else
-         if test $ft_config_major_version -eq $ft_min_major_version ; then
-           if test $ft_config_minor_version -lt $ft_min_minor_version ; then
-             ft_config_is_lt=yes
-           else
+  min_ft_version=m4_if([$1], [], [7.0.1], [$1])
+  AC_MSG_CHECKING([for FreeType -- version >= $min_ft_version])
+  no_ft=""
+  if test "$FT2_CONFIG" = "no" ; then
+    no_ft=yes
+  else
+    FT2_CFLAGS=`$FT2_CONFIG $ft_config_args --cflags`
+    FT2_LIBS=`$FT2_CONFIG $ft_config_args --libs`
+    ft_config_major_version=`$FT2_CONFIG $ft_config_args --version | \
+      sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
+    ft_config_minor_version=`$FT2_CONFIG $ft_config_args --version | \
+      sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
+    ft_config_micro_version=`$FT2_CONFIG $ft_config_args --version | \
+      sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
+    ft_min_major_version=`echo $min_ft_version | \
+      sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
+    ft_min_minor_version=`echo $min_ft_version | \
+      sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
+    ft_min_micro_version=`echo $min_ft_version | \
+      sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
+    if test x$enable_fttest = xyes ; then
+      ft_config_is_lt=""
+      if test $ft_config_major_version -lt $ft_min_major_version ; then
+        ft_config_is_lt=yes
+      else
+        if test $ft_config_major_version -eq $ft_min_major_version ; then
+          if test $ft_config_minor_version -lt $ft_min_minor_version ; then
+            ft_config_is_lt=yes
+          else
             if test $ft_config_minor_version -eq $ft_min_minor_version ; then
-               if test $ft_config_micro_version -lt $ft_min_micro_version ; then
-                 ft_config_is_lt=yes
-               fi
-             fi
-           fi
-         fi
-       fi
-       if test x$ft_config_is_lt = xyes ; then
-         no_ft=yes
-       else
-         ac_save_CFLAGS="$CFLAGS"
-         ac_save_LIBS="$LIBS"
-         CFLAGS="$CFLAGS $FT2_CFLAGS"
-         LIBS="$FT2_LIBS $LIBS"
-
-         dnl
-         dnl Sanity checks for the results of freetype-config to some extent.
-         dnl
-         AC_RUN_IFELSE([
-             AC_LANG_SOURCE([[
+              if test $ft_config_micro_version -lt $ft_min_micro_version ; then
+                ft_config_is_lt=yes
+              fi
+            fi
+          fi
+        fi
+      fi
+      if test x$ft_config_is_lt = xyes ; then
+        no_ft=yes
+      else
+        ac_save_CFLAGS="$CFLAGS"
+        ac_save_LIBS="$LIBS"
+        CFLAGS="$CFLAGS $FT2_CFLAGS"
+        LIBS="$FT2_LIBS $LIBS"
+        dnl
+        dnl Sanity checks for the results of freetype-config to some extent.
+        dnl
+        AC_RUN_IFELSE([
+          AC_LANG_SOURCE([[
 
 #include <ft2build.h>
 #include FT_FREETYPE_H
@@ -1555,206 +1777,64 @@
   }
 }
 
-             ]])
-           ],
-           [],
-           [no_ft=yes],
-           [echo $ECHO_N "cross compiling; assuming OK... $ECHO_C"])
+              ]]
+            )],
+            [],
+            [no_ft=yes],
+            [echo $ECHO_N "cross compiling; assuming OK... $ECHO_C"])
 
-         CFLAGS="$ac_save_CFLAGS"
-         LIBS="$ac_save_LIBS"
-       fi             dnl test $ft_config_version -lt $ft_min_version
-     fi               dnl test x$enable_fttest = xyes
-   fi                 dnl test "$FT2_CONFIG" = "no"
+        CFLAGS="$ac_save_CFLAGS"
+        LIBS="$ac_save_LIBS"
+      fi             dnl test $ft_config_version -lt $ft_min_version
+    fi               dnl test x$enable_fttest = xyes
+  fi                 dnl test "$FT2_CONFIG" = "no"
 
-   if test x$no_ft = x ; then
-     AC_MSG_RESULT([yes])
-     m4_if([$2], [], [:], [$2])
-   else
-     AC_MSG_RESULT([no])
-     if test "$FT2_CONFIG" = "no" ; then
-     warn_ft2_config = "
+  if test x$no_ft = x ; then
+    AC_MSG_RESULT([yes])
+    m4_if([$2], [], [:], [$2])
+  else
+    AC_MSG_RESULT([no])
+    if test "$FT2_CONFIG" = "no" ; then
+      warn_ft2_config = "
 
 The freetype-config script installed by FreeType 2 could not be found.
 If FreeType 2 was installed in PREFIX, make sure PREFIX/bin is in your
 path, or set the FT2_CONFIG environment variable to the full path to
 freetype-config.
 "
-       OCTAVE_CONFIGURE_WARNING([warn_ft2_config])
-     else
-       if test x$ft_config_is_lt = xyes ; then
-       warn_ft2_too_old="
+      OCTAVE_CONFIGURE_WARNING([warn_ft2_config])
+    else
+      if test x$ft_config_is_lt = xyes ; then
+        warn_ft2_too_old="
 
 Your installed version of the FreeType 2 library is too old. If you
 have different versions of FreeType 2, make sure that correct values
 for --with-ft-prefix or --with-ft-exec-prefix are used, or set the
 FT2_CONFIG environment variable to the full path to freetype-config.
 "
-         OCTAVE_CONFIGURE_WARNING([warn_ft2_too_old])
-       else
-         warn_ft2_failed="
+        OCTAVE_CONFIGURE_WARNING([warn_ft2_too_old])
+      else
+        warn_ft2_failed="
 
 The FreeType test program failed to run. If your system uses shared
 libraries and they are installed outside the normal system library
 path, make sure the variable LD_LIBRARY_PATH (or whatever is
 appropiate for your system) is correctly set.
 "
-         OCTAVE_CONFIGURE_WARNING([warn_ft2_failed])
-       fi
-     fi
+        OCTAVE_CONFIGURE_WARNING([warn_ft2_failed])
+      fi
+    fi
 
-     FT2_CFLAGS=""
-     FT2_LIBS=""
-     m4_if([$3], [], [:], [$3])
-   fi
+    FT2_CFLAGS=""
+    FT2_LIBS=""
+    m4_if([$3], [], [:], [$3])
+  fi
 
-   AC_SUBST([FT2_CFLAGS])
-   AC_SUBST([FT2_LIBS])])
+  AC_SUBST([FT2_CFLAGS])
+  AC_SUBST([FT2_LIBS])
+])
 dnl end of freetype2.m4
 
-dnl Check whether a math mapper function is available in <cmath>.
-dnl Will define HAVE_CMATH_FUNC if there is a double variant and
-dnl HAVE_CMATH_FUNCF if there is a float variant.
-dnl Currently capable of checking for functions with single 
-dnl argument and returning bool/int/real.
-AC_DEFUN([OCTAVE_CMATH_FUNC],[
-AC_MSG_CHECKING([for std::$1 in <cmath>])
-AC_LANG_PUSH(C++)
-AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
-#include <cmath>
-void take_func (bool (*func) (double x));
-void take_func (int (*func) (double x));
-void take_func (double (*func) (double x));
-]],
-[[
-take_func(std::$1);
-]])],
-[AC_MSG_RESULT([yes])
- AC_DEFINE(HAVE_CMATH_[]AS_TR_CPP($1),1,[Define if <cmath> provides $1])],
-[AC_MSG_RESULT([no])])
-AC_MSG_CHECKING([for std::$1 (float variant) in <cmath>])
-AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
-#include <cmath>
-void take_func (bool (*func) (float x));
-void take_func (int (*func) (float x));
-void take_func (float (*func) (float x));
-]],
-[[
-take_func(std::$1);
-]])],
-[AC_MSG_RESULT([yes])
- AC_DEFINE(HAVE_CMATH_[]AS_TR_CPP($1)F,1,[Define if <cmath> provides float variant of $1])],
-[AC_MSG_RESULT([no])])
-AC_LANG_POP(C++)
-])
-
-dnl Check whether fast signed integer arithmetics using bit tricks
-dnl can be used in oct-inttypes.h. Defines HAVE_FAST_INT_OPS if
-dnl the following conditions hold:
-dnl 1. Signed numbers are represented by twos complement
-dnl    (see <http://en.wikipedia.org/wiki/Two%27s_complement>)
-dnl 2. static_cast to unsigned int counterpart works like interpreting
-dnl    the signed bit pattern as unsigned (and is thus zero-cost).
-dnl 3. Signed addition and subtraction yield the same bit results as unsigned.
-dnl    (We use casts to prevent optimization interference, so there is no
-dnl     need for things like -ftrapv).
-dnl 4. Bit operations on signed integers work like on unsigned integers,
-dnl    except for the shifts. Shifts are arithmetic.
-dnl
-AC_DEFUN([OCTAVE_FAST_INT_OPS],
-[AC_CACHE_CHECK([whether fast integer arithmetics is usable],
-octave_cv_fast_int_ops,
-[AC_LANG_PUSH(C++)
-AC_RUN_IFELSE([AC_LANG_PROGRAM([[
-#include <limits>
-template<class UT, class ST>
-static bool 
-do_test (UT, ST)
-{
-  volatile ST s = std::numeric_limits<ST>::min () / 3;
-  volatile UT u = static_cast<UT> (s);
-  if (*(reinterpret_cast<volatile ST *> (&u)) != s) return true;
-  
-  u = 0; u = ~u;
-  if (*(reinterpret_cast<volatile ST *> (&u)) != -1) return true;
-  
-  ST sx, sy;
-  sx = std::numeric_limits<ST>::max () / 2 + 1;
-  sy = std::numeric_limits<ST>::max () / 2 + 2;
-  if (static_cast<ST> (static_cast<UT> (sx) + static_cast<UT> (sy))
-      != std::numeric_limits<ST>::min () + 1) return true;
-  if (static_cast<ST> (static_cast<UT> (sx) - static_cast<UT> (sy))
-      != -1) return true;
-  
-  if ((sx & sy) != (static_cast<UT> (sx) & static_cast<UT> (sy)))
-    return true;
-  if ((sx | sy) != (static_cast<UT> (sx) | static_cast<UT> (sy)))
-    return true;
-  if ((sx ^ sy) != (static_cast<UT> (sx) ^ static_cast<UT> (sy)))
-    return true;
-  if ((-1 >> 1) != -1) return true;
-  return false;
-}
-
-#define DO_TEST(T) \
-if (do_test (static_cast<unsigned T> (0), static_cast<signed T> (0))) \
-  return sizeof (T);
-]],[[
-  DO_TEST(char)
-  DO_TEST(short)
-  DO_TEST(int)
-  DO_TEST(long)
-#if (defined(HAVE_LONG_LONG_INT) && defined(HAVE_UNSIGNED_LONG_LONG_INT))
-  DO_TEST(long long)
-#endif
-]])],
-   [octave_cv_fast_int_ops=yes],
-   [octave_cv_fast_int_ops=no],
-   [octave_cv_fast_int_ops=yes])
-AC_LANG_POP(C++)])
-if test $octave_cv_fast_int_ops = yes; then
-  AC_DEFINE(HAVE_FAST_INT_OPS, 1,
-    [Define if signed integers use two's complement])
-fi
-])
-dnl
-dnl Check to see if the compiler and the linker can handle the flags
-dnl "-framework $1" for the given prologue $2 and the given body $3 of
-dnl a source file.  Arguments 2 and 3 optionally can also be empty.
-dnl Add options (lower case letters $1) "--with-framework-$1" and
-dnl "--without-framework-$1". If this test is successful then perform
-dnl $4, otherwise do $5.
-dnl
-dnl OCTAVE_HAVE_FRAMEWORK
-AC_DEFUN([OCTAVE_HAVE_FRAMEWORK], [
-  AC_MSG_CHECKING([whether ${LD-ld} accepts -framework $1])
-  AC_CACHE_VAL(octave_cv_framework_$1, [
-    XLDFLAGS="$LDFLAGS"
-    LDFLAGS="$LDFLAGS -framework $1"
-    AC_LANG_PUSH(C++)
-    AC_LINK_IFELSE([AC_LANG_PROGRAM([$2], [$3])],
-      eval "octave_cv_framework_$1=yes",
-      eval "octave_cv_framework_$1=no")
-    AC_LANG_POP(C++)
-    LDFLAGS="$XLDFLAGS"
-  ])
-  if test "$octave_cv_framework_$1" = "yes"; then
-    AC_MSG_RESULT(yes)
-    AC_ARG_WITH(framework-m4_tolower($1),
-      [AS_HELP_STRING([--without-framework-m4_tolower($1)], 
-        [don't use framework $1])],
-         with_have_framework=$withval, with_have_framework="yes")
-    if test "$with_have_framework" = "yes"; then
-      [$4]
-    else
-      AC_MSG_NOTICE([framework rejected by --without-framework-m4_tolower($1)])
-      [$5]
-    fi
-  else
-    AC_MSG_RESULT(no)
-    [$5]
-  fi
-])
 
 ##############################################################################
 ##############################################################################
@@ -1916,12 +1996,5 @@
 	ifelse([$3], , :, [$3])
 fi[]dnl
 ])# PKG_CHECK_MODULES
-
-dnl
-dnl External macros.
-dnl
+dnl end of pkg.m4
 
-m4_include([m4/ax_pthread.m4])
-m4_include([m4/ax_blas.m4])
-m4_include([m4/ax_blas_f77_func.m4])
-m4_include([m4/ax_lapack.m4])
--- a/m4/ax_blas.m4
+++ b/m4/ax_blas.m4
@@ -63,7 +63,7 @@
 #   modified version of the Autoconf Macro, you may extend this special
 #   exception to the GPL to apply to your modified version as well.
 
-#serial 11
+#serial 12
 
 AU_ALIAS([ACX_BLAS], [AX_BLAS])
 AC_DEFUN([AX_BLAS], [
@@ -130,7 +130,7 @@
 
 # BLAS in Intel MKL library?
 if test $ax_blas_ok = no; then
-	AC_CHECK_LIB(mkl, $sgemm, [ax_blas_ok=yes;BLAS_LIBS="-lmkl"])
+	AC_CHECK_LIB(mkl, $sgemm, [ax_blas_ok=yes;BLAS_LIBS="-lmkl -lguide -lpthread"],,[-lguide -lpthread])
 fi
 
 # BLAS in Apple vecLib library?
--- a/m4/ax_blas_f77_func.m4
+++ b/m4/ax_blas_f77_func.m4
@@ -52,7 +52,7 @@
 #   modified version of the Autoconf Macro, you may extend this special
 #   exception to the GPL to apply to your modified version as well.
 
-#serial 5
+#serial 8
 
 AU_ALIAS([ACX_BLAS_F77_FUNC], [AX_BLAS_F77_FUNC])
 AC_DEFUN([AX_BLAS_F77_FUNC], [
new file mode 100644
--- /dev/null
+++ b/m4/ax_compare_version.m4
@@ -0,0 +1,177 @@
+# ===========================================================================
+#    http://www.gnu.org/software/autoconf-archive/ax_compare_version.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_COMPARE_VERSION(VERSION_A, OP, VERSION_B, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
+#
+# DESCRIPTION
+#
+#   This macro compares two version strings. Due to the various number of
+#   minor-version numbers that can exist, and the fact that string
+#   comparisons are not compatible with numeric comparisons, this is not
+#   necessarily trivial to do in a autoconf script. This macro makes doing
+#   these comparisons easy.
+#
+#   The six basic comparisons are available, as well as checking equality
+#   limited to a certain number of minor-version levels.
+#
+#   The operator OP determines what type of comparison to do, and can be one
+#   of:
+#
+#    eq  - equal (test A == B)
+#    ne  - not equal (test A != B)
+#    le  - less than or equal (test A <= B)
+#    ge  - greater than or equal (test A >= B)
+#    lt  - less than (test A < B)
+#    gt  - greater than (test A > B)
+#
+#   Additionally, the eq and ne operator can have a number after it to limit
+#   the test to that number of minor versions.
+#
+#    eq0 - equal up to the length of the shorter version
+#    ne0 - not equal up to the length of the shorter version
+#    eqN - equal up to N sub-version levels
+#    neN - not equal up to N sub-version levels
+#
+#   When the condition is true, shell commands ACTION-IF-TRUE are run,
+#   otherwise shell commands ACTION-IF-FALSE are run. The environment
+#   variable 'ax_compare_version' is always set to either 'true' or 'false'
+#   as well.
+#
+#   Examples:
+#
+#     AX_COMPARE_VERSION([3.15.7],[lt],[3.15.8])
+#     AX_COMPARE_VERSION([3.15],[lt],[3.15.8])
+#
+#   would both be true.
+#
+#     AX_COMPARE_VERSION([3.15.7],[eq],[3.15.8])
+#     AX_COMPARE_VERSION([3.15],[gt],[3.15.8])
+#
+#   would both be false.
+#
+#     AX_COMPARE_VERSION([3.15.7],[eq2],[3.15.8])
+#
+#   would be true because it is only comparing two minor versions.
+#
+#     AX_COMPARE_VERSION([3.15.7],[eq0],[3.15])
+#
+#   would be true because it is only comparing the lesser number of minor
+#   versions of the two values.
+#
+#   Note: The characters that separate the version numbers do not matter. An
+#   empty string is the same as version 0. OP is evaluated by autoconf, not
+#   configure, so must be a string, not a variable.
+#
+#   The author would like to acknowledge Guido Draheim whose advice about
+#   the m4_case and m4_ifvaln functions make this macro only include the
+#   portions necessary to perform the specific comparison specified by the
+#   OP argument in the final configure script.
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Tim Toolan <toolan@ele.uri.edu>
+#
+#   Copying and distribution of this file, with or without modification, are
+#   permitted in any medium without royalty provided the copyright notice
+#   and this notice are preserved. This file is offered as-is, without any
+#   warranty.
+
+#serial 11
+
+dnl #########################################################################
+AC_DEFUN([AX_COMPARE_VERSION], [
+  AC_REQUIRE([AC_PROG_AWK])
+
+  # Used to indicate true or false condition
+  ax_compare_version=false
+
+  # Convert the two version strings to be compared into a format that
+  # allows a simple string comparison.  The end result is that a version
+  # string of the form 1.12.5-r617 will be converted to the form
+  # 0001001200050617.  In other words, each number is zero padded to four
+  # digits, and non digits are removed.
+  AS_VAR_PUSHDEF([A],[ax_compare_version_A])
+  A=`echo "$1" | sed -e 's/\([[0-9]]*\)/Z\1Z/g' \
+                     -e 's/Z\([[0-9]]\)Z/Z0\1Z/g' \
+                     -e 's/Z\([[0-9]][[0-9]]\)Z/Z0\1Z/g' \
+                     -e 's/Z\([[0-9]][[0-9]][[0-9]]\)Z/Z0\1Z/g' \
+                     -e 's/[[^0-9]]//g'`
+
+  AS_VAR_PUSHDEF([B],[ax_compare_version_B])
+  B=`echo "$3" | sed -e 's/\([[0-9]]*\)/Z\1Z/g' \
+                     -e 's/Z\([[0-9]]\)Z/Z0\1Z/g' \
+                     -e 's/Z\([[0-9]][[0-9]]\)Z/Z0\1Z/g' \
+                     -e 's/Z\([[0-9]][[0-9]][[0-9]]\)Z/Z0\1Z/g' \
+                     -e 's/[[^0-9]]//g'`
+
+  dnl # In the case of le, ge, lt, and gt, the strings are sorted as necessary
+  dnl # then the first line is used to determine if the condition is true.
+  dnl # The sed right after the echo is to remove any indented white space.
+  m4_case(m4_tolower($2),
+  [lt],[
+    ax_compare_version=`echo "x$A
+x$B" | sed 's/^ *//' | sort -r | sed "s/x${A}/false/;s/x${B}/true/;1q"`
+  ],
+  [gt],[
+    ax_compare_version=`echo "x$A
+x$B" | sed 's/^ *//' | sort | sed "s/x${A}/false/;s/x${B}/true/;1q"`
+  ],
+  [le],[
+    ax_compare_version=`echo "x$A
+x$B" | sed 's/^ *//' | sort | sed "s/x${A}/true/;s/x${B}/false/;1q"`
+  ],
+  [ge],[
+    ax_compare_version=`echo "x$A
+x$B" | sed 's/^ *//' | sort -r | sed "s/x${A}/true/;s/x${B}/false/;1q"`
+  ],[
+    dnl Split the operator from the subversion count if present.
+    m4_bmatch(m4_substr($2,2),
+    [0],[
+      # A count of zero means use the length of the shorter version.
+      # Determine the number of characters in A and B.
+      ax_compare_version_len_A=`echo "$A" | $AWK '{print(length)}'`
+      ax_compare_version_len_B=`echo "$B" | $AWK '{print(length)}'`
+
+      # Set A to no more than B's length and B to no more than A's length.
+      A=`echo "$A" | sed "s/\(.\{$ax_compare_version_len_B\}\).*/\1/"`
+      B=`echo "$B" | sed "s/\(.\{$ax_compare_version_len_A\}\).*/\1/"`
+    ],
+    [[0-9]+],[
+      # A count greater than zero means use only that many subversions
+      A=`echo "$A" | sed "s/\(\([[0-9]]\{4\}\)\{m4_substr($2,2)\}\).*/\1/"`
+      B=`echo "$B" | sed "s/\(\([[0-9]]\{4\}\)\{m4_substr($2,2)\}\).*/\1/"`
+    ],
+    [.+],[
+      AC_WARNING(
+        [illegal OP numeric parameter: $2])
+    ],[])
+
+    # Pad zeros at end of numbers to make same length.
+    ax_compare_version_tmp_A="$A`echo $B | sed 's/./0/g'`"
+    B="$B`echo $A | sed 's/./0/g'`"
+    A="$ax_compare_version_tmp_A"
+
+    # Check for equality or inequality as necessary.
+    m4_case(m4_tolower(m4_substr($2,0,2)),
+    [eq],[
+      test "x$A" = "x$B" && ax_compare_version=true
+    ],
+    [ne],[
+      test "x$A" != "x$B" && ax_compare_version=true
+    ],[
+      AC_WARNING([illegal OP parameter: $2])
+    ])
+  ])
+
+  AS_VAR_POPDEF([A])dnl
+  AS_VAR_POPDEF([B])dnl
+
+  dnl # Execute ACTION-IF-TRUE / ACTION-IF-FALSE.
+  if test "$ax_compare_version" = "true" ; then
+    m4_ifvaln([$4],[$4],[:])dnl
+    m4_ifvaln([$5],[else $5])dnl
+  fi
+]) dnl AX_COMPARE_VERSION
--- a/m4/ax_pthread.m4
+++ b/m4/ax_pthread.m4
@@ -33,6 +33,10 @@
 #   has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to that name
 #   (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
 #
+#   Also HAVE_PTHREAD_PRIO_INHERIT is defined if pthread is found and the
+#   PTHREAD_PRIO_INHERIT symbol is defined when compiling with
+#   PTHREAD_CFLAGS.
+#
 #   ACTION-IF-FOUND is a list of shell commands to run if a threads library
 #   is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it
 #   is not found. If ACTION-IF-FOUND is not specified, the default action
@@ -45,9 +49,12 @@
 #   Alejandro Forero Cuervo to the autoconf macro repository. We are also
 #   grateful for the helpful feedback of numerous users.
 #
+#   Updated for Autoconf 2.68 by Daniel Richard G.
+#
 # LICENSE
 #
 #   Copyright (c) 2008 Steven G. Johnson <stevenj@alum.mit.edu>
+#   Copyright (c) 2011 Daniel Richard G. <skunk@iSKUNK.ORG>
 #
 #   This program is free software: you can redistribute it and/or modify it
 #   under the terms of the GNU General Public License as published by the
@@ -75,13 +82,12 @@
 #   modified version of the Autoconf Macro, you may extend this special
 #   exception to the GPL to apply to your modified version as well.
 
-#serial 9
+#serial 18
 
 AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD])
 AC_DEFUN([AX_PTHREAD], [
 AC_REQUIRE([AC_CANONICAL_HOST])
-AC_LANG_SAVE
-AC_LANG_C
+AC_LANG_PUSH([C])
 ax_pthread_ok=no
 
 # We used to check for pthread.h first, but this fails if pthread.h
@@ -139,8 +145,8 @@
 # --thread-safe: KAI C++
 # pthread-config: use pthread-config program (for GNU Pth library)
 
-case "${host_cpu}-${host_os}" in
-        *solaris*)
+case ${host_os} in
+        solaris*)
 
         # On Solaris (at least, for some versions), libc contains stubbed
         # (non-functional) versions of the pthreads routines, so link-based
@@ -153,9 +159,9 @@
         ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags"
         ;;
 
-	*-darwin*)
-	ax_pthread_flags="-pthread $ax_pthread_flags"
-	;;
+        darwin*)
+        ax_pthread_flags="-pthread $ax_pthread_flags"
+        ;;
 esac
 
 if test x"$ax_pthread_ok" = xno; then
@@ -171,12 +177,12 @@
                 PTHREAD_CFLAGS="$flag"
                 ;;
 
-		pthread-config)
-		AC_CHECK_PROG(ax_pthread_config, pthread-config, yes, no)
-		if test x"$ax_pthread_config" = xno; then continue; fi
-		PTHREAD_CFLAGS="`pthread-config --cflags`"
-		PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
-		;;
+                pthread-config)
+                AC_CHECK_PROG(ax_pthread_config, pthread-config, yes, no)
+                if test x"$ax_pthread_config" = xno; then continue; fi
+                PTHREAD_CFLAGS="`pthread-config --cflags`"
+                PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
+                ;;
 
                 *)
                 AC_MSG_CHECKING([for the pthreads library -l$flag])
@@ -198,16 +204,17 @@
         # pthread_cleanup_push because it is one of the few pthread
         # functions on Solaris that doesn't have a non-functional libc stub.
         # We try pthread_create on general principles.
-        AC_TRY_LINK([#include <pthread.h>
-	             static void routine(void* a) {a=0;}
-	             static void* start_routine(void* a) {return a;}],
-                    [pthread_t th; pthread_attr_t attr;
-                     pthread_create(&th,0,start_routine,0);
-                     pthread_join(th, 0);
-                     pthread_attr_init(&attr);
-                     pthread_cleanup_push(routine, 0);
-                     pthread_cleanup_pop(0); ],
-                    [ax_pthread_ok=yes])
+        AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>
+                        static void routine(void *a) { a = 0; }
+                        static void *start_routine(void *a) { return a; }],
+                       [pthread_t th; pthread_attr_t attr;
+                        pthread_create(&th, 0, start_routine, 0);
+                        pthread_join(th, 0);
+                        pthread_attr_init(&attr);
+                        pthread_cleanup_push(routine, 0);
+                        pthread_cleanup_pop(0) /* ; */])],
+                [ax_pthread_ok=yes],
+                [])
 
         LIBS="$save_LIBS"
         CFLAGS="$save_CFLAGS"
@@ -230,12 +237,14 @@
         CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
 
         # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
-	AC_MSG_CHECKING([for joinable pthread attribute])
-	attr_name=unknown
-	for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
-	    AC_TRY_LINK([#include <pthread.h>], [int attr=$attr; return attr;],
-                        [attr_name=$attr; break])
-	done
+        AC_MSG_CHECKING([for joinable pthread attribute])
+        attr_name=unknown
+        for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
+            AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>],
+                           [int attr = $attr; return attr /* ; */])],
+                [attr_name=$attr; break],
+                [])
+        done
         AC_MSG_RESULT($attr_name)
         if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
             AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name,
@@ -245,24 +254,41 @@
 
         AC_MSG_CHECKING([if more special flags are required for pthreads])
         flag=no
-        case "${host_cpu}-${host_os}" in
-            *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";;
-            *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";;
+        case ${host_os} in
+            aix* | freebsd* | darwin*) flag="-D_THREAD_SAFE";;
+            osf* | hpux*) flag="-D_REENTRANT";;
+            solaris*)
+            if test "$GCC" = "yes"; then
+                flag="-D_REENTRANT"
+            else
+                flag="-mt -D_REENTRANT"
+            fi
+            ;;
         esac
         AC_MSG_RESULT(${flag})
         if test "x$flag" != xno; then
             PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
         fi
 
+        AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT],
+            ax_cv_PTHREAD_PRIO_INHERIT, [
+                AC_LINK_IFELSE([
+                    AC_LANG_PROGRAM([[#include <pthread.h>]], [[int i = PTHREAD_PRIO_INHERIT;]])],
+                    [ax_cv_PTHREAD_PRIO_INHERIT=yes],
+                    [ax_cv_PTHREAD_PRIO_INHERIT=no])
+            ])
+        AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes"],
+            AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], 1, [Have PTHREAD_PRIO_INHERIT.]))
+
         LIBS="$save_LIBS"
         CFLAGS="$save_CFLAGS"
 
         # More AIX lossage: must compile with xlc_r or cc_r
-	if test x"$GCC" != xyes; then
+        if test x"$GCC" != xyes; then
           AC_CHECK_PROGS(PTHREAD_CC, xlc_r cc_r, ${CC})
         else
           PTHREAD_CC=$CC
-	fi
+        fi
 else
         PTHREAD_CC="$CC"
 fi
@@ -279,5 +305,5 @@
         ax_pthread_ok=no
         $2
 fi
-AC_LANG_RESTORE
+AC_LANG_POP
 ])dnl AX_PTHREAD
--- a/m4/module.mk
+++ b/m4/module.mk
@@ -2,6 +2,7 @@
   m4/module.mk \
   m4/ax_blas.m4 \
   m4/ax_blas_f77_func.m4 \
+  m4/ax_compare_version.m4 \
   m4/ax_lapack.m4	\
   m4/ax_pthread.m4 \
   m4/gnulib-cache.m4 \
--- a/run-octave.in
+++ b/run-octave.in
@@ -42,6 +42,8 @@
 d2_path=`echo "$d2_list" | $AWK '{ t = (s $0); s = t; } END { sub (/:$/, "", s); print s; }'`
 d3_path=`echo "$d3_list" | $AWK '{ t = (s $0); s = t; } END { sub (/:$/, "", s); print s; }'`
 
+octave_executable="$builddir/src/octave"
+
 LOADPATH="$d1_path:$d2_path:$d3_path"
 IMAGEPATH="$top_srcdir/scripts/image"
 DOCFILE="$builddir/doc/interpreter/doc-cache"
@@ -64,11 +66,15 @@
   elif [ "x$1" = "x-strace" ]; then
     driver="strace -o octave.trace"
     shift
+  elif [ "x$1" = "x-cli" ]; then
+    octave_executable="$builddir/src/octave-cli"
+    shift
   fi
 fi
 
 OCTAVE_SITE_INITFILE="$top_srcdir/scripts/startup/main-rcfile" \
+OCTAVE_DEFAULT_QT_SETTINGS="$top_srcdir/gui/default-qt-settings" \
   exec $builddir/libtool --mode=execute $driver \
-    "$builddir/src/octave" --no-init-path --path="$LOADPATH" \
+    "$octave_executable" --no-init-path --path="$LOADPATH" \
     --image-path="$IMAGEPATH" --doc-cache-file="$DOCFILE" \
     --texi-macros-file="$TEXIMACROSFILE" --info-file="$INFOFILE" "$@"
--- a/scripts/Makefile.am
+++ b/scripts/Makefile.am
@@ -371,6 +371,12 @@
 	  done ) | ../run-octave -qf
 .PHONY: check-missing-semicolon
 
+## Add rule to generate ctags.
+## Automake would normally generate such a rule, but only if there is a
+## xxx_SOURCES target
+ctags:
+	ctags $(addprefix $(srcdir)/, $(FCN_FILES)) $(GEN_FCN_FILES)
+
 install-data-local: install-startup-files install-pkg-add
 
 uninstall-local: uninstall-startup-files uninstall-pkg-add
--- a/scripts/geometry/voronoi.m
+++ b/scripts/geometry/voronoi.m
@@ -126,8 +126,8 @@
 
   xbox = [xmin - scale * xdelta; xmin - scale * xdelta; ...
           xmax + scale * xdelta; xmax + scale * xdelta];
-  ybox = [xmin - scale * xdelta; xmax + scale * xdelta; ...
-          xmax + scale * xdelta; xmin - scale * xdelta];
+  ybox = [ymin - scale * ydelta; ymax + scale * ydelta; ...
+          ymax + scale * ydelta; ymin - scale * ydelta];
 
   [p, c, infi] = __voronoi__ ("voronoi",
                               [[x(:) ; xbox(:)], [y(:); ybox(:)]],
--- a/scripts/help/help.m
+++ b/scripts/help/help.m
@@ -19,6 +19,7 @@
 ## -*- texinfo -*-
 ## @deftypefn  {Command} {} help @var{name}
 ## @deftypefnx {Command} {} help @code{--list}
+## @deftypefnx {Command} {} help @code{.}
 ## Display the help text for @var{name}.   For example, the command
 ## @kbd{help help} prints a short message describing the @code{help}
 ## command.
@@ -27,6 +28,9 @@
 ## keywords, built-in functions, and loadable functions available
 ## in the current session of Octave.
 ##
+## Given the single argument @code{.}, list all operators available
+## in the current session of Octave.
+##
 ## If invoked without any arguments, @code{help} display instructions
 ## on how to access help from the command line.
 ##
@@ -68,6 +72,16 @@
       return;
     endif
 
+    if (strcmp (name, "."))
+      tmp = do_list_operators ();
+      if (nargout == 0)
+        printf ("%s", tmp);
+      else
+        retval = tmp;
+      endif
+      return;
+    endif
+
     ## Get help text
     [text, format] = get_help_text (name);
 
@@ -106,10 +120,15 @@
 
 endfunction
 
+function retval = do_list_operators ()
+  
+  retval = sprintf ("*** operators:\n\n%s\n\n",
+                       list_in_columns (__operators__ ()));
+endfunction
+
 function retval = do_list_functions ()
 
-  operators = sprintf ("*** operators:\n\n%s\n\n",
-                       list_in_columns (__operators__ ()));
+  operators = do_list_operators ();
 
   keywords = sprintf ("*** keywords:\n\n%s\n\n",
                       list_in_columns (__keywords__ ()));
--- a/scripts/help/type.m
+++ b/scripts/help/type.m
@@ -118,7 +118,7 @@
 %! typestr = typestr{1}(1:17);
 %! assert (typestr, "var is a variable");
 
-%!assert (type ("dot"){1}, "dot is a dynamically-linked function")
+%!assert (type ("amd"){1}, "amd is a dynamically-linked function")
 %!assert (type ("cat"){1}, "cat is a built-in function")
 %!assert (type ("+"){1}, "+ is an operator")
 %!assert (type ("end"){1}, "end is a keyword")
--- a/scripts/help/unimplemented.m
+++ b/scripts/help/unimplemented.m
@@ -38,7 +38,7 @@
     txt = ["quad2d is not implemented.  Consider using dblquad."];
 
   case "gsvd"
-    txt = ["gsvd is not currently part of core Octave.  See the ",
+    txt = ["gsvd is not currently part of core Octave.  See the ",...
     "linear-algebra package at @url{http://octave.sf.net/linear-algebra/}."];
 
   case "linprog"
--- a/scripts/help/which.m
+++ b/scripts/help/which.m
@@ -59,8 +59,8 @@
 %! str = which ("ls");
 %! assert (str(end-17:end), strcat ("miscellaneous", filesep (), "ls.m"));
 %!test
-%! str = which ("dot");
-%! assert (str(end-6:end), "dot.oct");
+%! str = which ("amd");
+%! assert (str(end-6:end), "amd.oct");
 
 %!assert (which ("_NO_SUCH_NAME_"), "")
 
new file mode 100644
--- /dev/null
+++ b/scripts/image/cmpermute.m
@@ -0,0 +1,144 @@
+## Copyright (C) 2004 Josep Mones i Teixidor
+## Copyright (C) 2012 Rik Wehbring 
+##
+## This file is part of Octave.
+##
+## Octave is free software; you can redistribute it and/or modify it
+## under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 3 of the License, or (at
+## your option) any later version.
+##
+## Octave is distributed in the hope that it will be useful, but
+## WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+## General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with Octave; see the file COPYING.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+## -*- texinfo -*-
+## @deftypefn  {Function File} {[@var{Y}, @var{newmap}] =} cmpermute (@var{X}, @var{map})
+## @deftypefnx {Function File} {[@var{Y}, @var{newmap}] =} cmpermute (@var{X}, @var{map}, @var{index})
+## Reorder colors in a colormap.
+##
+## When called with only two arguments, @code{cmpermute} randomly rearranges
+## the colormap @var{map} and returns a new colormap @var{newmap}.  It also
+## returns the indexed image @var{Y} which is the equivalent of the original
+## input image @var{X} when displayed using @var{newmap}.  The input image
+## @var{X} must be an indexed image of class uint8 or double.
+##
+## When called with an optional third argument the order of colors in the
+## new colormap is defined by @var{index}.
+##
+## @strong{Caution:} @code{index} should not have repeated elements or the
+## function will fail.
+##
+## @end deftypefn
+
+## Author:  Josep Mones i Teixidor <jmones@puntbarra.com>
+
+function [Y, newmap] = cmpermute (X, map, index)
+
+  if (nargin < 2 || nargin > 3)
+    print_usage ();
+  endif
+
+  ## FIXME: Matlab only accepts 2 types.  Expand to uint16 & single??
+  if (! (isa (X, "uint8") || isa (X, "double")))
+    error ("cmpermute: X must be of class uint8 or double");
+  endif
+
+  if (! isreal (X) || issparse (X)
+      || (isfloat (X) && (any (X(:) < 1 || any (X(:) != fix (X(:)))))))
+    error ("cmpermute: X must be an indexed image");
+  endif
+
+  if (! isnumeric (map) || iscomplex (map)
+      || ndims (map) != 2 || columns (map) != 3
+      || any (map(:) < 0) || any (map(:) > 1))
+    error ("cmpermute: MAP must be a valid colormap");
+  endif
+
+  if (nargin < 3)
+    index = randperm (rows (map));
+  elseif (! isvector (index) || length (index) != rows (map))
+    error ("cmpermute: invalid parameter INDEX");
+  endif
+
+  ## new colormap
+  newmap = map(index,:);
+
+  ## build reverse index
+  rindex = zeros (size (index));
+  rindex(index) = 1:length (index);
+ 
+  ## adapt indices
+  if (isa (X, "uint8"))
+    rindex = uint8 (rindex-1);
+    ## 0-based indices
+    Y = rindex(double (X) + 1);
+  else
+    Y = rindex(X);
+  endif
+
+endfunction
+
+
+%!demo
+%! [Y, newmap] = cmpermute ([1:4], hot (4), 4:-1:1)
+%! ## colormap will be arranged in reverse order (so will image)
+
+%!shared X, map
+%! X = uint8 (magic (16));
+%! [X, map] = cmunique (X);
+
+%!test # random permutation, 0-based index
+%! [Y, newmap] = cmpermute (X, map);
+%! ## test we didn't lose colors
+%! assert (sort (map), sortrows (newmap)); 
+%! ## test if images are equal
+%! assert (map(double (X)+1), newmap(double (Y)+1));
+
+%!test # reverse map, 0-based index
+%! [Y, newmap] = cmpermute (X, map, rows (map):-1:1);
+%! ## we expect a reversed colormap
+%! assert (flipud (newmap), map);
+%! ## we expect reversed indices in image
+%! assert (X, max (Y(:)) - Y);
+
+%!shared X,map
+%! X = uint16 (magic (20));
+%! [X, map] = cmunique (X);
+
+%!test # random permutation, 1-based index
+%! [Y, newmap] = cmpermute (X, map);
+%! ## test we didn't lose colors
+%! assert (sort (map), sortrows (newmap)); 
+%! ## test if images are equal
+%! assert (map(X), newmap(Y));
+
+%!test # reverse map, 1-based index
+%! [Y, newmap] = cmpermute (X, map, rows (map):-1:1);
+%! ## we expect a reversed colormap
+%! assert (newmap (rows (newmap):-1:1,:), map);
+%! ## we expect reversed indices in image
+%! assert (X, max (Y(:)) + 1 - Y);
+
+## Test input validation
+%!error cmpermute ()
+%!error cmpermute (1,2,3,4)
+%!error <X must be of class uint8> cmpermute (uint16 (magic (16)), jet (256))
+%!error <X must be an indexed image> cmpermute (1+i, jet (256))
+%!error <X must be an indexed image> cmpermute (sparse (1), jet (256))
+%!error <X must be an indexed image> cmpermute (0, jet (256))
+%!error <X must be an indexed image> cmpermute (1.5, jet (256))
+%!error <MAP must be a valid colormap> cmpermute (1, "a")
+%!error <MAP must be a valid colormap> cmpermute (1, i)
+%!error <MAP must be a valid colormap> cmpermute (1, ones (3,3,3))
+%!error <MAP must be a valid colormap> cmpermute (1, ones (3,2))
+%!error <MAP must be a valid colormap> cmpermute (1, [-1 1 1])
+%!error <MAP must be a valid colormap> cmpermute (1, [2 1 1])
+%!error <invalid parameter INDEX> cmpermute (1, [0 1 0;1 0 1], ones (3))
+%!error <invalid parameter INDEX> cmpermute (1, [0 1 0;1 0 1], 1:3)
+
new file mode 100644
--- /dev/null
+++ b/scripts/image/cmunique.m
@@ -0,0 +1,204 @@
+## Copyright (C) 2004 Josep Mones i Teixidor
+## Copyright (C) 2012 Rik Wehbring 
+##
+## This file is part of Octave.
+##
+## Octave is free software; you can redistribute it and/or modify it
+## under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 3 of the License, or (at
+## your option) any later version.
+##
+## Octave is distributed in the hope that it will be useful, but
+## WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+## General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with Octave; see the file COPYING.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+## -*- texinfo -*-
+## @deftypefn  {Function File} {[@var{Y}, @var{newmap}] =} cmunique (@var{X}, @var{map})
+## @deftypefnx {Function File} {[@var{Y}, @var{newmap}] =} cmunique (@var{RGB})
+## @deftypefnx {Function File} {[@var{Y}, @var{newmap}] =} cmunique (@var{I})
+## Convert an input image @var{X} to an ouput indexed image @var{Y} which uses
+## the smallest colormap possible @var{newmap}.
+##
+## When the input is an indexed image (@var{X} with colormap @var{map}) the 
+## output is a colormap @var{newmap} from which any repeated rows have been
+## eliminated.  The output image, @var{Y}, is the original input image with
+## the indices adjusted to match the new, possibly smaller, colormap.
+##
+## When the input is an RGB image (an @nospell{MxNx3} array), the output
+## colormap will contain one entry for every unique color in the original image.
+## In the worst case the new map could have as many rows as the number of
+## pixels in the original image.
+##
+## When the input is a grayscale image @var{I}, the output colormap will
+## contain one entry for every unique intensity value in the original image.
+## In the worst case the new map could have as many rows as the number of
+## pixels in the original image.
+##
+## Implementation Details:
+##
+## @var{newmap} is always an Mx3 matrix, even if the input image is
+## an intensity grayscale image @var{I} (all three RGB planes are
+## assigned the same value).
+##
+## The output image is of class uint8 if the size of the new colormap is
+## less than or equal to 256.  Otherwise, the output image is of class double.
+##
+## @seealso{rgb2ind, gray2ind}
+## @end deftypefn
+
+
+## Author:  Josep Mones i Teixidor <jmones@puntbarra.com>
+
+function [Y, newmap] = cmunique (X, map)
+
+  if (nargin < 1 || nargin > 2)
+    print_usage ();
+  endif
+
+  cls = class (X);
+  ## FIXME: Documentation accepts only 3 classes.  Could easily add 'single'.
+  if (! any (isa (X, {"uint8", "uint16", "double"})))
+    error ("cmunique: X is of invalid data type '%s'", cls);
+  endif
+
+  if (nargin == 2)
+    ## (X, map) case
+    if (! isnumeric (map) || iscomplex (map)
+        || ndims (map) != 2 || columns (map) != 3
+        || any (map(:) < 0) || any (map(:) > 1))
+      error ("cmunique: MAP must be a valid colormap");
+    endif
+    [newmap,i,j] = unique (map, "rows");  # calculate unique colormap
+    if (isa (X, "double"))
+      Y = j(X);               # find new indices
+    else
+      Y = j(double (X) + 1);  # find new indices
+    endif
+  else
+    switch (size (X,3))
+      case (1)
+        ## I case
+        [newmap,i,j] = unique (X);               # calculate unique colormap
+        newmap = repmat (newmap,1,3);            # get a RGB colormap
+        Y = reshape (j, rows (X), columns (X));  # Y is j reshaped
+      case (3)
+        ## RGB case
+        ## build a map with all values
+        map = [X(:,:,1)(:), X(:,:,2)(:), X(:,:,3)(:)];
+        [newmap,i,j] = unique (map, "rows");     # calculate unique colormap
+        Y = reshape (j, rows (X), columns (X));  # Y is j reshaped
+      otherwise
+        error ("cmunique: X is not a valid image");
+    endswitch
+    
+    ## if image was uint8 or uint16 we have to convert newmap to [0,1] range
+    if (! isa (X, "double"))
+      newmap = double (newmap) / double (intmax (class (X)));
+    endif
+  endif
+
+  if (rows (newmap) <= 256)
+    ## convert Y to uint8 (0-based indices then)
+    Y = uint8 (Y-1);
+  endif
+
+endfunction
+
+
+%!demo
+%! [Y, newmap] = cmunique ([1:4;5:8], [hot(4);hot(4)])
+%! ## Both rows are equal since map maps colors to the same value
+%! ## cmunique will give the same indices to both
+
+## Check that output is uint8 in short colormaps
+%!test
+%! [Y, newmap] = cmunique ([1:4;5:8], [hot(4);hot(4)]);
+%! assert (Y, uint8 ([0:3;0:3]));
+%! assert (newmap, hot (4));
+
+## Check that output is double in bigger
+%!test
+%! [Y, newmap] = cmunique ([1:300;301:600], [hot(300);hot(300)]);
+%! assert (Y, [1:300;1:300]);
+%! assert (newmap, hot (300));
+
+## Check boundary case 256
+%!test
+%! [Y, newmap] = cmunique ([1:256;257:512], [hot(256);hot(256)]);
+%! assert (Y, uint8 ([0:255;0:255]));
+%! assert (newmap, hot (256));
+
+## Check boundary case 257
+%!test
+%! [Y, newmap] = cmunique ([1:257;258:514], [hot(257);hot(257)]);
+%! assert (Y, [1:257;1:257]);
+%! assert (newmap, hot (257));
+
+## Random RGB image
+%!test
+%! RGB = rand (10,10,3);
+%! [Y, newmap] = cmunique (RGB);
+%! assert (RGB(:,:,1), newmap(:,1)(Y+1));
+%! assert (RGB(:,:,2), newmap(:,2)(Y+1));
+%! assert (RGB(:,:,3), newmap(:,3)(Y+1));
+
+## Random uint8 RGB image
+%!test
+%! RGB = uint8 (rand (10,10,3)*255);
+%! RGBd = double (RGB) / 255;
+%! [Y, newmap] = cmunique (RGB);
+%! assert (RGBd(:,:,1), newmap(:,1)(Y+1));
+%! assert (RGBd(:,:,2), newmap(:,2)(Y+1));
+%! assert (RGBd(:,:,3), newmap(:,3)(Y+1));
+
+## Random uint16 RGB image
+%!test
+%! RGB = uint16 (rand (10,10,3)*65535);
+%! RGBd = double (RGB) / 65535;
+%! [Y, newmap] = cmunique (RGB);
+%! assert (RGBd(:,:,1), newmap(:,1)(Y+1));
+%! assert (RGBd(:,:,2), newmap(:,2)(Y+1));
+%! assert (RGBd(:,:,3), newmap(:,3)(Y+1));
+
+## Random I image
+%!test
+%! I = rand (10,10);
+%! [Y, newmap] = cmunique (I);
+%! assert (I, newmap(:,1)(Y+1));
+%! assert (I, newmap(:,2)(Y+1));
+%! assert (I, newmap(:,3)(Y+1));
+
+## Random uint8 I image
+%!test
+%! I = uint8 (rand (10,10)*256);
+%! Id = double (I) / 255;
+%! [Y, newmap] = cmunique (I);
+%! assert (Id, newmap(:,1)(Y+1));
+%! assert (Id, newmap(:,2)(Y+1));
+%! assert (Id, newmap(:,3)(Y+1));
+
+## Random uint16 I image
+%!test
+%! I = uint16 (rand (10,10)*65535);
+%! Id = double (I) / 65535;
+%! [Y,newmap] = cmunique (I);
+%! assert (Id,newmap (:,1)(Y+1));
+%! assert (Id,newmap (:,2)(Y+1));
+%! assert (Id,newmap (:,3)(Y+1));
+
+## Test input validation
+%!error cmpermute ()
+%!error cmpermute (1,2,3)
+%!error <X is of invalid data type> cmunique (single (magic (16)))
+%!error <MAP must be a valid colormap> cmunique (1, "a")
+%!error <MAP must be a valid colormap> cmunique (1, i)
+%!error <MAP must be a valid colormap> cmunique (1, ones (3,3,3))
+%!error <MAP must be a valid colormap> cmunique (1, ones (3,2))
+%!error <MAP must be a valid colormap> cmunique (1, [-1 1 1])
+%!error <MAP must be a valid colormap> cmunique (1, [2 1 1])
+
--- a/scripts/image/image.m
+++ b/scripts/image/image.m
@@ -72,6 +72,11 @@
     firstnonnumeric = 4;
   endif
 
+  if (iscomplex (img))
+    warning ("image: only showing real part of complex image");
+    img = real (img);
+  endif
+
   oldax = gca ();
   unwind_protect
     axes (ax);
--- a/scripts/image/imshow.m
+++ b/scripts/image/imshow.m
@@ -25,7 +25,7 @@
 ## @deftypefnx {Function File} {} imshow (@dots{}, @var{string_param1}, @var{value1}, @dots{})
 ## @deftypefnx {Function File} {@var{h} =} imshow (@dots{})
 ## Display the image @var{im}, where @var{im} can be a 2-dimensional
-## (gray-scale image) or a 3-dimensional (RGB image) matrix.
+## (grayscale image) or a 3-dimensional (RGB image) matrix.
 ##
 ## If @var{limits} is a 2-element vector @code{[@var{low}, @var{high}]},
 ## the image is shown using a display range between @var{low} and
--- a/scripts/image/module.mk
+++ b/scripts/image/module.mk
@@ -4,6 +4,8 @@
   image/autumn.m \
   image/bone.m \
   image/brighten.m \
+  image/cmpermute.m \
+  image/cmunique.m \
   image/colorcube.m \
   image/colormap.m \
   image/contrast.m \
--- a/scripts/miscellaneous/fileattrib.m
+++ b/scripts/miscellaneous/fileattrib.m
@@ -57,6 +57,7 @@
 ## True if the user (group; other users) has execute permission for
 ## @var{file}.
 ## @end table
+##
 ## If an attribute does not apply (i.e., archive on a Unix system) then
 ## the field is set to NaN.
 ##
--- a/scripts/miscellaneous/gzip.m
+++ b/scripts/miscellaneous/gzip.m
@@ -51,10 +51,10 @@
 %!   mkdir (dirname);
 %!   entry = gzip (filename, dirname);
 %!   [path, basename, extension] = fileparts (filename);
-%!   if ! strcmp (entry, [dirname, filesep, basename, extension, ".gz"])
+%!   if (! strcmp (entry, [dirname, filesep, basename, extension, ".gz"]))
 %!     error ("gzipped file does not match expected name!");
 %!   endif
-%!   if ! exist (entry, "file")
+%!   if (! exist (entry, "file"))
 %!     error ("gzipped file cannot be found!");
 %!   endif
 %!   gunzip (entry);
--- a/scripts/optimization/fminbnd.m
+++ b/scripts/optimization/fminbnd.m
@@ -20,14 +20,13 @@
 
 ## -*- texinfo -*-
 ## @deftypefn {Function File} {[@var{x}, @var{fval}, @var{info}, @var{output}] =} fminbnd (@var{fun}, @var{a}, @var{b}, @var{options})
-## Find a minimum point of a univariate function.  @var{fun} should be a
-## function
-## handle or name.  @var{a}, @var{b} specify a starting interval.  @var{options}
-## is a
-## structure specifying additional options.  Currently, @code{fminbnd}
-## recognizes these options: @code{"FunValCheck"}, @code{"OutputFcn"},
-## @code{"TolX"}, @code{"MaxIter"}, @code{"MaxFunEvals"}.
-## For description of these options, see @ref{doc-optimset,,optimset}.
+## Find a minimum point of a univariate function.
+## 
+## @var{fun} should be a function handle or name.  @var{a}, @var{b} specify a
+## starting interval.  @var{options} is a structure specifying additional
+## options.  Currently, @code{fminbnd} recognizes these options:
+## "FunValCheck", "OutputFcn", "TolX", "MaxIter", "MaxFunEvals".  For a
+## description of these options, see @ref{doc-optimset,,optimset}.
 ##
 ## On exit, the function returns @var{x}, the approximate minimum point
 ## and @var{fval}, the function value thereof.
@@ -43,7 +42,13 @@
 ## @item -1
 ## The algorithm has been terminated from user output function.
 ## @end itemize
-## @seealso{optimset, fzero, fminunc}
+##
+## Notes: The search for a minimum is restricted to be in the interval
+## bound by @var{a} and @var{b}.  If you only have an initial point
+## to begin searching from you will need to use an unconstrained
+## minimization algorithm such as @code{fminunc} or @code{fminsearch}.
+## @code{fminbnd} internally uses a Golden Section search strategy.
+## @seealso{fzero, fminunc, fminsearch, optimset}
 ## @end deftypefn
 
 ## This is patterned after opt/fmin.f from Netlib, which in turn is taken from
new file mode 100644
--- /dev/null
+++ b/scripts/optimization/fminsearch.m
@@ -0,0 +1,352 @@
+## Copyright (C) 2003,2012 Andy Adler
+## Copyright (C) 2002 N.J.Higham
+##
+## This file is part of Octave.
+##
+## Octave is free software; you can redistribute it and/or modify it
+## under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 3 of the License, or (at
+## your option) any later version.
+##
+## Octave is distributed in the hope that it will be useful, but
+## WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+## General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with Octave; see the file COPYING.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+## -*- texinfo -*-
+## @deftypefn  {Function File} {@var{x} =} fminsearch (@var{fun}, @var{x0})
+## @deftypefnx {Function File} {@var{x} =} fminsearch (@var{fun}, @var{x0}, @var{options})
+## @deftypefnx {Function File} {[@var{x}, @var{fval}] =} fminsearch (@dots{})
+##
+## Find a value of @var{x} which minimizes the function @var{fun}.
+## The search begins at the point @var{x0} and iterates using the
+## Nelder & Mead Simplex algorithm (a derivative-free method).  This algorithm
+## is better-suited to functions which have discontinuities or for which
+## a gradient-based search such as @code{fminunc} fails.
+##
+## Options for the search are provided in the parameter @var{options} using 
+## the function @code{optimset}.  Currently, @code{fminsearch} accepts the
+## options: "TolX", "MaxFunEvals", "MaxIter", "Display".  For a description of
+## these options, see @code{optimset}.
+##
+## On exit, the function returns @var{x}, the minimum point,
+## and @var{fval}, the function value thereof.
+##
+## Example usages:
+##
+## @example
+## @group
+## fminsearch (@@(x) (x(1)-5).^2+(x(2)-8).^4, [0;0])
+##
+## fminsearch (inline ("(x(1)-5).^2+(x(2)-8).^4", "x"), [0;0])
+## @end group
+## @end example
+## @seealso{fminbnd, fminunc, optimset}
+## @end deftypefn
+
+## PKG_ADD: ## Discard result to avoid polluting workspace with ans at startup.
+## PKG_ADD: [~] = __all_opts__ ("fminsearch");
+
+## FIXME: Add support for "exitflag" output variable
+## FIXME: Add support for "output" output variable
+## FIXME: For Display option, add 'final' and 'notify' options.  Not too hard.
+## FIXME: Add support for OutputFcn.  See fminunc for a template
+## FIXME: Add support for exiting based on TolFun.  See fminunc for an idea.
+
+function [x, fval] = fminsearch (fun, x0, options = struct ())
+
+  ## Get default options if requested.
+  if (nargin == 1 && ischar (fun) && strcmp (fun, "defaults"))
+    x = optimset ("Display", "notify", "FunValCheck", "off",
+                  "MaxFunEvals", 400, "MaxIter", 400,
+                  "OutputFcn", [],
+                  "TolFun", 1e-7, "TolX", 1e-4);
+    return;
+  endif
+
+  if (nargin < 2 || nargin > 3)
+    print_usage ();
+  endif
+
+  x = nmsmax (fun, x0, options);
+
+  if (isargout (2))
+    fval = feval (fun, x);
+  endif
+
+endfunction
+
+##NMSMAX  Nelder-Mead simplex method for direct search optimization.
+##        [x, fmax, nf] = NMSMAX(FUN, x0, STOPIT, SAVIT) attempts to
+##        maximize the function FUN, using the starting vector x0.
+##        The Nelder-Mead direct search method is used.
+##        Output arguments:
+##               x    = vector yielding largest function value found,
+##               fmax = function value at x,
+##               nf   = number of function evaluations.
+##        The iteration is terminated when either
+##               - the relative size of the simplex is <= STOPIT(1)
+##                 (default 1e-3),
+##               - STOPIT(2) function evaluations have been performed
+##                 (default inf, i.e., no limit), or
+##               - a function value equals or exceeds STOPIT(3)
+##                 (default inf, i.e., no test on function values).
+##        The form of the initial simplex is determined by STOPIT(4):
+##           STOPIT(4) = 0: regular simplex (sides of equal length, the default)
+##           STOPIT(4) = 1: right-angled simplex.
+##        Progress of the iteration is not shown if STOPIT(5) = 0 (default 1).
+##           STOPIT(6) indicates the direction (ie. minimization or
+##                   maximization.) Default is 1, maximization.
+##                   set STOPIT(6)=-1 for minimization
+##        If a non-empty fourth parameter string SAVIT is present, then
+##        `SAVE SAVIT x fmax nf' is executed after each inner iteration.
+##        NB: x0 can be a matrix.  In the output argument, in SAVIT saves,
+##            and in function calls, x has the same shape as x0.
+##        NMSMAX(fun, x0, STOPIT, SAVIT, P1, P2,...) allows additional
+##        arguments to be passed to fun, via feval(fun,x,P1,P2,...).
+## References:
+## N. J. Higham, Optimization by direct search in matrix computations,
+##    SIAM J. Matrix Anal. Appl, 14(2): 317-333, 1993.
+## C. T. Kelley, Iterative Methods for Optimization, Society for Industrial
+##    and Applied Mathematics, Philadelphia, PA, 1999.
+
+## From Matrix Toolbox
+## Copyright (C) 2002 N.J.Higham
+## www.maths.man.ac.uk/~higham/mctoolbox
+##
+## Modifications for Octave by A.Adler 2003
+
+function [stopit, savit, dirn, trace, tol, maxiter] = parse_options (options, x );
+
+  ## Tolerance for cgce test based on relative size of simplex.
+  stopit(1) = tol = optimget (options, "TolX", 1e-4);
+
+  ## Max no. of f-evaluations.
+  stopit(2) = optimget (options, "MaxFunEvals", length (x) * 200);
+
+  ## Max no. of iterations
+  maxiter = optimget (options, "MaxIter", length (x) * 200);
+
+  ## Default target for f-values.
+  stopit(3) = Inf;  # FIXME: expose this parameter to the outside
+
+  ## Default initial simplex.
+  stopit(4) = 0;    # FIXME: expose this parameter to the outside
+
+  ## Default: show progress.
+  display = optimget (options, "Display", "notify");
+  if (strcmp (display, "iter"))
+    stopit(5) = 1;
+  else
+    stopit(5) = 0;
+  endif
+  trace = stopit(5);
+
+  ## Use function to minimize, not maximize
+  stopit(6) = dirn = -1;
+
+  ## File name for snapshots.
+  savit = [];  # FIXME: expose this parameter to the outside
+
+endfunction
+
+function [x, fmax, nf] = nmsmax (fun, x, options, savit, varargin)
+
+  [stopit, savit, dirn, trace, tol, maxiter] = parse_options (options, x);
+
+  if (strcmpi (optimget (options, "FunValCheck", "off"), "on"))
+    ## Replace fcn with a guarded version.
+    fun = @(x) guarded_eval (fun, x);
+  endif
+
+  x0 = x(:);  # Work with column vector internally.
+  n = length (x0);
+
+  V = [zeros(n,1) eye(n)];
+  f = zeros (n+1,1);
+  V(:,1) = x0;
+  f(1) = dirn * feval (fun,x,varargin{:});
+  fmax_old = f(1);
+
+  if (trace)
+    fprintf ("f(x0) = %9.4e\n", f(1));
+  endif
+
+  k = 0; m = 0;
+
+  ## Set up initial simplex.
+  scale = max (norm (x0,Inf), 1);
+  if (stopit(4) == 0)
+    ## Regular simplex - all edges have same length.
+    ## Generated from construction given in reference [18, pp. 80-81] of [1].
+    alpha = scale / (n*sqrt (2)) * [sqrt(n+1)-1+n, sqrt(n+1)-1];
+    V(:,2:n+1) = (x0 + alpha(2)*ones (n,1)) * ones (1,n);
+    for j = 2:n+1
+      V(j-1,j) = x0(j-1) + alpha(1);
+      x(:) = V(:,j);
+      f(j) = dirn * feval (fun,x,varargin{:});
+    endfor
+  else
+    ## Right-angled simplex based on co-ordinate axes.
+    alpha = scale * ones(n+1,1);
+    for j=2:n+1
+      V(:,j) = x0 + alpha(j)*V(:,j);
+      x(:) = V(:,j);
+      f(j) = dirn * feval (fun,x,varargin{:});
+    endfor
+  endif
+  nf = n+1;
+  how = "initial  ";
+
+  [~,j] = sort (f);
+  j = j(n+1:-1:1);
+  f = f(j);
+  V = V(:,j);
+
+  alpha = 1;  beta = 1/2;  gamma = 2;
+
+  while (1)   # Outer (and only) loop.
+    k++;
+
+    if (k > maxiter)
+      msg = "Exceeded maximum iterations...quitting\n";
+      break;
+    endif
+
+    fmax = f(1);
+    if (fmax > fmax_old)
+      if (! isempty (savit))
+        x(:) = V(:,1);
+        eval (["save " savit " x fmax nf"]);
+      endif
+    endif
+    if (trace)
+      fprintf ("Iter. %2.0f,", k);
+      fprintf (["  how = " how "  "]);
+      fprintf ("nf = %3.0f,  f = %9.4e  (%2.1f%%)\n", nf, fmax, ...
+               100*(fmax-fmax_old)/(abs(fmax_old)+eps));
+    endif
+    fmax_old = fmax;
+
+    ## Three stopping tests from MDSMAX.M
+
+    ## Stopping Test 1 - f reached target value?
+    if (fmax >= stopit(3))
+      msg = "Exceeded target...quitting\n";
+      break;
+    endif
+
+    ## Stopping Test 2 - too many f-evals?
+    if (nf >= stopit(2))
+      msg = "Max no. of function evaluations exceeded...quitting\n";
+      break;
+    endif
+
+    ## Stopping Test 3 - converged?   This is test (4.3) in [1].
+    v1 = V(:,1);
+    size_simplex = norm (V(:,2:n+1)-v1(:,ones (1,n)),1) / max (1, norm (v1,1));
+    if (size_simplex <= tol)
+      msg = sprintf ("Simplex size %9.4e <= %9.4e...quitting\n", ...
+                      size_simplex, tol);
+      break;
+    endif
+
+    ##  One step of the Nelder-Mead simplex algorithm
+    ##  NJH: Altered function calls and changed CNT to NF.
+    ##       Changed each `fr < f(1)' type test to `>' for maximization
+    ##       and re-ordered function values after sort.
+
+    vbar = (sum (V(:,1:n)')/n)';  # Mean value
+    vr = (1 + alpha)*vbar - alpha*V(:,n+1);
+    x(:) = vr;
+    fr = dirn * feval (fun,x,varargin{:});
+    nf = nf + 1;
+    vk = vr;  fk = fr; how = "reflect, ";
+    if (fr > f(n))
+      if (fr > f(1))
+        ve = gamma*vr + (1-gamma)*vbar;
+        x(:) = ve;
+        fe = dirn * feval (fun,x,varargin{:});
+        nf = nf + 1;
+        if (fe > f(1))
+          vk = ve;
+          fk = fe;
+          how = "expand,  ";
+        endif
+      endif
+    else
+      vt = V(:,n+1);
+      ft = f(n+1);
+      if (fr > ft)
+        vt = vr;
+        ft = fr;
+      endif
+      vc = beta*vt + (1-beta)*vbar;
+      x(:) = vc;
+      fc = dirn * feval (fun,x,varargin{:});
+      nf = nf + 1;
+      if (fc > f(n))
+        vk = vc; fk = fc;
+        how = "contract,";
+      else
+        for j = 2:n
+          V(:,j) = (V(:,1) + V(:,j))/2;
+          x(:) = V(:,j);
+          f(j) = dirn * feval (fun,x,varargin{:});
+        endfor
+        nf = nf + n-1;
+        vk = (V(:,1) + V(:,n+1))/2;
+        x(:) = vk;
+        fk = dirn * feval (fun,x,varargin{:});
+        nf = nf + 1;
+        how = "shrink,  ";
+      endif
+    endif
+    V(:,n+1) = vk;
+    f(n+1) = fk;
+    [~,j] = sort(f);
+    j = j(n+1:-1:1);
+    f = f(j);
+    V = V(:,j);
+
+  endwhile   # End of outer (and only) loop.
+
+  ## Finished.
+  if (trace)
+    fprintf (msg);
+  endif
+  x(:) = V(:,1);
+
+endfunction
+
+## A helper function that evaluates a function and checks for bad results.
+function y = guarded_eval (fun, x)
+
+  y = fun (x);
+
+  if (! (isreal (f)))
+    error ("fminsearch:notreal", "fminsearch: non-real value encountered");
+  elseif (any (isnan (f(:))))
+    error ("fminsearch:isnan", "fminsearch: NaN value encountered");
+  elseif (any (isinf (f(:))))
+    error ("fminsearch:isinf", "fminsearch: Inf value encountered");
+  endif
+
+endfunction
+
+
+%!demo
+%! fcn = @(x) (x(1)-5).^2 + (x(2)-8).^4
+%! x0 = [0;0];
+%! [xmin, fval] = fminsearch (fcn, x0)
+
+%!assert (fminsearch (@sin, 3, optimset ("MaxIter", 3)), 4.8750, 1e-4)
+%!assert (fminsearch (@sin, 3, optimset ("MaxIter", 30)), 4.7124, 1e-4)
+%!shared c
+%! c = 1.5;
+%!assert (fminsearch (@(x) x(1).^2+c*x(2).^2,[1;1]), [0;0], 1e-4)
+
--- a/scripts/optimization/fminunc.m
+++ b/scripts/optimization/fminunc.m
@@ -24,6 +24,7 @@
 ## @deftypefnx {Function File} {[@var{x}, @var{fvec}, @var{info}, @var{output}, @var{grad}, @var{hess}] =} fminunc (@var{fcn}, @dots{})
 ## Solve an unconstrained optimization problem defined by the function
 ## @var{fcn}.
+##
 ## @var{fcn} should accepts a vector (array) defining the unknown variables,
 ## and return the objective function value, optionally with gradient.
 ## In other words, this function attempts to determine a vector @var{x} such
@@ -72,9 +73,12 @@
 ## (@var{output}), the output gradient (@var{grad}) and approximate Hessian
 ## (@var{hess}).
 ##
-## Note: If you only have a single nonlinear equation of one variable, using
-## @code{fminbnd} is usually a much better idea.
-## @seealso{fminbnd, optimset}
+## Notes: If you only have a single nonlinear equation of one variable then
+## using @code{fminbnd} is usually a much better idea.  The algorithm used is a
+## gradient search which depends on the objective function being differentiable.
+## If the function has discontinuities it may be better to use a derivative-free
+## algorithm such as @code{fminsearch}.
+## @seealso{fminbnd, fminsearch, optimset}
 ## @end deftypefn
 
 ## PKG_ADD: ## Discard result to avoid polluting workspace with ans at startup.
--- a/scripts/optimization/glpk.m
+++ b/scripts/optimization/glpk.m
@@ -369,6 +369,7 @@
 ## @item 185 (@w{@code{LPX_UNDEF}})
 ## Solution status is undefined.
 ## @end table
+##
 ## Interior Point Method:
 ##
 ## @table @asis
@@ -378,6 +379,7 @@
 ## @item 151 (@w{@code{LPX_T_OPT}})
 ## The interior point method is optimal.
 ## @end table
+##
 ## Mixed Integer Method:
 ##
 ## @table @asis
@@ -393,6 +395,7 @@
 ## @item 173 (@w{@code{LPX_I_NOFEAS}})
 ## No integer feasible solution.
 ## @end table
+##
 ## @noindent
 ## If an error occurs, @var{status} will contain one of the following
 ## codes:
--- a/scripts/optimization/module.mk
+++ b/scripts/optimization/module.mk
@@ -6,6 +6,7 @@
 optimization_FCN_FILES = \
   optimization/__all_opts__.m \
   optimization/fminbnd.m \
+  optimization/fminsearch.m \
   optimization/fminunc.m \
   optimization/fsolve.m \
   optimization/fzero.m \
--- a/scripts/optimization/optimset.m
+++ b/scripts/optimization/optimset.m
@@ -26,16 +26,34 @@
 ##
 ## Valid parameters are:
 ##
-## @itemize @bullet
+## @table @asis
 ## @item AutoScaling
 ##
 ## @item ComplexEqn
 ##
+## @item Display
+## Request verbose display of results from optimizations.  Values are:
+##
+## @table @asis
+## @item "off" [default]
+## No display.
+##
+## @item "iter"
+## Display intermediate results for every loop iteration.
+##
+## @item "final"
+## Display the result of the final loop iteration.
+##
+## @item "notify"
+## Display the result of the final loop iteration if the function has
+## failed to converge.
+## @end table
+##
 ## @item FinDiffType
 ##
 ## @item FunValCheck
 ## When enabled, display an error if the objective function returns an invalid
-## value (a complex value, NaN, or Inf).  Must be set to "on" or "off"
+## value (a complex number, NaN, or Inf).  Must be set to "on" or "off"
 ## [default].  Note: the functions @code{fzero} and @code{fminbnd} correctly
 ## handle Inf values and only complex values or NaN will cause an error in this
 ## case. 
@@ -77,7 +95,7 @@
 ## @item TypicalX
 ##
 ## @item Updating
-## @end itemize
+## @end table
 ## @end deftypefn
 
 function retval = optimset (varargin)
--- a/scripts/pkg/module.mk
+++ b/scripts/pkg/module.mk
@@ -1,7 +1,6 @@
 FCN_FILE_DIRS += pkg
 
 pkg_PRIVATE_FCN_FILES = \
-  pkg/private/absolute_pathname.m \
   pkg/private/build.m \
   pkg/private/configure_make.m \
   pkg/private/copy_files.m \
--- a/scripts/pkg/pkg.m
+++ b/scripts/pkg/pkg.m
@@ -317,6 +317,9 @@
         ## Send verbose output to pager immediately.  Change setting locally.
         page_output_immediately (true, "local");
       case "-forge"
+        if (! octave_config_info ("CURL_LIBS"))
+          error ("pkg: can't download from forge without the cURL library")
+        endif
         octave_forge = true;
       case "-local"
         global_install = false;
@@ -421,50 +424,46 @@
         global_packages = archprefix;
       elseif (length (files) >= 1 && nargout <= 2 && ischar (files{1}))
         prefix = files{1};
-        try
-          prefix = absolute_pathname (prefix);
-        catch
+        if (! exist (prefix, "dir"))
           [status, msg, msgid] = mkdir (prefix);
           if (status == 0)
             error("cannot create prefix %s: %s", prefix, msg);
           endif
           warning ("creating the directory %s\n", prefix);
-          prefix = absolute_pathname (prefix);
-        end_try_catch
-        prefix = absolute_pathname (prefix);
-        local_packages = prefix;
+        endif
+        local_packages = prefix = canonicalize_file_name (prefix);
         user_prefix = true;
         if (length (files) >= 2 && ischar (files{2}))
           archprefix = files{2};
-          try
-            archprefix = absolute_pathname (archprefix);
-          catch
+          if (! exist (archprefix, "dir"))
             [status, msg, msgid] = mkdir (archprefix);
             if (status == 0)
               error("cannot create archprefix %s: %s", archprefix, msg);
             endif
             warning ("creating the directory %s\n", archprefix);
-            archprefix = absolute_pathname (archprefix);
-          end_try_catch
-          global_packages = archprefix;
+            global_packages = archprefix = canonicalize_file_name (archprefix);
+          endif
         endif
       else
         error ("you must specify a prefix directory, or request an output argument");
       endif
-
+      
     case "local_list"
       if (length (files) == 0 && nargout == 0)
         disp (local_list);
       elseif (length (files) == 0 && nargout == 1)
         local_packages = local_list;
       elseif (length (files) == 1 && nargout == 0 && ischar (files{1}))
-        try
-          local_list = absolute_pathname (files{1});
-        catch
-          ## Force file to be created
-          fclose (fopen (files{1}, "wt"));
-          local_list = absolute_pathname (files{1});
-        end_try_catch
+        local_list = files{1};
+        if (! exist (local_list, "file"))          
+          try
+            ## Force file to be created
+            fclose (fopen (local_list, "wt"));
+          catch
+            error ("cannot create file %s", local_list);
+          end_try_catch
+        endif
+        local_list = canonicalize_file_name (local_list);
       else
         error ("you must specify a local_list file, or request an output argument");
       endif
@@ -475,13 +474,16 @@
       elseif (length (files) == 0 && nargout == 1)
         local_packages = global_list;
       elseif (length (files) == 1 && nargout == 0 && ischar (files{1}))
-        try
-          global_list = absolute_pathname (files{1});
-        catch
-          ## Force file to be created
-          fclose (fopen (files{1}, "wt"));
-          global_list = absolute_pathname (files{1});
-        end_try_catch
+        global_list = files{1};
+        if (! exist (global_list, "file"))  
+          try
+            ## Force file to be created
+            fclose (fopen (files{1}, "wt"));
+          catch
+            error ("cannot create file %s", global_list);
+          end_try_catch
+        endif
+        global_list = canonicalize_file_name (global_list);
       else
         error ("you must specify a global_list file, or request an output argument");
       endif
deleted file mode 100644
--- a/scripts/pkg/private/absolute_pathname.m
+++ /dev/null
@@ -1,33 +0,0 @@
-## Copyright (C) 2005-2012 Søren Hauberg
-## Copyright (C) 2010 VZLU Prague, a.s.
-##
-## This file is part of Octave.
-##
-## Octave is free software; you can redistribute it and/or modify it
-## under the terms of the GNU General Public License as published by
-## the Free Software Foundation; either version 3 of the License, or (at
-## your option) any later version.
-##
-## Octave is distributed in the hope that it will be useful, but
-## WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-## General Public License for more details.
-##
-## You should have received a copy of the GNU General Public License
-## along with Octave; see the file COPYING.  If not, see
-## <http://www.gnu.org/licenses/>.
-
-## -*- texinfo -*-
-## @deftypefn {Function File} {@var{pth} =} absolute_pathname (@var{pth})
-## Undocumented internal function.
-## @end deftypefn
-
-function pth = absolute_pathname (pth)
-  [status, msg, msgid] = fileattrib (pth);
-  if (status != 1)
-    error ("could not find the file or path %s", pth);
-  else
-    pth = msg.Name;
-  endif
-endfunction
-
--- a/scripts/pkg/private/build.m
+++ b/scripts/pkg/private/build.m
@@ -34,7 +34,10 @@
       error ("could not create installation directory: %s", msg);
     endif
   endif
-  builddir = absolute_pathname (builddir);
+  [builddir, status] = canonicalize_file_name (builddir);
+  if (! status)
+    error ("cannot find directory %s", builddir);
+  endif
   installdir = fullfile (builddir, "install");
   if (! exist (installdir, "dir"))
     [status, msg] = mkdir (installdir);
--- a/scripts/plot/axis.m
+++ b/scripts/plot/axis.m
@@ -109,6 +109,7 @@
 ## @item "nolabel"
 ## Turn tic labels off for all axes.
 ## @end table
+##
 ## Note, if there are no tic marks for an axis, there can be no labels.
 ##
 ## @noindent
--- a/scripts/plot/copyobj.m
+++ b/scripts/plot/copyobj.m
@@ -15,51 +15,89 @@
 ## <http://www.gnu.org/licenses/>.
 
 ## -*- texinfo -*-
-## @deftypefn   {Function File} {@var{hnew} =} copyobj (@var{horig})
-## @deftypefnx  {Function File} {@var{hnew} =} copyobj (@var{horig}, @var{hparent})
-## Constructs a copy of the object associated with handle @var{horig}
-## and returns a handle, @var{hnew}, to the new object.
-## If a parent handle @var{hparent} (root, figure, axes or hggroup) is specified,
-## the copied object will be created as a child to @var{hparent}.
+## @deftypefn  {Function File} {@var{hnew} =} copyobj (@var{horig})
+## @deftypefnx {Function File} {@var{hnew} =} copyobj (@var{horig}, @var{hparent})
+## Construct a copy of the object associated with handle @var{horig}
+## and return a handle @var{hnew} to the new object.
+## If a parent handle @var{hparent} (root, figure, axes, or hggroup) is
+## specified, the copied object will be created as a child to @var{hparent}.
 ## @seealso{findobj, get, set, struct2hdl, hdl2struct}
 ## @end deftypefn
 
 ## Author: pdiribarne <pdiribarne@new-host.home>
 ## Created: 2012-04-01
 
-function hout = copyobj (hin, hpar = 0)
+function hnew = copyobj (horig, hparent = 0)
 
   partypes = {"root", "figure", "axes", "hggroup"};
   othertypes = {"line", "patch", "surface", "image", "text"};
   alltypes = [partypes othertypes];
 
-  if (! ishandle (hin) || nargin > 2)
+  if (! ishandle (horig) || nargin > 2)
     print_usage ();
-  elseif (! ishandle (hpar))
-    hpar = figure (floor (hpar));
-  elseif (! any (strcmpi (get (hpar).type, partypes)))
+  elseif (! ishandle (hparent))
+    hparent = figure (fix (hparent));
+  elseif (! any (strcmpi (get (hparent).type, partypes)))
     print_usage ();
   endif
 
   ## compatibility of input handles
-  kididx = find (strcmp (alltypes, get (hin).type));
-  paridx = find (strcmp (alltypes, get (hpar).type));
+  kididx = find (strcmp (alltypes, get (horig).type));
+  paridx = find (strcmp (alltypes, get (hparent).type));
 
   if (kididx <= paridx)
     error ("copyobj: %s object can't be children to %s.",
-           alltypes{kididx}, alltypes{paridx})
-  elseif nargin == 1
-    str = hdl2struct (hin);
-    hout = struct2hdl (str);
+           alltypes{kididx}, alltypes{paridx});
+  elseif (nargin == 1)
+    str = hdl2struct (horig);
+    hnew = struct2hdl (str);
   else
-    str = hdl2struct (hin);
-    hout = struct2hdl (str, hpar);
+    str = hdl2struct (horig);
+    hnew = struct2hdl (str, hparent);
   endif
+
 endfunction
 
+
+%!demo
+%! hdl = figure (1234);
+%! clf;
+%! hold on;
+%! x = 1:10;
+%! y = x.^2;
+%! dy = 2 * (.2 * x);
+%! y2 = (x - 3).^2;
+%! hg = errorbar (x, y, dy,'#~');
+%! set (hg, 'marker', '^', 'markerfacecolor', rand (1,3));
+%! plot (x, y2, 'ok-');
+%! legend ('errorbar', 'line');
+%! hnew = copyobj (hdl);
+
+%!demo
+%! ## FIXME: This demo fails occasionally for an obscure reason.
+%! ## It appears that there is something wrong with Octave code for patches.
+%! hdl = figure (1234);
+%! clf;
+%! subplot (2,2,1);
+%! hold on;
+%! contourf (rand (10, 10));
+%! colorbar;
+%! subplot (2,2,2);
+%! quiver (rand (10, 10), rand (10, 10));
+%! subplot (2,2,3);
+%! colormap (jet (64));
+%! hold on;
+%! sombrero;
+%! colorbar ('peer', gca, 'NorthOutside');
+%! subplot (2,2,4);
+%! imagesc (rand (30, 30));
+%! text (15, 15, 'Rotated text', ...
+%!      'HorizontAlalignment', 'Center', 'Rotation', 30);
+%! hnew = copyobj (hdl);
+
 %!test
 %! h1 = figure ();
-%! set (h1, "visible", "off")
+%! set (h1, "visible", "off");
 %! x = 0:0.1:2*pi;
 %! y1 = sin (x);
 %! y2 = exp (x - 1);
@@ -79,49 +117,14 @@
 %! png1 = strcat (tmpnam (), ".png");
 %! png2 = strcat (tmpnam (), ".png");
 %! unwind_protect
-%!   print (h1, png1)
+%!   print (h1, png1);
 %!   [img1, map1, alpha1] = imread (png1);
-%!   print (h2, png2)
+%!   print (h2, png2);
 %!   [img2, map2, alpha2] = imread (png2);
 %! unwind_protect_cleanup
 %!   unlink (png1);
 %!   unlink (png2);
 %! end_unwind_protect
-%! assert (img1, img2)
-%! assert (map1, map2)
-%! assert (alpha1, alpha2)
-
-%!demo
-%! hdl = figure (1234);
-%! clf ()
-%! hold on
-%! x = 1:10;
-%! y = x.^2;
-%! dy = 2 * (.2 * x);
-%! y2 = (x - 3).^2;
-%! hg = errorbar (x, y, dy,'#~');
-%! set (hg, 'marker', '^', 'markerfacecolor', rand(1,3))
-%! plot (x, y2, 'ok-')
-%! legend ('errorbar', 'line')
-%! hout = copyobj (1234);
-
-%!demo
-%! hdl = figure (1234);
-%! clf ()
-%! subplot (2, 2, 1);
-%! hold on
-%! [C, H] = contourf (rand(10, 10));
-%! colorbar
-%! subplot (2, 2, 2);
-%! hold on
-%! quiver (rand(10, 10), rand(10, 10))
-%! subplot (2, 2, 3);
-%! colormap (jet (64))
-%! sombrero;
-%! colorbar('peer', gca, 'NorthOutside')
-%! subplot (2, 2, 4);
-%! imagesc (rand (30, 30));
-%! text (15, 15, 'Rotated text', ...
-%!      'HorizontAlalignment', 'Center', 'Rotation', 30);
-%! hout = copyobj (1234);
-
+%! assert (img1, img2);
+%! assert (map1, map2);
+%! assert (alpha1, alpha2);
--- a/scripts/plot/findfigs.m
+++ b/scripts/plot/findfigs.m
@@ -47,7 +47,7 @@
   screensize(3:4) -= margin;
 
   for i = 1:numel (figh)
-    if strcmp (get (figh(i), "visible"), "on")
+    if (strcmp (get (figh(i), "visible"), "on"))
 
       units = get (figh(i), "units");
       unwind_protect
--- a/scripts/plot/gco.m
+++ b/scripts/plot/gco.m
@@ -20,18 +20,18 @@
 ## @deftypefn  {Function File} {@var{h} =} gco ()
 ## @deftypefnx {Function File} {@var{h} =} gco (@var{fig})
 ## Return a handle to the current object of the current figure, or a handle
-## to the current object of the figure with handle @var{fig}. The current
-## object of a figure is the object that was last clicked on. It is stored
+## to the current object of the figure with handle @var{fig}.  The current
+## object of a figure is the object that was last clicked on.  It is stored
 ## in the CurrentObject property of the target figure.
 ##
 ## If the last mouse click didn't occur on any child object of the figure,
 ## the current object is the figure itself.
 ##
-## If no mouse click occured in the target figure, this function returns and
+## If no mouse click occured in the target figure, this function returns an
 ## empty matrix.
 ##
 ## Note that the value returned by this function is not necessarily the same
-## as the one returned by gcbo during callback execution. An executing
+## as the one returned by gcbo during callback execution.  An executing
 ## callback can be interrupted by another callback and the current object
 ## can be modified.
 ##
--- a/scripts/plot/gtext.m
+++ b/scripts/plot/gtext.m
@@ -18,16 +18,24 @@
 
 ## -*- texinfo -*-
 ## @deftypefn  {Function File} {} gtext (@var{s})
+## @deftypefnx {Function File} {} gtext (@{@var{s1}, @var{s2}, @dots{}@})
 ## @deftypefnx {Function File} {} gtext (@{@var{s1}; @var{s2}; @dots{}@})
 ## @deftypefnx {Function File} {} gtext (@dots{}, @var{prop}, @var{val})
+## @deftypefnx {Function File} {@var{h} =} gtext (@dots{})
 ## Place text on the current figure using the mouse.  The text is defined
-## by the string @var{s}.  If @var{s} is a cell array, each element of the cell
-## array is written to a separate line.  Additional arguments are passed to
-## the underlying text object as properties.
+## by the string @var{s}.  If @var{s} is a cell string organized as a row
+## vector then each string of the cell array is written to a separate line.
+## If @var{s} is organized as a column vector then one string element of the
+## cell array is placed for every mouse click.  Additional inputs besides a
+## string or cellstr are passed to the underlying text object as Property-value
+## pairs.
+##
+## The optional return value @var{h} is a graphics handle to the created
+## text object.
 ## @seealso{ginput, text}
 ## @end deftypefn
 
-function gtext (s, varargin)
+function h = gtext (s, varargin)
 
   if (nargin < 1)
     print_usage ();
@@ -37,9 +45,21 @@
     error ("gtext: S must be a string or cell array of strings");
   endif
 
+  htmp = -1;
   if (! isempty (s))
-    [x, y] = ginput (1);
-    text (x, y, s, varargin{:});
+    if (ischar (s) || isrow (s))
+      [x, y] = ginput (1);
+      htmp = text (x, y, s, varargin{:});
+    else
+      for i = 1:numel (s)
+        [x, y] = ginput (1);
+        htmp = text (x, y, s{i}, varargin{:});
+      endfor
+    endif
+  endif
+
+  if (nargout > 0)
+    h = htmp;
   endif
 
 endfunction
--- a/scripts/plot/hdl2struct.m
+++ b/scripts/plot/hdl2struct.m
@@ -15,8 +15,8 @@
 ## <http://www.gnu.org/licenses/>.
 
 ## -*- texinfo -*-
-## @deftypefn  {Function File} {@var{s} =} hdl2struct (@var{h})
-## Returns a structure, @var{s}, whose fields describe the properties
+## @deftypefn {Function File} {@var{s} =} hdl2struct (@var{h})
+## Return a structure, @var{s}, whose fields describe the properties
 ## of the object, and its children, associated with the handle, @var{h}.
 ## The fields of the structure, @var{s}, are "type", "handle", "properties",
 ## "children" and "special".
@@ -26,23 +26,24 @@
 ## Author: pdiribarne <pdiribarne@new-host.home>
 ## Created: 2012-03-04
 
-function hgS = hdl2struct (h)
+function s = hdl2struct (h)
+
   if (nargin != 1 || !ishandle (h))
     print_usage ();
   endif
 
   hiddenh = get (0, "showhiddenhandles");
-  if strcmp (hiddenh, "on")
+  if (strcmp (hiddenh, "on"))
     set (0, "showhiddenhandles", "off");
   endif
 
   ## main object
   main = get (h);
-  hgS.handle = h;
-  hgS.type =  main.type;
-  hgS.properties  = getprops (h);
-  hgS.children = [];
-  hgS.special = [];
+  s.handle = h;
+  s.type =  main.type;
+  s.properties  = getprops (h);
+  s.children = [];
+  s.special = [];
 
   ## sweep all children but legends, colorbars, uimenu and hggroup children
   ## in reverse order
@@ -52,11 +53,11 @@
   ui = findobj (h, "-depth", 1, "type", "uimenu");
   nkids = length (kids);
   ii = 0;
-  while nkids
-    if (! any (kids (nkids) == lg) && !any (kids (nkids) == cb)
-          && ! any (kids (nkids) == ui) && !strcmpi (main.type, "hggroup"))
+  while (nkids)
+    if (! any (kids (nkids) == lg) && ! any (kids (nkids) == cb)
+          && ! any (kids (nkids) == ui) && ! strcmp (main.type, "hggroup"))
       ii++;
-      hgS.children(ii) = hdl2struct(kids(nkids));
+      s.children(ii) = hdl2struct (kids(nkids));
     endif
     nkids--;
   endwhile
@@ -64,31 +65,31 @@
   ## add non "children" children objects (title, xlabel, ...) and
   ## hggroup children and tag theim in "special"
   special = [];
-  if (strcmpi (main.type, "hggroup"))
+  if (strcmp (main.type, "hggroup"))
     special = main.children;
   endif
   special = [special getspecial(h)];
   nsp = length (special);
-  while nsp
+  while (nsp)
     ii++;
-    hgS.children(ii) = hdl2struct (special(nsp));
-    hgS.special(nsp) = ii;
+    s.children(ii) = hdl2struct (special(nsp));
+    s.special(nsp) = ii;
     nsp--;
   endwhile
 
   ## look for legends and colorbars among "main"'s brothers and add them
   ## to the children list
-  if (strcmpi (main.type, "axes"))
+  if (strcmp (main.type, "axes"))
     par = main.parent;
     lg = findobj (par, "-depth", 1, "tag", "legend");
-    if !isempty (lg)
+    if (! isempty (lg))
       idx = arrayfun (@(x) get(x).userdata.handle(end) == h, lg);
-      lg = lg(find(idx));
+      lg = lg(find (idx));
     endif
     nlg = length (lg);
-    if nlg == 1
+    if (nlg == 1)
       ii++;
-      hgS.children(ii) = hdl2struct (lg);
+      s.children(ii) = hdl2struct (lg);
     elseif (nlg > 1)
       error ("hdl2struct: more than one legend found")
     endif
@@ -96,13 +97,13 @@
     cb = findobj (par, "-depth", 1, "tag", "colorbar");
     if (! isempty (cb))
       idx = arrayfun (@(x) get(x).axes == h, cb);
-      cb = cb(find(idx));
+      cb = cb(find (idx));
     endif
 
     ncb = length (cb);
     if (ncb == 1)
       ii++;
-      hgS.children(ii) = hdl2struct(cb);
+      s.children(ii) = hdl2struct (cb);
     elseif (nlg > 1)
       error ("hdl2struct: more than one colorbar found")
     endif
@@ -149,7 +150,7 @@
     prop = fields{nflds};
     val = obj.(fields{nflds});
     ii++;
-    if !any (strcmp (prop, forbid))
+    if (! any (strcmp (prop, forbid)))
       prpstr.(prop) = val;
     endif
     nflds--;
@@ -162,5 +163,8 @@
       prpstr.(hidden{ii}) = get (h, hidden{ii});
     endif
   endfor
+
 endfunction
 
+
+## FIXME: need validation tests
--- a/scripts/plot/plot.m
+++ b/scripts/plot/plot.m
@@ -205,5 +205,20 @@
 endfunction
 
 
-%% FIXME: Need demo or test for function
+%!demo
+%! x = 1:5;  y = 1:5;
+%! plot (x,y,'g');
+%! title ('plot of green line at 45 degrees');
 
+%!demo
+%! x = 1:5;  y = 1:5;
+%! plot (x,y,'g*');
+%! title ('plot of green stars along a line at 45 degrees');
+
+%!demo
+%! x1 = 1:5;  y1 = 1:5;
+%! x2 = 5:9; y2 = 5:-1:1;
+%! plot (x1,y1,'bo-', x2,y2,'rs-');
+%! axis ('tight');
+%! title ('plot of blue circles ascending and red squares descending with connecting lines drawn'); 
+
--- a/scripts/plot/slice.m
+++ b/scripts/plot/slice.m
@@ -104,7 +104,7 @@
     x = varargin{1};
     y = varargin{2};
     z = varargin{3};
-    if (isvector (x) && isvector (y) && isvector (z)]))
+    if (isvector (x) && isvector (y) && isvector (z))
       [x, y, z] = meshgrid (x, y, z);
     elseif (ndims (x) == 3 && size_equal (x, y, z))
       ## Do nothing.
--- a/scripts/plot/sombrero.m
+++ b/scripts/plot/sombrero.m
@@ -31,32 +31,26 @@
 
 ## Author: jwe
 
-function [x, y, z] = sombrero (n)
+function [x, y, z] = sombrero (n = 41)
 
-  if (nargin == 0)
-    n = 41;
+  if (nargin > 2)
+    print_usage ();
+  elseif (n <= 1)
+    error ("sombrero: number of grid lines N must be greater than 1");
   endif
 
-  if (nargin < 2)
-    if (n > 1)
-      tx = linspace (-8, 8, n)';
-      ty = tx;
-      [xx, yy] = meshgrid (tx, ty);
-      r = sqrt (xx .^ 2 + yy .^ 2) + eps;
-      tz = sin (r) ./ r;
-      if (nargout == 0)
-        surf (tx, ty, tz);
-        box ("off");
-      else
-        x = tx;
-        y = ty;
-        z = tz;
-      endif
-    else
-      error ("sombrero: number of grid lines must be greater than 1");
-    endif
+  tx = linspace (-8, 8, n)';
+  ty = tx;
+  [xx, yy] = meshgrid (tx, ty);
+  r = sqrt (xx .^ 2 + yy .^ 2) + eps;
+  tz = sin (r) ./ r;
+  if (nargout == 0)
+    surf (tx, ty, tz);
+    box ("off");
   else
-    print_usage ();
+    x = tx;
+    y = ty;
+    z = tz;
   endif
 
 endfunction
@@ -67,3 +61,7 @@
 %! colormap ('default');
 %! sombrero ();
 
+## Test input validation
+%!error sombrero (1,2,3)
+%!error <N must be greater than 1> sombrero (1)
+
--- a/scripts/plot/struct2hdl.m
+++ b/scripts/plot/struct2hdl.m
@@ -18,188 +18,187 @@
 ## @deftypefn  {Function File} {@var{h} =} struct2hdl (@var{s})
 ## @deftypefnx {Function File} {@var{h} =} struct2hdl (@var{s}, @var{p})
 ## @deftypefnx {Function File} {@var{h} =} struct2hdl (@var{s}, @var{p}, @var{hilev})
-## Constructs an object from the structure @var{s}. The structure must
-## contain the fields "handle", "type", "children", "properties", and
+## Construct a handle object @var{h} from the structure @var{s}.  The structure
+## must contain the fields "handle", "type", "children", "properties", and
 ## "special".  If the handle of an existing figure or axes is specified,
-## @var{p}, the new object will be created as a child to that object.
-## If no object handle is provided, then a new figure and the necessary
+## @var{p}, the new object will be created as a child of that object.
+## If no object handle is provided then a new figure and the necessary
 ## children will be constructed using the default object values from
 ## the root figure.
 ##
-## A third boolean argument @var{hilev} can be passed to specify wether
-## the function should try to preserve listeners/calbacks e.g for
-## legends or hggroups. Default is false.
-## @seealso{findobj, get, hdl2struct, set}
+## A third boolean argument @var{hilev} can be passed to specify whether
+## the function should try to preserve listeners/callbacks, e.g., for
+## legends or hggroups.  The default is false.
+## @seealso{hdl2struct, findobj, get, set}
 ## @end deftypefn
 
 ## Author: pdiribarne <pdiribarne@new-host.home>
 ## Created: 2012-03-04
 
-function [ h, matchout ] = struct2hdl (hgS, matchin=[], hilev = false)
+function [h, pout] = struct2hdl (s, p=[], hilev = false)
 
-  fields = { "handle", "type", "children", "properties", "special"};
+  fields = {"handle", "type", "children", "properties", "special"};
   partypes = {"root", "figure", "axes", "hggroup"};
   othertypes = {"line", "patch", "surface", "image", "text"};
   alltypes = [partypes othertypes];
 
-  if (nargin > 3 || ! isstruct (hgS))
+  if (nargin > 3 || ! isstruct (s))
     print_usage ();
-  elseif (! all (isfield (hgS, fields)))
+  elseif (! all (isfield (s, fields)))
     print_usage ();
-  elseif (isscalar (matchin))
-    if (! ishandle (matchin))
-      error ("struct2hdl: argument #2 is not a handle to graphic object")
+  elseif (isscalar (p))
+    if (! ishandle (p))
+      error ("struct2hdl: P is not a handle to a graphic object");
     endif
-    if (any (strcmp (get (matchin).type, partypes)))
-      paridx = find (strcmp (get (matchin).type, alltypes));
-      kididx = find (strcmp (hgS.type, alltypes));
+    if (any (strcmp (get (p).type, partypes)))
+      paridx = find (strcmp (get (p).type, alltypes));
+      kididx = find (strcmp (s.type, alltypes));
       if (kididx <= paridx)
-        error ("struct2hdl: incompatible input handles")
+        error ("struct2hdl: incompatible input handles");
       endif
     else
-      error ("struct2hdl: %s object can't be parent object", get (matchin).type)
+      error ("struct2hdl: %s object can't be parent object", get (p).type);
     endif
-    hpar = matchin;
-    matchin = [NaN; hpar];
+    hpar = p;
+    p = [NaN; hpar];
     ## create appropriate parent if needed
-    if (any (strcmp (hgS.type, othertypes)))
+    if (any (strcmp (s.type, othertypes)))
       for ii = (paridx+1) : (numel (partypes)-1)
         eval (["hpar = " partypes{ii} "(\"parent\", hpar);"]);
-        matchin = [matchin [NaN; hpar]];
+        p = [p [NaN; hpar]];
       endfor
-    elseif (any (strcmp (hgS.type, {"hggroup", "axes"})))
+    elseif (any (strcmp (s.type, {"hggroup", "axes"})))
       for ii = (paridx+1) : (kididx-1)
         eval (["hpar = " partypes{ii} "(\"parent\", hpar);"]);
-        matchin = [matchin [NaN; hpar]];
+        p = [p [NaN; hpar]];
       endfor
     else
       par = NaN;
     endif
-  elseif (isempty (matchin))
-    if (any (strcmp (hgS.type, othertypes)))
+  elseif (isempty (p))
+    if (any (strcmp (s.type, othertypes)))
       par = axes ();
-    elseif (any (strcmp (hgS.type, {"hggroup", "axes"})))
+    elseif (any (strcmp (s.type, {"hggroup", "axes"})))
       par = figure ();
     else
       par = NaN;
     endif
-    matchin = [NaN; par];
+    p = [NaN; par];
   endif
-  ## read parent (last column) in matchin and remove it if duplicate
-  par = matchin (2,end);
-  tst = find (matchin (2,:) == par);
+  ## read parent (last column) in p and remove it if duplicate
+  par = p(2,end);
+  tst = find (p(2,:) == par);
   if (numel (tst) > 1)
-    matchin = matchin (1:2, 1:(tst(end)-1));
+    p = p(1:2, 1:(tst(end)-1));
   endif
 
   ## create object
-  if (strcmpi (hgS.type, "root"))
+  if (strcmp (s.type, "root"))
     h = 0;
-    hgS.properties = rmfield (hgS.properties, ...
+    s.properties = rmfield (s.properties, ...
                               {"callbackobject", "commandwindowsize", ...
                                "screendepth", "screenpixelsperinch", ...
                                "screensize"});
-  elseif (strcmpi (hgS.type, "figure"))
+  elseif (strcmp (s.type, "figure"))
     h = figure ();
-  elseif (strcmpi (hgS.type, "axes"))
+  elseif (strcmp (s.type, "axes"))
     ## legends and colorbars are "transformed" in normal axes
     ## if hilev is not requested
     if (! hilev)
-      if (strcmp (hgS.properties.tag, "legend"))
-        hgS.properties.tag = "";
-        hgS.properties.userdata = [];
+      if (strcmp (s.properties.tag, "legend"))
+        s.properties.tag = "";
+        s.properties.userdata = [];
         par = gcf;
-      elseif (strcmp (hgS.properties.tag, "colorbar"))
-        hgS.properties.tag = "";
-        hgS.properties.userdata = [];
+      elseif (strcmp (s.properties.tag, "colorbar"))
+        s.properties.tag = "";
+        s.properties.userdata = [];
         par = gcf;
       endif
     endif
 
-    [h, hgS] = createaxes (hgS, matchin, par);
-  elseif (strcmpi (hgS.type, "line"))
-    h = createline (hgS, par);
-  elseif (strcmpi (hgS.type, "patch"))
-    [h, hgS] = createpatch (hgS, par);
-  elseif (strcmpi (hgS.type, "text"))
-    h = createtext (hgS, par);
-  elseif (strcmpi (hgS.type, "image"))
-    h = createimage (hgS, par);
-  elseif (strcmpi (hgS.type, "surface"))
-    h = createsurface (hgS, par);
-  elseif (strcmpi (hgS.type, "hggroup"))
-    [h, hgS, matchin] = createhg (hgS, matchin, par, hilev);
+    [h, s] = createaxes (s, p, par);
+  elseif (strcmp (s.type, "line"))
+    h = createline (s, par);
+  elseif (strcmp (s.type, "patch"))
+    [h, s] = createpatch (s, par);
+  elseif (strcmp (s.type, "text"))
+    h = createtext (s, par);
+  elseif (strcmp (s.type, "image"))
+    h = createimage (s, par);
+  elseif (strcmp (s.type, "surface"))
+    h = createsurface (s, par);
+  elseif (strcmp (s.type, "hggroup"))
+    [h, s, p] = createhg (s, p, par, hilev);
   endif
 
   ## children
-  matchin = [matchin [hgS.handle; h]]; # [original; new]
-  kids = hgS.children;
+  p = [p [s.handle; h]];  # [original; new]
+  kids = s.children;
   nkids = length (kids);
   ii = 0;
-  while nkids
+  while (nkids)
     ii++;
-    if (! any (ii == hgS.special))
-      [h2, matchin] = struct2hdl (hgS.children(ii),
-                                  [matchin [hgS.handle; h]], hilev);
+    if (! any (ii == s.special))
+      [h2, p] = struct2hdl (s.children(ii), [p [s.handle; h]], hilev);
     endif
     nkids--;
   endwhile
 
   ## paste properties
-  setprops (hgS, h, matchin, hilev);
+  setprops (s, h, p, hilev);
 
-  matchout = matchin;
+  pout = p;
 
 endfunction
 
-function [h, hgSout] = createaxes (hgS, matchin, par);
+function [h, sout] = createaxes (s, p, par)
   ## regular axes
-  if (strcmpi (hgS.properties.tag, ""))
-    propval = {"position", hgS.properties.position};
+  if (strcmp (s.properties.tag, ""))
+    propval = {"position", s.properties.position};
     hid = {"autopos_tag", "looseinset"};
     for ii = 1:numel (hid)
       prop = hid{ii};
-      if (isfield (hgS.properties, prop))
-        val = hgS.properties.(prop);
+      if (isfield (s.properties, prop))
+        val = s.properties.(prop);
         propval = [propval, prop, val];
       endif
     endfor
     h = axes (propval{:}, "parent", par);
 
-    if isfield (hgS.properties, "__plotyy_axes__")
-      plty = hgS.properties.__plotyy_axes__;
-      addproperty ("__plotyy_axes__", h, "any")
-      tmp = [matchin [hgS.handle; h]];
-      tst = arrayfun (@(x) any (plty == x), tmp (1:2:end));
-      if sum (tst) == numel (plty)
+    if (isfield (s.properties, "__plotyy_axes__"))
+      plty = s.properties.__plotyy_axes__;
+      addproperty ("__plotyy_axes__", h, "any");
+      tmp = [p [s.handle; h]];
+      tst = arrayfun (@(x) any (plty == x), tmp(1:2:end));
+      if (sum (tst) == numel (plty))
         for ii = 1:numel (plty)
-          plty(ii) = tmp (find (tmp == plty(ii)) + 1);
+          plty(ii) = tmp(find (tmp == plty(ii)) + 1);
         endfor
         for ii = 1:numel (plty)
           set (plty(ii), "__plotyy_axes__", plty);
         endfor
       endif
-      hgS.properties = rmfield (hgS.properties, "__plotyy_axes__");
+      s.properties = rmfield (s.properties, "__plotyy_axes__");
     endif
 
     ## delete non-default and already set properties
-    fields = fieldnames (hgS.properties);
+    fields = fieldnames (s.properties);
     tst = cellfun (@(x) isprop (h, x), fields);
-    hgS.properties = rmfield (hgS.properties,  fields(find (tst == 0)));
+    s.properties = rmfield (s.properties, fields(find (tst == 0)));
 
-  elseif (strcmpi (hgS.properties.tag, "legend"))
+  elseif (strcmp (s.properties.tag, "legend"))
     ## legends
-    oldax = hgS.properties.userdata.handle;
-    idx = find (matchin == oldax);
-    newax = matchin(idx+1);
+    oldax = s.properties.userdata.handle;
+    idx = find (p == oldax);
+    newax = p(idx+1);
     strings = {};
-    kids = hgS.children;
-    kids(hgS.special) = [];
+    kids = s.children;
+    kids(s.special) = [];
     oldh = unique (arrayfun (@(x) x.properties.userdata(end), kids));
     for ii = 1:length (oldh)
-      idx = find (matchin(1:2:end) == oldh(ii)) * 2;
+      idx = find (p(1:2:end) == oldh(ii)) * 2;
       if (! isempty (idx))
-        newh(ii) = matchin (idx);
+        newh(ii) = p(idx);
         if (! strcmp (get (newh(ii), "type"), "hggroup"))
           str = get (newh(ii), "displayname");
           strings = [strings str];
@@ -208,93 +207,93 @@
           strings = [strings str];
         endif
       else
-        error ("struct2hdl: didn't find a legend item")
+        error ("struct2hdl: didn't find a legend item");
       endif
     endfor
-    location = hgS.properties.location;
-    orientation = hgS.properties.orientation;
-    textpos = hgS.properties.textposition;
-    box = hgS.properties.box;
+    location = s.properties.location;
+    orientation = s.properties.orientation;
+    textpos = s.properties.textposition;
+    box = s.properties.box;
 
     h = legend (newax, newh, strings, "location", location, ...
                 "orientation", orientation);
     set (h, "textposition", textpos); # bug makes "textposition"
-                                # redefine the legend
+                                      # redefine the legend
     h = legend (newax, newh, strings, "location", location, ...
                 "orientation", orientation);
     ## box
     if (strcmp (box, "on"))
-      legend boxon
+      legend ("boxon");
     endif
 
     ## visibility
     tst = arrayfun (@(x) strcmp (x.properties.visible, "on"), kids);
-    if !any (tst)
+    if (! any (tst))
       legend ("hide");
     endif
 
     ## remove all properties such as "textposition" that redefines
     ## the entire legend. Also remove chidren
-    hgS.properties = rmfield (hgS.properties, ...
-                                {"userdata", "xlabel",...
-                                 "ylabel", "zlabel", "location", ...
-                                 "title", "string","orientation", ...
-                                 "visible", "textposition"});
+    s.properties = rmfield (s.properties, ...
+                              {"userdata", "xlabel",...
+                               "ylabel", "zlabel", "location", ...
+                               "title", "string","orientation", ...
+                               "visible", "textposition"});
 
-    hgS.children = [];
+    s.children = [];
 
-  elseif (strcmpi (hgS.properties.tag, "colorbar"))
+  elseif (strcmp (s.properties.tag, "colorbar"))
     ## colorbar
-    oldax = hgS.properties.axes;
-    if (! isempty (idx = find (oldax == matchin)))
-      ax = matchin(idx+1);
-      location = hgS.properties.location;
+    oldax = s.properties.axes;
+    if (! isempty (idx = find (oldax == p)))
+      ax = p(idx+1);
+      location = s.properties.location;
       h = colorbar ("peer", ax, location);
-      hgS.properties = rmfield (hgS.properties, ...
-                              {"userdata", "xlabel" ...
-                               "ylabel", "zlabel", ...
-                               "title", "axes"});
-      hgS.children= [];
+      s.properties = rmfield (s.properties, ...
+                                {"userdata", "xlabel" ...
+                                 "ylabel", "zlabel", ...
+                                 "title", "axes"});
+      s.children= [];
     else
-      error ("hdl2struct: didn't find an object")
+      error ("hdl2struct: didn't find an object");
     endif
   endif
-  hgSout = hgS;
+  sout = s;
 endfunction
 
-function [h] = createline (hgS, par);
+function h = createline (s, par)
   h = line ("parent", par);
-  addmissingprops (h, hgS.properties);
+  addmissingprops (h, s.properties);
 endfunction
 
-function [h, hgSout] = createpatch (hgS, par);
-  prp.faces = hgS.properties.faces;
-  prp.vertices = hgS.properties.vertices;
-  prp.facevertexcdata = hgS.properties.facevertexcdata;
+function [h, sout] = createpatch (s, par)
+  prp.faces = s.properties.faces;
+  prp.vertices = s.properties.vertices;
+  prp.facevertexcdata = s.properties.facevertexcdata;
   h = patch (prp);
   set (h, "parent", par);
-  hgS.properties = rmfield (hgS.properties,
+  s.properties = rmfield (s.properties,
                             {"faces", "vertices", "facevertexcdata"});
-  addmissingprops (h, hgS.properties);
-  hgSout = hgS;
+  addmissingprops (h, s.properties);
+  sout = s;
 endfunction
 
-function [h] = createtext (hgS, par);
+function h = createtext (s, par)
   h = text ("parent", par);
-  addmissingprops (h, hgS.properties)
+  addmissingprops (h, s.properties);
 endfunction
 
-function [h] = createimage (hgS, par);
+function h = createimage (s, par)
   h = image ("parent", par);
-  addmissingprops (h, hgS.properties)
+  addmissingprops (h, s.properties);
 endfunction
 
-function [h] = createsurface (hgS, par);
+function h = createsurface (s, par)
   h = surface ("parent", par);
-  addmissingprops (h, hgS.properties)
+  addmissingprops (h, s.properties);
 endfunction
 
-function [h, hgSout, matchout] = createhg (hgS, matchin, par, hilev)
+function [h, sout, pout] = createhg (s, p, par, hilev)
   ## Here we infer from properties the type of hggroup we should build
   ## an call corresponding high level functions
   ## We manually set "hold on" to avoid next hggroup be deleted
@@ -302,57 +301,57 @@
 
   hold on;
   if (hilev)
-    [h, hgS, matchin] = createhg_hilev (hgS, matchin, par);
-    if (numel (hgS.children) != numel (get (h).children))
-      warning (["struct2hdl: couldn't infer the hggroup type. ", ...
+    [h, s, p] = createhg_hilev (s, p, par);
+    if (numel (s.children) != numel (get (h).children))
+      warning (["struct2hdl: could not infer the hggroup type. ", ...
                 "Will build objects but listener/callback functions ", ...
                 "will be lost"]);
-      if isfield (h, "bargroup")
+      if (isfield (h, "bargroup"))
         delete (get (h).bargroup);
       else
         delete (h);
       endif
       h = hggroup ("parent", par);
-      addmissingprops (h, hgS.properties);
-      hgS.special = [];
+      addmissingprops (h, s.properties);
+      s.special = [];
     else
-      oldkids = hgS.children;
+      oldkids = s.children;
       newkids = get (h).children;
       nkids = numel (oldkids);
       ii = 1;
-      while nkids
-        matchin = [matchin [oldkids(ii++).handle; newkids(nkids--)]];
+      while (nkids)
+        p = [p [oldkids(ii++).handle; newkids(nkids--)]];
       endwhile
     endif
   else
     h = hggroup ("parent", par);
-    addmissingprops (h, hgS.properties);
-    hgS.special = [];
+    addmissingprops (h, s.properties);
+    s.special = [];
   endif
-  hgSout = hgS;
-  matchout = matchin;
+  sout = s;
+  pout = p;
 endfunction
 
-function [h, hgSout, matchout] = createhg_hilev (hgS, matchin, par)
-  fields = hgS.properties;
+function [h, sout, pout] = createhg_hilev (s, p, par)
+  fields = s.properties;
   if (isfield (fields, "contourmatrix"))
     ## contours
-    xdata = hgS.properties.xdata;
-    ydata = hgS.properties.ydata;
-    zdata = hgS.properties.zdata;
-    levellist = hgS.properties.levellist;
-    textlist = hgS.properties.textlist;
+    xdata = s.properties.xdata;
+    ydata = s.properties.ydata;
+    zdata = s.properties.zdata;
+    levellist = s.properties.levellist;
+    textlist = s.properties.textlist;
 
     ## contour creation
-    if (isempty (hgS.children(1).properties.zdata))
-      if (strcmpi (hgS.properties.fill, "on"))
+    if (isempty (s.children(1).properties.zdata))
+      if (strcmpi (s.properties.fill, "on"))
         [cm2, h] = contourf (xdata, ydata, zdata, levellist);
       else
         [cm2, h] = contour (xdata, ydata, zdata, levellist);
       endif
 
       ## labels
-      if (strcmpi (hgS.properties.showtext, "on"))
+      if (strcmpi (s.properties.showtext, "on"))
         clabel (cm2, h, textlist);
       endif
     else
@@ -360,7 +359,7 @@
     endif
 
     ## delete already set properties and children
-    hgS.properties = rmfield (hgS.properties, ...
+    s.properties = rmfield (s.properties, ...
                               {"xdata", "ydata", "zdata", ...
                                "contourmatrix", "levellist", ...
                                "fill", "labelspacing", ...
@@ -372,16 +371,16 @@
 
   elseif (isfield (fields, "udata") && isfield (fields, "vdata"))
     ## quiver
-    xdata = hgS.properties.xdata;
-    ydata = hgS.properties.ydata;
+    xdata = s.properties.xdata;
+    ydata = s.properties.ydata;
 
-    udata = hgS.properties.udata;
-    vdata = hgS.properties.vdata;
+    udata = s.properties.udata;
+    vdata = s.properties.vdata;
 
     h = quiver (xdata, ydata, udata, vdata);
 
     ## delete already set properties and children
-    hgS.properties = rmfield (hgS.properties, ...
+    s.properties = rmfield (s.properties, ...
                               {"xdata", "ydata", "zdata", ...
                                "xdatasource", "ydatasource", "zdatasource", ...
                                "udata", "vdata", "wdata", ...
@@ -389,13 +388,13 @@
 
   elseif (isfield (fields, "format"))
     ##errorbar
-    form = hgS.properties.format;
-    xdata = hgS.properties.xdata;
-    ydata = hgS.properties.ydata;
-    xldata = hgS.properties.xldata;
-    ldata = hgS.properties.ldata;
-    xudata = hgS.properties.xudata;
-    udata = hgS.properties.udata;
+    form = s.properties.format;
+    xdata = s.properties.xdata;
+    ydata = s.properties.ydata;
+    xldata = s.properties.xldata;
+    ldata = s.properties.ldata;
+    xudata = s.properties.xudata;
+    udata = s.properties.udata;
 
     switch form
       case "xerr"
@@ -411,10 +410,10 @@
       case "boxxy"
         h = errorbar (xdata, ydata, xldata, xudata, ldata, udata, "#~>");
       otherwise
-        error ("struct2hdl: couldn't guess the errorbar format")
+        error ("struct2hdl: couldn't guess the errorbar format");
     endswitch
     ## delete already set properties
-    hgS.properties = rmfield (hgS.properties, ...
+    s.properties = rmfield (s.properties, ...
                               {"xdata", "ydata", ...
                                "xldata", "ldata", ...
                                "xudata", "udata", ...
@@ -429,20 +428,20 @@
     ## and rebuild the whole bargroup.
     ## The duplicate are deleted after calling "setprops"
 
-    bargroup = hgS.properties.bargroup;
-    oldh = hgS.handle;
+    bargroup = s.properties.bargroup;
+    oldh = s.handle;
 
-    temp = arrayfun (@(x) any(x == bargroup), [matchin(1:2:end) oldh]);
+    temp = arrayfun (@(x) any(x == bargroup), [p(1:2:end) oldh]);
     tst = sum (temp) == length (bargroup);
 
     if (isscalar (bargroup) || !tst)
-      xdata = hgS.properties.xdata;
-      ydata = hgS.properties.ydata;
+      xdata = s.properties.xdata;
+      ydata = s.properties.ydata;
 
       h = bar (xdata, ydata);
 
       ## delete already set properties,
-      hgS.properties = rmfield (hgS.properties, ...
+      s.properties = rmfield (s.properties, ...
                                 {"xdata", "ydata", ...
                                  "xdatasource", "ydatasource", ...
                                  "bargroup", ...
@@ -453,18 +452,18 @@
 
       ##build x/y matrix
       nbar = length (bargroup);
-      tmp = struct ("handle", NaN,"type", "", "children", [], "special", []);
+      tmp = struct ("handle", NaN, "type", "", "children", [], "special", []);
       for ii = 1:(nbar - 1)
-        idx = find (matchin(1:2:end) == bargroup(ii)) * 2;
-        hdl = matchin (idx);
+        idx = find (p(1:2:end) == bargroup(ii)) * 2;
+        hdl = p (idx);
         xdata = [xdata get(hdl).xdata];
         ydata = [ydata get(hdl).ydata];
         tmp.children(ii) = hdl2struct (hdl);
       endfor
 
-      xdata = [xdata hgS.properties.xdata];
-      ydata = [ydata hgS.properties.ydata];
-      width = hgS.properties.barwidth;
+      xdata = [xdata s.properties.xdata];
+      ydata = [ydata s.properties.ydata];
+      width = s.properties.barwidth;
       h = bar (ydata, width);
 
       ## replace previous handles in "match", copy props and delete redundant
@@ -472,82 +471,82 @@
         props = tmp.children(ii).properties;
         bl = props.baseline;
         tmp.children(ii).properties = rmfield (props, {"baseline", "bargroup"});
-        setprops (tmp.children(ii), h(ii), matchin, 1);
+        setprops (tmp.children(ii), h(ii), p, 1);
         delete (tmp.children(ii).handle);
         delete (bl);
-        idxpar = find (matchin == tmp.children(ii).handle);
-        matchin (idxpar) = h(ii);
+        idxpar = find (p == tmp.children(ii).handle);
+        p(idxpar) = h(ii);
         idxkid = idxpar - 2;
-        matchin (idxkid) = get (h(ii), "children");
+        p(idxkid) = get (h(ii), "children");
       endfor
-      matchin (2,((end-nbar+2):end)) = h (1:(end-1));
-      h = h (end);
+      p(2,((end-nbar+2):end)) = h(1:(end-1));
+      h = h(end);
 
       ## delete already set properties ,
-      hgS.properties = rmfield (hgS.properties, ...
+      s.properties = rmfield (s.properties, ...
                                 {"xdata", "ydata", "bargroup"...
                                  "barwidth", "baseline"});
     endif
   elseif (isfield (fields, "baseline"))
     ## stem plot
-    xdata = hgS.properties.xdata;
-    ydata = hgS.properties.ydata;
+    xdata = s.properties.xdata;
+    ydata = s.properties.ydata;
 
     h = stem (xdata, ydata);
 
     ## delete already set properties,
-    hgS.properties = rmfield (hgS.properties, ...
+    s.properties = rmfield (s.properties, ...
                               {"xdata", "ydata", ...
                                "xdatasource", "ydatasource", ...
                                "baseline"});
   elseif (isfield (fields, "basevalue"))
     ## area plot
-    xdata = hgS.properties.xdata;
-    ydata = hgS.properties.ydata;
-    level = hgS.properties.basevalue;
+    xdata = s.properties.xdata;
+    ydata = s.properties.ydata;
+    level = s.properties.basevalue;
 
     h = area (xdata, ydata, level);
 
     ## delete already set properties,
-    hgS.properties = rmfield (hgS.properties, ...
+    s.properties = rmfield (s.properties, ...
                               {"xdata", "ydata", ...
                                "xdatasource", "ydatasource"});
   else
-    warning ("struct2hdl: couldn't infer the hggroup type. Will build objects but listener/callback functions will be lost");
+    warning ("struct2hdl: could not infer the hggroup type. Will build objects but listener/callback functions will be lost");
     h = hggroup ("parent", par);
-    addmissingprops (h, hgS.properties);
-    hgS.special = [];           # children will be treated as normal children
+    addmissingprops (h, s.properties);
+    s.special = [];           # children will be treated as normal children
   endif
-  hgSout = hgS;
-  matchout = matchin;
+  sout = s;
+  pout = p;
 endfunction
 
-function setprops (hgS, h, matchin, hilev)
-  more off
-  if (strcmpi (hgS.properties.tag, ""))
-    specs = hgS.children(hgS.special);
+function setprops (s, h, p, hilev)
+  more off;
+  if (strcmpi (s.properties.tag, ""))
+    specs = s.children(s.special);
     hdls = arrayfun (@(x) x.handle, specs);
-    nh = length(hdls);
+    nh = length (hdls);
     msg = "";
     if (! nh)
-      set (h, hgS.properties);
+      set (h, s.properties);
     else
       ## Specials are objects that where automatically constructed with
       ## current object. Among them are "x(yz)labels", "title", high
       ## level hggroup children
-      fields = fieldnames (hgS.properties);
-      vals = struct2cell (hgS.properties);
+      fields = fieldnames (s.properties);
+      vals = struct2cell (s.properties);
       idx = find (cellfun (@(x) valcomp(x, hdls) , vals));
-      hgS.properties = rmfield (hgS.properties, fields(idx));
+      s.properties = rmfield (s.properties, fields(idx));
 
       ## set all properties but special handles
-      set (h, hgS.properties);
+      set (h, s.properties);
 
       ## find  props with val == (one of special handles)
       nf = length (idx);
       fields = fields(idx);
       vals = vals(idx);
-      while nf
+      while (nf)
         field = fields{nf};
         idx = find (hdls == vals{nf});
         spec = specs(idx);
@@ -561,39 +560,39 @@
       ## If hggroup children  were created by high level functions,
       ## copy only usefull properties.
       if (hilev)
-        if (strcmpi (hgS.type, "hggroup"))
-          nold = numel (hgS.children);
-          nnew = numel (get(h).children);
+        if (strcmp (s.type, "hggroup"))
+          nold = numel (s.children);
+          nnew = numel (get (h).children);
 
           if (nold == nnew)
-            hnew = get(h).children;
+            hnew = get (h).children;
             ii = 1;
-            while ii <= nnew
+            while (ii <= nnew)
               try
                 set (hnew (ii), "displayname", ...
-                     hgS.children(ii).properties.displayname);
+                     s.children(ii).properties.displayname);
               catch
-                sprintf ("struct2hdl: couldn't set hggroup children #%d props.", ii)
+                sprintf ("struct2hdl: couldn't set hggroup children #%d props.", ii);
               end_try_catch
               ii ++;
             endwhile
 
           else
-            error ("struct2hdl: non-conformant number of children in hgggroup")
+            error ("struct2hdl: non-conformant number of children in hgggroup");
           endif
         endif
       endif
     endif
 
-  elseif (strcmpi (hgS.properties.tag, "legend")
-          || strcmpi (hgS.properties.tag, "colorbar"))
-    set (h, hgS.properties);
+  elseif (strcmpi (s.properties.tag, "legend")
+          || strcmpi (s.properties.tag, "colorbar"))
+    set (h, s.properties);
   endif
 
 endfunction
 
 function out = valcomp (x, hdls)
-  if (isfloat(x) && isscalar(x))
+  if (isfloat (x) && isscalar (x))
     out = any (x == hdls);
   else
     out = 0;
@@ -606,10 +605,13 @@
   curfields = fieldnames (get (h));
   missing = cellfun (@(x) !any (strcmp (x, curfields)), oldfields);
   idx = find (missing);
-  for ii = 1:length(idx)
+  for ii = 1:length (idx)
     prop = oldfields{idx(ii)};
     if (! any (strcmp (prop, hid)))
       addproperty (prop, h, "any");
     endif
   endfor
 endfunction
+
+
+## FIXME: Need validation tests
--- a/scripts/plot/uigetfile.m
+++ b/scripts/plot/uigetfile.m
@@ -81,7 +81,7 @@
     error ("uigetfile: number of input arguments must be less than eight");
   endif
 
-  defaultvals = {cell (0, 2),        # File Filter
+  defaultvals = {cell(0, 2),         # File Filter
                  "Open File",        # Dialog Title
                  "",                 # Default file name
                  [240, 120],         # Dialog Position (pixel x/y)
--- a/scripts/plot/uiputfile.m
+++ b/scripts/plot/uiputfile.m
@@ -72,7 +72,7 @@
     print_usage ();
   endif
 
-  defaultvals = {cell (0, 2),    # File Filter
+  defaultvals = {cell(0, 2),     # File Filter
                  "Save File",    # Dialog Title
                  "",             # Default file name
                  [240, 120],     # Dialog Position (pixel x/y)
--- a/scripts/polynomial/splinefit.m
+++ b/scripts/polynomial/splinefit.m
@@ -221,19 +221,19 @@
   pp = __splinefit__ (x, y, breaks, args{:});
 endfunction
 
+
 %!shared xb, yb, x
 %! xb = 0:2:10;
-%! yb = randn (size (xb));
+%! yb = 2*rand (size (xb)) - 1;
 %! x = 0:0.1:10;
 
 %!test
 %! y = interp1 (xb, yb, x, "linear");
-%! assert (ppval (splinefit (x, y, xb, "order", 1), x), y, 10 * eps ());
+%! assert (ppval (splinefit (x, y, xb, "order", 1), x), y, 15 * eps ());
 %!test
 %! y = interp1 (xb, yb, x, "spline");
-%! assert (ppval (splinefit (x, y, xb, "order", 3), x), y, 10 * eps ());
+%! assert (ppval (splinefit (x, y, xb, "order", 3), x), y, 15 * eps ());
 %!test
 %! y = interp1 (xb, yb, x, "spline");
-%! assert (ppval (splinefit (x, y, xb), x), y, 10 * eps ());
+%! assert (ppval (splinefit (x, y, xb), x), y, 15 * eps ());
 
-
--- a/scripts/testfun/demo.m
+++ b/scripts/testfun/demo.m
@@ -123,19 +123,11 @@
     ## Process each demo without failing
     try
       block = code(idx(doidx(i)):idx(doidx(i)+1)-1);
-      ## FIXME: need to check for embedded test functions, which cause
-      ## segfaults, until issues with subfunctions in functions are resolved.
-      embed_func = regexp (block, '^\s*function ', 'once', 'lineanchors');
-      if (isempty (embed_func))
-        ## Use an environment without variables
-        eval (cstrcat ("function __demo__ ()\n", block, "\nendfunction"));
-        ## Display the code that will be executed before executing it
-        printf ("%s example %d:%s\n\n", name, doidx(i), block);
-        __demo__;
-      else
-        error (["Functions embedded in %!demo blocks are not allowed.\n", ...
-                "Use the %!function/%!endfunction syntax instead to define shared functions for testing.\n"]);
-      endif
+      ## Use an environment without variables
+      eval (cstrcat ("function __demo__ ()\n", block, "\nendfunction"));
+      ## Display the code that will be executed before executing it
+      printf ("%s example %d:%s\n\n", name, doidx(i), block);
+      __demo__;
     catch
       ## Let the programmer know which demo failed.
       printf ("%s example %d: failed\n%s\n", name, doidx(i), lasterr ());
--- a/scripts/testfun/test.m
+++ b/scripts/testfun/test.m
@@ -334,10 +334,6 @@
                          __signal_fail);
       end_try_catch
 
-      ## Clear shared function definitions.
-      eval (__clear, "");
-      __clear = "";
-
       ## Initialization code will be evaluated below.
 
 ### FUNCTION
@@ -555,6 +551,7 @@
     __tests += __istest;
     __successes += __success * __istest;
   endfor
+  ## Clear any test functions created
   eval (__clear, "");
 
   if (nargout == 0)
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,4 +1,4 @@
-# Makefile for octave's src directory
+# Makefile for Octave's src directory
 #
 # Copyright (C) 1993-2012 John W. Eaton
 #
@@ -20,38 +20,46 @@
 
 include $(top_srcdir)/build-aux/common.mk
 
+AUTOMAKE_OPTIONS = subdir-objects
+
 ## Search local directories before those specified by the user.
 AM_CPPFLAGS = \
-  -I../libgnu -I$(top_srcdir)/libgnu \
   -I$(top_srcdir)/libcruft/misc \
   -I../liboctave -I$(top_srcdir)/liboctave \
-  -I. -I$(srcdir) \
-  @CPPFLAGS@
-
-AUTOMAKE_OPTIONS = subdir-objects
+  -I$(srcdir)/octave-value \
+  -I$(srcdir)/operators \
+  -Iparse-tree -I$(srcdir)/parse-tree \
+  -Iinterp-core -I$(srcdir)/interp-core \
+  -Iinterpfcn -I$(srcdir)/interpfcn \
+  -Icorefcn \
+  -I$(top_builddir)/libgnu -I$(top_srcdir)/libgnu
 
 octlib_LTLIBRARIES = liboctinterp.la
 
 if AMCOND_BUILD_COMPILED_AUX_PROGRAMS
 bin_PROGRAMS = \
   mkoctfile \
-  octave \
+  $(OCTAVE_PROGRAMS) \
   octave-config
 
 mkoctfile_SOURCES =
 nodist_mkoctfile_SOURCES = mkoctfile.cc
-mkoctfile_LDADD = ../libgnu/libgnu.la $(LIBS)
+mkoctfile_LDADD = $(top_builddir)/libgnu/libgnu.la $(LIBS)
 
 octave_config_SOURCES =
 nodist_octave_config_SOURCES = octave-config.cc
-octave_config_LDADD = ../libgnu/libgnu.la $(LIBS)
+octave_config_LDADD = \
+  corefcn/libcorefcn.la \
+	$(top_builddir)/libgnu/libgnu.la \
+	$(LIBS)
 
 BUILT_SOURCES_EXTRA = \
   mkoctfile.cc \
   octave-config.cc
 else
 bin_PROGRAMS = \
-  octave
+  octave \
+  octave-cli
 
 bin_SCRIPTS = \
   mkoctfile \
@@ -62,33 +70,33 @@
 ## $(DEF_FILES), and building those requires all the sources
 ## (except builtins.cc) to be available.
 BUILT_SOURCES = \
+  interp-core/mxarray.h \
+  interp-core/oct-errno.cc \
+  interpfcn/defaults.h \
+  interpfcn/graphics-props.cc \
+  interpfcn/graphics.h \
+  operators/ops.cc \
+  parse-tree/lex.cc \
+  parse-tree/oct-gperf.h \
+  parse-tree/oct-parse.cc \
+  oct-conf.h \
+  version.h \
   $(BUILT_SOURCES_EXTRA) \
-  defaults.h \
-  graphics.h \
-  graphics-props.cc \
-  lex.cc \
-  mxarray.h \
-  oct-conf.h \
-  oct-errno.cc \
-  oct-gperf.h \
-  oct-parse.cc \
-  ops.cc \
-  version.h \
   builtins.cc
 
 BUILT_DISTFILES = \
-  oct-gperf.h \
-  oct-parse.h
+  parse-tree/oct-gperf.h \
+  parse-tree/oct-parse.h
 
 ## Files that are created during build process and installed,
 ## BUT not distributed in tarball.
 BUILT_NODISTFILES = \
-  defaults.h \
-  graphics.h \
+  interp-core/mxarray.h \
+  interp-core/oct-errno.cc \
+  interpfcn/defaults.h \
+  interpfcn/graphics.h \
+  operators/ops.cc \
   oct-conf.h \
-  oct-errno.cc \
-  ops.cc \
-  mxarray.h \
   version.h \
   $(OPT_HANDLERS) \
   $(OPT_INC) \
@@ -97,13 +105,10 @@
 
 EXTRA_DIST = \
   Makefile.in \
-  defaults.in.h \
   DOCSTRINGS \
   find-defun-files.sh \
   gendoc.pl \
   genprops.awk \
-  gl2ps.c \
-  graphics.in.h \
   mk-errno-list \
   mk-pkg-add \
   mkbuiltins \
@@ -111,382 +116,56 @@
   mkoctfile.in.cc \
   mkoctfile.in.sh \
   mkops \
-  mxarray.in.h \
   oct-conf.in.h \
-  oct-errno.in.cc \
   octave-config.in.cc \
   octave-config.in.sh \
-  octave.gperf \
   version.in.h \
   $(BUILT_DISTFILES)
 
-OPT_HANDLERS = \
-  DASPK-opts.cc \
-  DASRT-opts.cc \
-  DASSL-opts.cc \
-  LSODE-opts.cc \
-  Quad-opts.cc
-
-OPT_INC = \
-  ../liboctave/DASPK-opts.h \
-  ../liboctave/DASRT-opts.h \
-  ../liboctave/DASSL-opts.h \
-  ../liboctave/LSODE-opts.h \
-  ../liboctave/Quad-opts.h
-
-OV_INTTYPE_INC = \
-  ov-base-int.h \
-  ov-base-int.cc \
-  ov-int-traits.h \
-  ov-int16.h \
-  ov-int32.h \
-  ov-int64.h \
-  ov-int8.h \
-  ov-intx.h \
-  ov-uint16.h \
-  ov-uint32.h \
-  ov-uint64.h \
-  ov-uint8.h
-
-OV_INCLUDES = \
-  ov-base-diag.h \
-  ov-base-diag.cc \
-  ov-base-mat.h \
-  ov-base-mat.cc \
-  ov-base-scalar.h \
-  ov-base-scalar.cc \
-  ov-base.h \
-  ov-bool-mat.h \
-  ov-bool-mat.cc \
-  ov-bool.h \
-  ov-builtin.h \
-  ov-cell.h \
-  ov-ch-mat.h \
-  ov-class.h \
-  ov-colon.h \
-  ov-complex.h \
-  ov-cs-list.h \
-  ov-cx-diag.h \
-  ov-cx-mat.h \
-  ov-dld-fcn.h \
-  ov-fcn-handle.h \
-  ov-fcn-inline.h \
-  ov-fcn.h \
-  ov-float.h \
-  ov-flt-complex.h \
-  ov-flt-cx-diag.h \
-  ov-flt-cx-mat.h \
-  ov-flt-re-diag.h \
-  ov-flt-re-mat.h \
-  ov-lazy-idx.h \
-  ov-mex-fcn.h \
-  ov-null-mat.h \
-  ov-oncleanup.h \
-  ov-perm.h \
-  ov-range.h \
-  ov-re-diag.h \
-  ov-re-mat.h \
-  ov-scalar.h \
-  ov-str-mat.h \
-  ov-struct.h \
-  ov-type-conv.h \
-  ov-typeinfo.h \
-  ov-usr-fcn.h \
-  ov.h \
-  $(OV_INTTYPE_INC)
-
-OV_SPARSE_INCLUDES = \
-  ov-base-sparse.h \
-  ov-bool-sparse.h \
-  ov-cx-sparse.h \
-  ov-re-sparse.h
-
-PT_INCLUDES = \
-  pt-all.h \
-  pt-arg-list.h \
-  pt-assign.h \
-  pt-binop.h \
-  pt-bp.h \
-  pt-cbinop.h \
-  pt-cell.h \
-  pt-check.h \
-  pt-cmd.h \
-  pt-colon.h \
-  pt-const.h \
-  pt-decl.h \
-  pt-eval.h \
-  pt-except.h \
-  pt-exp.h \
-  pt-fcn-handle.h \
-  pt-id.h \
-  pt-idx.h \
-  pt-jump.h \
-  pt-loop.h \
-  pt-mat.h \
-  pt-misc.h \
-  pt-pr-code.h \
-  pt-select.h \
-  pt-stmt.h \
-  pt-unop.h \
-  pt-walk.h \
-  pt.h
-
 octinclude_HEADERS = \
-  Cell.h \
+  interpfcn/graphics-props.cc \
+  parse-tree/oct-gperf.h \
   builtins.h \
-  c-file-ptr-stream.h \
-  comment-list.h \
-  cutils.h \
-  data.h \
-  debug.h \
-  defun-dld.h \
-  defun-int.h \
-  defun.h \
-  dirfns.h \
-  display.h \
-  dynamic-ld.h \
-  error.h \
-  file-io.h \
-  gl-render.h \
-  gl2ps.h \
-  gl2ps-renderer.h \
-  graphics-props.cc \
-  gripes.h \
-  help.h \
-  input.h \
-  lex.h \
-  load-path.h \
-  load-save.h \
-  ls-ascii-helper.h \
-  ls-hdf5.h \
-  ls-mat-ascii.h \
-  ls-mat4.h \
-  ls-mat5.h \
-  ls-oct-ascii.h \
-  ls-oct-binary.h \
-  ls-utils.h \
-  mex.h \
-  mexproto.h \
-  oct-errno.h \
-  oct-fstrm.h \
-  oct-gperf.h \
-  oct-hdf5.h \
-  oct-hist.h \
-  oct-iostrm.h \
-  oct-lvalue.h \
-  oct-map.h \
-  oct-obj.h \
-  oct-prcstrm.h \
-  oct-procbuf.h \
-  oct-stdstrm.h \
-  oct-stream.h \
-  oct-strstrm.h \
-  oct.h \
   octave.h \
-  ops.h \
-  pager.h \
-  parse.h \
-  parse-private.h \
-  pr-output.h \
-  procstream.h \
-  profiler.h \
-  sighandlers.h \
-  siglist.h \
-  sparse-xdiv.h \
-  sparse-xpow.h \
-  symtab.h \
-  sysdep.h \
-  token.h \
-  toplev.h \
-  txt-eng-ft.h \
-  txt-eng.h \
-  unwind-prot.h \
-  utils.h \
-  variables.h \
-  xdiv.h \
-  xnorm.h \
-  xpow.h \
-  zfstream.h \
   $(OV_INCLUDES) \
   $(OV_SPARSE_INCLUDES) \
-  $(PT_INCLUDES)
+  $(PT_INCLUDES) \
+	$(OPERATOR_INCLUDES) \
+  $(INTERP_CORE_INCLUDES) \
+  $(INTERPFCN_INCLUDES)
 
 nodist_octinclude_HEADERS = \
-  defaults.h \
-  graphics.h \
+  interp-core/mxarray.h \
+  interpfcn/defaults.h \
+  interpfcn/graphics.h \
   oct-conf.h \
-  mxarray.h \
   version.h
 
-OV_INTTYPE_SRC = \
-  ov-int16.cc \
-  ov-int32.cc \
-  ov-int64.cc \
-  ov-int8.cc \
-  ov-uint16.cc \
-  ov-uint32.cc \
-  ov-uint64.cc \
-  ov-uint8.cc
-
-OV_SPARSE_SRC = \
-  ov-base-sparse.cc \
-  ov-bool-sparse.cc \
-  ov-cx-sparse.cc \
-  ov-re-sparse.cc
+DIST_SRC = \
+  octave.cc \
+  $(OCTAVE_VALUE_SRC) \
+  $(PARSE_TREE_SRC) \
+  $(INTERP_CORE_SRC) \
+  $(INTERPFCN_SRC) \
+  $(COREFCN_SRC)
 
-OV_SRC = \
-  ov-base.cc \
-  ov-bool-mat.cc \
-  ov-bool.cc \
-  ov-builtin.cc \
-  ov-cell.cc \
-  ov-ch-mat.cc \
-  ov-class.cc \
-  ov-colon.cc \
-  ov-complex.cc \
-  ov-cs-list.cc \
-  ov-cx-diag.cc \
-  ov-cx-mat.cc \
-  ov-dld-fcn.cc \
-  ov-fcn-handle.cc \
-  ov-fcn-inline.cc \
-  ov-fcn.cc \
-  ov-float.cc \
-  ov-flt-complex.cc \
-  ov-flt-cx-diag.cc \
-  ov-flt-cx-mat.cc \
-  ov-flt-re-diag.cc \
-  ov-flt-re-mat.cc \
-  ov-lazy-idx.cc \
-  ov-mex-fcn.cc \
-  ov-null-mat.cc \
-  ov-oncleanup.cc \
-  ov-perm.cc \
-  ov-range.cc \
-  ov-re-diag.cc \
-  ov-re-mat.cc \
-  ov-scalar.cc \
-  ov-str-mat.cc \
-  ov-struct.cc \
-  ov-typeinfo.cc \
-  ov-usr-fcn.cc \
-  ov.cc \
-  $(OV_INTTYPE_SRC) \
-  $(OV_SPARSE_SRC)
+noinst_LTLIBRARIES =
 
-PT_SRC = \
-  pt-arg-list.cc \
-  pt-assign.cc \
-  pt-binop.cc \
-  pt-bp.cc \
-  pt-cbinop.cc \
-  pt-cell.cc \
-  pt-check.cc \
-  pt-cmd.cc \
-  pt-colon.cc \
-  pt-const.cc \
-  pt-decl.cc \
-  pt-eval.cc \
-  pt-except.cc \
-  pt-exp.cc \
-  pt-fcn-handle.cc \
-  pt-id.cc \
-  pt-idx.cc \
-  pt-jump.cc \
-  pt-loop.cc \
-  pt-mat.cc \
-  pt-misc.cc \
-  pt-pr-code.cc \
-  pt-select.cc \
-  pt-stmt.cc \
-  pt-unop.cc \
-  pt.cc
+include parse-tree/module.mk
+include octave-value/module.mk
+include operators/module.mk
+include template-inst/module.mk
+include interp-core/module.mk
+include interpfcn/module.mk
+include corefcn/module.mk
+include dldfcn/module.mk
 
-DIST_SRC = \
-  Cell.cc \
-  bitfcns.cc \
-  c-file-ptr-stream.cc \
-  comment-list.cc \
-  cutils.c \
-  data.cc \
-  debug.cc \
-  defaults.cc \
-  defun.cc \
-  dirfns.cc \
-  display.cc \
-  dynamic-ld.cc \
-  error.cc \
-  file-io.cc \
-  gl-render.cc \
-  gl2ps-renderer.cc \
-  graphics.cc \
-  gripes.cc \
-  help.cc \
-  input.cc \
-  lex.ll \
-  load-path.cc \
-  load-save.cc \
-  ls-ascii-helper.cc \
-  ls-hdf5.cc \
-  ls-mat-ascii.cc \
-  ls-mat4.cc \
-  ls-mat5.cc \
-  ls-oct-ascii.cc \
-  ls-oct-binary.cc \
-  ls-utils.cc \
-  mappers.cc \
-  matherr.c \
-  mex.cc \
-  oct-fstrm.cc \
-  oct-hist.cc \
-  oct-iostrm.cc \
-  oct-lvalue.cc \
-  oct-map.cc \
-  oct-obj.cc \
-  oct-parse.yy \
-  oct-prcstrm.cc \
-  oct-procbuf.cc \
-  oct-stream.cc \
-  oct-strstrm.cc \
-  octave.cc \
-  pager.cc \
-  pr-output.cc \
-  procstream.cc \
-  profiler.cc \
-  sighandlers.cc \
-  siglist.c \
-  sparse.cc \
-  sparse-xdiv.cc \
-  sparse-xpow.cc \
-  strfns.cc \
-  symtab.cc \
-  syscalls.cc \
-  sysdep.cc \
-  token.cc \
-  toplev.cc \
-  txt-eng-ft.cc \
-  unwind-prot.cc \
-  utils.cc \
-  variables.cc \
-  xdiv.cc \
-  xgl2ps.c \
-  xnorm.cc \
-  xpow.cc \
-  zfstream.cc \
-  $(OV_SRC) \
-  $(PT_SRC)
-
-include DLD-FUNCTIONS/module.mk
-
-$(srcdir)/DLD-FUNCTIONS/module.mk: $(srcdir)/DLD-FUNCTIONS/config-module.sh $(srcdir)/DLD-FUNCTIONS/config-module.awk $(srcdir)/DLD-FUNCTIONS/module-files
-	$(srcdir)/DLD-FUNCTIONS/config-module.sh $(top_srcdir)
-
-include OPERATORS/module.mk
-include TEMPLATE-INST/module.mk
+$(srcdir)/dldfcn/module.mk: $(srcdir)/dldfcn/config-module.sh $(srcdir)/dldfcn/config-module.awk $(srcdir)/dldfcn/module-files
+	$(srcdir)/dldfcn/config-module.sh $(top_srcdir)
 
 if AMCOND_ENABLE_DYNAMIC_LINKING
-  OCT_FILES = $(DLD_FUNCTIONS_LIBS:.la=.oct)
-  OCT_STAMP_FILES = $(subst DLD-FUNCTIONS/,DLD-FUNCTIONS/$(am__leading_dot),$(DLD_FUNCTIONS_LIBS:.la=.oct-stamp))
+  OCT_FILES = $(DLDFCN_LIBS:.la=.oct)
+  OCT_STAMP_FILES = $(subst dldfcn/,dldfcn/$(am__leading_dot),$(DLDFCN_LIBS:.la=.oct-stamp))
   DLD_LIBOCTINTERP_LIBADD = liboctinterp.la
 else
   OCT_FILES =
@@ -495,18 +174,18 @@
 endif
 
 liboctinterp_la_SOURCES = \
-  $(DIST_SRC) \
+  octave.cc \
   $(OPERATORS_SRC) \
   $(TEMPLATE_INST_SRC)
 
 nodist_liboctinterp_la_SOURCES = \
+  interp-core/mxarray.h \
+  interp-core/oct-errno.cc \
+  interpfcn/defaults.h \
+  interpfcn/graphics.h \
+  operators/ops.cc \
   builtins.cc \
-  defaults.h \
-  graphics.h \
-  mxarray.h \
   oct-conf.h \
-  oct-errno.cc \
-  ops.cc \
   version.h \
   $(OPT_INC)
 
@@ -515,6 +194,11 @@
 include link-deps.mk
 
 liboctinterp_la_LIBADD = \
+  octave-value/liboctave-value.la \
+  parse-tree/libparse-tree.la \
+  interp-core/libinterp-core.la \
+  interpfcn/libinterpfcn.la \
+  corefcn/libcorefcn.la \
   ../liboctave/liboctave.la \
   ../libcruft/libcruft.la \
   $(LIBOCTINTERP_LINK_DEPS)
@@ -532,34 +216,57 @@
   -bindir $(bindir) \
   $(LIBOCTINTERP_LINK_OPTS)
 
-display.df display.lo: CPPFLAGS += $(X11_FLAGS)
+## FIXME: Does this rule need to be uncommented?
+#fft.df fft.lo fft2.df fft2.lo fftn.df fftn.lo: CPPFLAGS += $(FFTW_XCPPFLAGS)
 
-octave_SOURCES = main.c
-
-octave_LDADD = \
+OCTAVE_CORE_LIBS = \
   liboctinterp.la \
   ../liboctave/liboctave.la \
-  ../libcruft/libcruft.la \
+  ../libcruft/libcruft.la
+
+octave_cli_SOURCES = main-cli.cc
+
+octave_cli_LDADD = \
+  $(OCTAVE_CORE_LIBS)
   $(OCTAVE_LINK_DEPS)
 
-octave_LDFLAGS = \
+octave_cli_LDFLAGS = \
   $(NO_UNDEFINED_LDFLAG) \
   $(OCTAVE_LINK_OPTS)
 
+if AMCOND_BUILD_GUI
+  octave_SOURCES = main.cc
+  OCTAVE_GUI_LIBS = ../gui/src/liboctgui.la
+  OCTAVE_GUI_CPPFLAGS = -I$(top_srcdir)/gui/src
+else
+  octave_SOURCES = main-cli.cc
+  OCTAVE_GUI_LIBS =
+  OCTAVE_GUI_CPPFLAGS =
+endif
+
+octave_CPPFLAGS = $(OCTAVE_GUI_CPPFLAGS)
+
+octave_LDADD = \
+  $(OCTAVE_CORE_LIBS) \
+  $(OCTAVE_GUI_LIBS) \
+  $(OCTAVE_LINK_DEPS)
+
+octave_LDFLAGS = $(octave_cli_LDFLAGS)
+
 ## Section for defining and creating DEF_FILES
 SRC_DEF_FILES := $(shell $(srcdir)/find-defun-files.sh "$(srcdir)" $(DIST_SRC))
 
-DLD_FUNCTIONS_DEF_FILES = $(DLD_FUNCTIONS_SRC:.cc=.df)
+DLDFCN_DEF_FILES = $(DLDFCN_SRC:.cc=.df)
 
 ## builtins.cc depends on $(DEF_FILES), so DEF_FILES should only include
 ## .df files that correspond to sources included in liboctave.
 if AMCOND_ENABLE_DYNAMIC_LINKING
   DEF_FILES = $(SRC_DEF_FILES)
 else
-  DEF_FILES = $(SRC_DEF_FILES) $(DLD_FUNCTIONS_DEF_FILES)
+  DEF_FILES = $(SRC_DEF_FILES) $(DLDFCN_DEF_FILES)
 endif
 
-ALL_DEF_FILES = $(SRC_DEF_FILES) $(DLD_FUNCTIONS_DEF_FILES)
+ALL_DEF_FILES = $(SRC_DEF_FILES) $(DLDFCN_DEF_FILES)
 
 $(SRC_DEF_FILES): mkdefs Makefile
 
@@ -578,36 +285,15 @@
 ## Special rules:
 ## Mostly for sources which must be built before rest of compilation.
 
-## defaults.h and oct-conf.h must depend on Makefile.  Calling configure
+## oct-conf.h must depend on Makefile.  Calling configure
 ## may change default/config values.  However, calling configure will also
 ## regenerate the Makefiles from Makefile.am and trigger the rules below.
-defaults.h: defaults.in.h Makefile
-	@$(do_subst_default_vals)
-
-graphics.h: graphics.in.h genprops.awk Makefile
-	$(AWK) -f $(srcdir)/genprops.awk $< > $@-t
-	mv $@-t $@
-
 oct-conf.h: oct-conf.in.h Makefile
 	@$(do_subst_config_vals)
 
-## Don't use a pipeline to process gperf output since if gperf
-## is missing but sed is not, the exit status of the pipeline
-## will still be success and we will end up creating an empty
-## oct-gperf.h file.
-oct-gperf.h: octave.gperf
-	$(GPERF) -t -C -D -G -L C++ -Z octave_kw_hash $< > $@-t1
-	$(SED) 's,lookup\[,gperf_lookup[,' < $@-t1 > $@-t
-	mv $@-t $@
-	rm -f $@-t1
-
-mxarray.h: mxarray.in.h Makefile
-	$(SED) < $< \
-	  -e "s|%OCTAVE_IDX_TYPE%|${OCTAVE_IDX_TYPE}|" > $@-t
-	mv $@-t $@
-
 version.h: version.in.h Makefile
 	$(SED) < $< \
+	  -e "s|%NO_EDIT_WARNING%|DO NOT EDIT!  Generated automatically from $(<F) by Make.|" \
 	  -e "s|%OCTAVE_API_VERSION_NUMBER%|${OCTAVE_API_VERSION_NUMBER}|" \
 	  -e "s|%OCTAVE_API_VERSION%|\"${OCTAVE_API_VERSION}\"|" \
 	  -e "s|%OCTAVE_COPYRIGHT%|\"${OCTAVE_COPYRIGHT}\"|" \
@@ -619,48 +305,14 @@
 	$(srcdir)/mkbuiltins $(DEF_FILES) > $@-t
 	mv $@-t $@
 
-graphics-props.cc: graphics.in.h genprops.awk Makefile
-	$(AWK) -v emit_graphics_props=1 -f $(srcdir)/genprops.awk $< > $@-t
-	mv $@-t $@
-
-ops.cc: $(OPERATORS_SRC) mkops
-	$(srcdir)/mkops $(OPERATORS_SRC) > $@-t
-	mv $@-t $@
+if AMCOND_ENABLE_DYNAMIC_LINKING
+DLDFCN_PKG_ADD_FILE = dldfcn/PKG_ADD
 
-oct-errno.cc: oct-errno.in.cc Makefile
-	if test -n "$(PERL)"; then \
-	  $(srcdir)/mk-errno-list --perl "$(PERL)" < $< > $@-t; \
-	elif test -n "$(PYTHON)"; then \
-	  $(srcdir)/mk-errno-list --python "$(PYTHON)" < $< > $@-t; \
-	else \
-	  $(SED) '/@SYSDEP_ERRNO_LIST@/D' $< > $@-t; \
-	fi
-	mv $@-t $@
-
-$(OPT_HANDLERS) : %.cc : $(top_srcdir)/liboctave/%.in $(top_srcdir)/build-aux/mk-opts.pl
-	$(PERL) $(top_srcdir)/build-aux/mk-opts.pl --opt-handler-fcns $< > $@-t
-	mv $@-t $@
-
-$(OPT_INC) : %.h : %.in
-	$(MAKE) -C $(@D) $(@F)
-
-if AMCOND_ENABLE_DYNAMIC_LINKING
-DLD_FUNCTIONS_PKG_ADD_FILE = DLD-FUNCTIONS/PKG_ADD
-
-DLD-FUNCTIONS/PKG_ADD: $(DLD_FUNCTIONS_DEF_FILES) mk-pkg-add
-	$(srcdir)/mk-pkg-add $(DLD_FUNCTIONS_DEF_FILES) > $@-t
+dldfcn/PKG_ADD: $(DLDFCN_DEF_FILES) mk-pkg-add
+	$(srcdir)/mk-pkg-add $(DLDFCN_DEF_FILES) > $@-t
 	mv $@-t $@
 endif
 
-lex.lo lex.o oct-parse.lo oct-parse.o: \
-  AM_CXXFLAGS := $(filter-out -Wold-style-cast, $(AM_CXXFLAGS))
-
-__fltk_uigetfile__.lo __fltk_uigetfile__.o: \
-  AM_CXXFLAGS := $(filter-out $(DLL_CXXDEFS), $(AM_CXXFLAGS) $(GRAPHICS_CFLAGS))
-
-__init_fltk__.lo __init_fltk__.o: \
-  AM_CXXFLAGS := $(filter-out $(DLL_CXXDEFS), $(AM_CXXFLAGS) $(GRAPHICS_CFLAGS))
-
 if AMCOND_BUILD_DOCS
 .DOCSTRINGS: $(ALL_DEF_FILES) gendoc.pl
 	if [ "x$(srcdir)" != "x." ] && [ -f $(srcdir)/DOCSTRINGS ] && [ ! -f DOCSTRINGS ]; then \
@@ -672,9 +324,9 @@
 	$(top_srcdir)/build-aux/move-if-change $@ DOCSTRINGS
 	touch $@
 
-all-local: $(OCT_STAMP_FILES) $(DLD_FUNCTIONS_PKG_ADD_FILE) .DOCSTRINGS
+all-local: $(OCT_STAMP_FILES) $(DLDFCN_PKG_ADD_FILE) .DOCSTRINGS
 else
-all-local: $(OCT_STAMP_FILES) $(DLD_FUNCTIONS_PKG_ADD_FILE)
+all-local: $(OCT_STAMP_FILES) $(DLDFCN_PKG_ADD_FILE)
 endif
 
 if AMCOND_BUILD_COMPILED_AUX_PROGRAMS
@@ -728,11 +380,11 @@
 if AMCOND_ENABLE_DYNAMIC_LINKING
 install-oct:
 	$(top_srcdir)/build-aux/mkinstalldirs $(DESTDIR)$(octfiledir)
-	if [ -n "`cat $(DLD_FUNCTIONS_PKG_ADD_FILE)`" ]; then \
-	  $(INSTALL_DATA) $(DLD_FUNCTIONS_PKG_ADD_FILE) $(DESTDIR)$(octfiledir)/PKG_ADD; \
+	if [ -n "`cat $(DLDFCN_PKG_ADD_FILE)`" ]; then \
+	  $(INSTALL_DATA) $(DLDFCN_PKG_ADD_FILE) $(DESTDIR)$(octfiledir)/PKG_ADD; \
 	fi
 	cd $(DESTDIR)$(octlibdir) && \
-	for ltlib in $(DLD_FUNCTIONS_LIBS); do \
+	for ltlib in $(DLDFCN_LIBS); do \
 	  f=`echo $$ltlib | $(SED) 's,.*/,,'`; \
 	  dl=`$(SED) -n -e "s/dlname='\([^']*\)'/\1/p" < $$f`; \
 	  if [ -n "$$dl" ]; then \
@@ -757,9 +409,9 @@
 
 CLEANFILES = \
   $(bin_SCRIPTS) \
-  $(DLD_FUNCTIONS_PKG_ADD_FILE) \
-  graphics-props.cc \
-  oct-parse.output
+  $(DLDFCN_PKG_ADD_FILE) \
+  interpfcn/graphics-props.cc \
+  parse-tree/oct-parse.output
 
 DISTCLEANFILES = \
   .DOCSTRINGS \
rename from src/DLD-FUNCTIONS/__contourc__.cc
rename to src/corefcn/__contourc__.cc
--- a/src/DLD-FUNCTIONS/__contourc__.cc
+++ b/src/corefcn/__contourc__.cc
@@ -40,7 +40,7 @@
 
 #include "quit.h"
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "oct-obj.h"
 
@@ -299,9 +299,9 @@
         drawcn (X, Y, Z, lvl, r, c, 0.0, 0.0, 255, true, mark);
 }
 
-DEFUN_DLD (__contourc__, args, ,
+DEFUN (__contourc__, args, ,
   "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {} __contourc__ (@var{x}, @var{y}, @var{z}, @var{levels})\n\
+@deftypefn {Built-in Function} {} __contourc__ (@var{x}, @var{y}, @var{z}, @var{levels})\n\
 Undocumented internal function.\n\
 @end deftypefn")
 {
rename from src/DLD-FUNCTIONS/__dispatch__.cc
rename to src/corefcn/__dispatch__.cc
--- a/src/DLD-FUNCTIONS/__dispatch__.cc
+++ b/src/corefcn/__dispatch__.cc
@@ -30,7 +30,7 @@
 
 #include "Cell.h"
 #include "oct-map.h"
-#include "defun-dld.h"
+#include "defun.h"
 #include "ov.h"
 #include "ov-fcn.h"
 #include "ov-typeinfo.h"
@@ -39,7 +39,7 @@
 #include "symtab.h"
 #include "variables.h"
 
-DEFUN_DLD (__dispatch__, args, nargout,
+DEFUN (__dispatch__, args, nargout,
   "Undocumented internal function")
 {
   octave_value retval;
rename from src/DLD-FUNCTIONS/__lin_interpn__.cc
rename to src/corefcn/__lin_interpn__.cc
--- a/src/DLD-FUNCTIONS/__lin_interpn__.cc
+++ b/src/corefcn/__lin_interpn__.cc
@@ -28,7 +28,7 @@
 #include "dNDArray.h"
 #include "oct-locbuf.h"
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "oct-obj.h"
 
@@ -267,9 +267,9 @@
 //
 //This function only performs linear interpolation.
 
-DEFUN_DLD (__lin_interpn__, args, ,
+DEFUN (__lin_interpn__, args, ,
   "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {@var{vi} =} __lin_interpn__ (@var{x1}, @var{x2}, @dots{}, @var{xn}, @var{v}, @var{y1}, @var{y2}, @dots{}, @var{yn})\n\
+@deftypefn {Built-in Function} {@var{vi} =} __lin_interpn__ (@var{x1}, @var{x2}, @dots{}, @var{xn}, @var{v}, @var{y1}, @var{y2}, @dots{}, @var{yn})\n\
 Undocumented internal function.\n\
 @end deftypefn")
 {
rename from src/DLD-FUNCTIONS/__pchip_deriv__.cc
rename to src/corefcn/__pchip_deriv__.cc
--- a/src/DLD-FUNCTIONS/__pchip_deriv__.cc
+++ b/src/corefcn/__pchip_deriv__.cc
@@ -25,7 +25,7 @@
 #include <config.h>
 #endif
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "gripes.h"
 #include "oct-obj.h"
@@ -50,9 +50,9 @@
 // Wrapper for SLATEC/PCHIP function DPCHIM to calculate the derivates
 // for piecewise polynomials.
 
-DEFUN_DLD (__pchip_deriv__, args, ,
+DEFUN (__pchip_deriv__, args, ,
   "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {} __pchip_deriv__ (@var{x}, @var{y}, @var{dim})\n\
+@deftypefn {Built-in Function} {} __pchip_deriv__ (@var{x}, @var{y}, @var{dim})\n\
 Undocumented internal function.\n\
 @end deftypefn")
 {
rename from src/DLD-FUNCTIONS/__qp__.cc
rename to src/corefcn/__qp__.cc
--- a/src/DLD-FUNCTIONS/__qp__.cc
+++ b/src/corefcn/__qp__.cc
@@ -31,7 +31,7 @@
 #include "mx-m-dm.h"
 #include "EIG.h"
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "gripes.h"
 #include "oct-obj.h"
@@ -479,9 +479,9 @@
   return info;
 }
 
-DEFUN_DLD (__qp__, args, ,
+DEFUN (__qp__, args, ,
   "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {[@var{x}, @var{lambda}, @var{info}, @var{iter}] =} __qp__ (@var{x0}, @var{H}, @var{q}, @var{Aeq}, @var{beq}, @var{Ain}, @var{bin}, @var{maxit})\n\
+@deftypefn {Built-in Function} {[@var{x}, @var{lambda}, @var{info}, @var{iter}] =} __qp__ (@var{x0}, @var{H}, @var{q}, @var{Aeq}, @var{beq}, @var{Ain}, @var{bin}, @var{maxit})\n\
 Undocumented internal function.\n\
 @end deftypefn")
 {
rename from src/DLD-FUNCTIONS/balance.cc
rename to src/corefcn/balance.cc
--- a/src/DLD-FUNCTIONS/balance.cc
+++ b/src/corefcn/balance.cc
@@ -39,20 +39,20 @@
 #include "floatGEPBAL.h"
 #include "quit.h"
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "f77-fcn.h"
 #include "gripes.h"
 #include "oct-obj.h"
 #include "utils.h"
 
-DEFUN_DLD (balance, args, nargout,
+DEFUN (balance, args, nargout,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {@var{AA} =} balance (@var{A})\n\
-@deftypefnx {Loadable Function} {@var{AA} =} balance (@var{A}, @var{opt})\n\
-@deftypefnx {Loadable Function} {[@var{DD}, @var{AA}] =} balance (@var{A}, @var{opt})\n\
-@deftypefnx {Loadable Function} {[@var{D}, @var{P}, @var{AA}] =} balance (@var{A}, @var{opt})\n\
-@deftypefnx {Loadable Function} {[@var{CC}, @var{DD}, @var{AA}, @var{BB}] =} balance (@var{A}, @var{B}, @var{opt})\n\
+@deftypefn  {Built-in Function} {@var{AA} =} balance (@var{A})\n\
+@deftypefnx {Built-in Function} {@var{AA} =} balance (@var{A}, @var{opt})\n\
+@deftypefnx {Built-in Function} {[@var{DD}, @var{AA}] =} balance (@var{A}, @var{opt})\n\
+@deftypefnx {Built-in Function} {[@var{D}, @var{P}, @var{AA}] =} balance (@var{A}, @var{opt})\n\
+@deftypefnx {Built-in Function} {[@var{CC}, @var{DD}, @var{AA}, @var{BB}] =} balance (@var{A}, @var{B}, @var{opt})\n\
 \n\
 Compute @code{@var{AA} = @var{DD} \\ @var{A} * @var{DD}} in which @var{AA}\n\
 is a matrix whose row and column norms are roughly equal in magnitude, and\n\
rename from src/DLD-FUNCTIONS/besselj.cc
rename to src/corefcn/besselj.cc
--- a/src/DLD-FUNCTIONS/besselj.cc
+++ b/src/corefcn/besselj.cc
@@ -27,7 +27,7 @@
 #include "lo-specfun.h"
 #include "quit.h"
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "gripes.h"
 #include "oct-obj.h"
@@ -376,13 +376,13 @@
   return retval;
 }
 
-DEFUN_DLD (besselj, args, nargout,
+DEFUN (besselj, args, nargout,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {[@var{j}, @var{ierr}] =} besselj (@var{alpha}, @var{x}, @var{opt})\n\
-@deftypefnx {Loadable Function} {[@var{y}, @var{ierr}] =} bessely (@var{alpha}, @var{x}, @var{opt})\n\
-@deftypefnx {Loadable Function} {[@var{i}, @var{ierr}] =} besseli (@var{alpha}, @var{x}, @var{opt})\n\
-@deftypefnx {Loadable Function} {[@var{k}, @var{ierr}] =} besselk (@var{alpha}, @var{x}, @var{opt})\n\
-@deftypefnx {Loadable Function} {[@var{h}, @var{ierr}] =} besselh (@var{alpha}, @var{k}, @var{x}, @var{opt})\n\
+@deftypefn  {Built-in Function} {[@var{j}, @var{ierr}] =} besselj (@var{alpha}, @var{x}, @var{opt})\n\
+@deftypefnx {Built-in Function} {[@var{y}, @var{ierr}] =} bessely (@var{alpha}, @var{x}, @var{opt})\n\
+@deftypefnx {Built-in Function} {[@var{i}, @var{ierr}] =} besseli (@var{alpha}, @var{x}, @var{opt})\n\
+@deftypefnx {Built-in Function} {[@var{k}, @var{ierr}] =} besselk (@var{alpha}, @var{x}, @var{opt})\n\
+@deftypefnx {Built-in Function} {[@var{h}, @var{ierr}] =} besselh (@var{alpha}, @var{k}, @var{x}, @var{opt})\n\
 Compute Bessel or Hankel functions of various kinds:\n\
 \n\
 @table @code\n\
@@ -450,36 +450,36 @@
   return do_bessel (BESSEL_J, "besselj", args, nargout);
 }
 
-DEFUN_DLD (bessely, args, nargout,
+DEFUN (bessely, args, nargout,
   "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {[@var{y}, @var{ierr}] =} bessely (@var{alpha}, @var{x}, @var{opt})\n\
+@deftypefn {Built-in Function} {[@var{y}, @var{ierr}] =} bessely (@var{alpha}, @var{x}, @var{opt})\n\
 See besselj.\n\
 @end deftypefn")
 {
   return do_bessel (BESSEL_Y, "bessely", args, nargout);
 }
 
-DEFUN_DLD (besseli, args, nargout,
+DEFUN (besseli, args, nargout,
   "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {[@var{i}, @var{ierr}] =} besseli (@var{alpha}, @var{x}, @var{opt})\n\
+@deftypefn {Built-in Function} {[@var{i}, @var{ierr}] =} besseli (@var{alpha}, @var{x}, @var{opt})\n\
 See besselj.\n\
 @end deftypefn")
 {
   return do_bessel (BESSEL_I, "besseli", args, nargout);
 }
 
-DEFUN_DLD (besselk, args, nargout,
+DEFUN (besselk, args, nargout,
   "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {[@var{k}, @var{ierr}] =} besselk (@var{alpha}, @var{x}, @var{opt})\n\
+@deftypefn {Built-in Function} {[@var{k}, @var{ierr}] =} besselk (@var{alpha}, @var{x}, @var{opt})\n\
 See besselj.\n\
 @end deftypefn")
 {
   return do_bessel (BESSEL_K, "besselk", args, nargout);
 }
 
-DEFUN_DLD (besselh, args, nargout,
+DEFUN (besselh, args, nargout,
   "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {[@var{h}, @var{ierr}] =} besselh (@var{alpha}, @var{k}, @var{x}, @var{opt})\n\
+@deftypefn {Built-in Function} {[@var{h}, @var{ierr}] =} besselh (@var{alpha}, @var{k}, @var{x}, @var{opt})\n\
 See besselj.\n\
 @end deftypefn")
 {
@@ -521,9 +521,9 @@
   return retval;
 }
 
-DEFUN_DLD (airy, args, nargout,
+DEFUN (airy, args, nargout,
   "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {[@var{a}, @var{ierr}] =} airy (@var{k}, @var{z}, @var{opt})\n\
+@deftypefn {Built-in Function} {[@var{a}, @var{ierr}] =} airy (@var{k}, @var{z}, @var{opt})\n\
 Compute Airy functions of the first and second kind, and their\n\
 derivatives.\n\
 \n\
rename from src/DLD-FUNCTIONS/betainc.cc
rename to src/corefcn/betainc.cc
--- a/src/DLD-FUNCTIONS/betainc.cc
+++ b/src/corefcn/betainc.cc
@@ -26,7 +26,7 @@
 
 #include "lo-specfun.h"
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "gripes.h"
 #include "oct-obj.h"
@@ -35,7 +35,7 @@
 // FIXME: These functions do not need to be dynamically loaded.  They should
 //        be placed elsewhere in the Octave code hierarchy.
 
-DEFUN_DLD (betainc, args, ,
+DEFUN (betainc, args, ,
   "-*- texinfo -*-\n\
 @deftypefn {Mapping Function} {} betainc (@var{x}, @var{a}, @var{b})\n\
 Return the regularized incomplete Beta function,\n\
@@ -329,7 +329,7 @@
 %!error betainc (1,2,3,4)
 */
 
-DEFUN_DLD (betaincinv, args, ,
+DEFUN (betaincinv, args, ,
     "-*- texinfo -*-\n\
 @deftypefn {Mapping Function} {} betaincinv (@var{y}, @var{a}, @var{b})\n\
 Compute the inverse of the incomplete Beta function, i.e., @var{x} such that\n\
rename from src/bitfcns.cc
rename to src/corefcn/bitfcns.cc
rename from src/DLD-FUNCTIONS/bsxfun.cc
rename to src/corefcn/bsxfun.cc
--- a/src/DLD-FUNCTIONS/bsxfun.cc
+++ b/src/corefcn/bsxfun.cc
@@ -32,7 +32,7 @@
 #include "lo-mappers.h"
 
 #include "oct-map.h"
-#include "defun-dld.h"
+#include "defun.h"
 #include "parse.h"
 #include "variables.h"
 #include "ov-colon.h"
@@ -309,9 +309,9 @@
     }
 }
 
-DEFUN_DLD (bsxfun, args, ,
+DEFUN (bsxfun, args, ,
   "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {} bsxfun (@var{f}, @var{A}, @var{B})\n\
+@deftypefn {Built-in Function} {} bsxfun (@var{f}, @var{A}, @var{B})\n\
 The binary singleton expansion function applier performs broadcasting,\n\
 that is, applies a binary function @var{f} element-by-element to two\n\
 array arguments @var{A} and @var{B}, and expands as necessary\n\
rename from src/DLD-FUNCTIONS/cellfun.cc
rename to src/corefcn/cellfun.cc
--- a/src/DLD-FUNCTIONS/cellfun.cc
+++ b/src/corefcn/cellfun.cc
@@ -38,7 +38,7 @@
 
 #include "Cell.h"
 #include "oct-map.h"
-#include "defun-dld.h"
+#include "defun.h"
 #include "parse.h"
 #include "variables.h"
 #include "ov-colon.h"
@@ -249,16 +249,16 @@
   nargin -= 1;
 }
 
-DEFUN_DLD (cellfun, args, nargout,
+DEFUN (cellfun, args, nargout,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {} cellfun (@var{name}, @var{C})\n\
-@deftypefnx {Loadable Function} {} cellfun (\"size\", @var{C}, @var{k})\n\
-@deftypefnx {Loadable Function} {} cellfun (\"isclass\", @var{C}, @var{class})\n\
-@deftypefnx {Loadable Function} {} cellfun (@var{func}, @var{C})\n\
-@deftypefnx {Loadable Function} {} cellfun (@var{func}, @var{C}, @var{D})\n\
-@deftypefnx {Loadable Function} {[@var{a}, @dots{}] =} cellfun (@dots{})\n\
-@deftypefnx {Loadable Function} {} cellfun (@dots{}, \"ErrorHandler\", @var{errfunc})\n\
-@deftypefnx {Loadable Function} {} cellfun (@dots{}, \"UniformOutput\", @var{val})\n\
+@deftypefn  {Built-in Function} {} cellfun (@var{name}, @var{C})\n\
+@deftypefnx {Built-in Function} {} cellfun (\"size\", @var{C}, @var{k})\n\
+@deftypefnx {Built-in Function} {} cellfun (\"isclass\", @var{C}, @var{class})\n\
+@deftypefnx {Built-in Function} {} cellfun (@var{func}, @var{C})\n\
+@deftypefnx {Built-in Function} {} cellfun (@var{func}, @var{C}, @var{D})\n\
+@deftypefnx {Built-in Function} {[@var{a}, @dots{}] =} cellfun (@dots{})\n\
+@deftypefnx {Built-in Function} {} cellfun (@dots{}, \"ErrorHandler\", @var{errfunc})\n\
+@deftypefnx {Built-in Function} {} cellfun (@dots{}, \"UniformOutput\", @var{val})\n\
 \n\
 Evaluate the function named @var{name} on the elements of the cell array\n\
 @var{C}.  Elements in @var{C} are passed on to the named function\n\
@@ -1014,7 +1014,7 @@
 // Hajek.  It was converted to C++ by jwe so that it could properly
 // handle the nargout = 0 case.
 
-DEFUN_DLD (arrayfun, args, nargout,
+DEFUN (arrayfun, args, nargout,
   "-*- texinfo -*-\n\
 @deftypefn  {Function File} {} arrayfun (@var{func}, @var{A})\n\
 @deftypefnx {Function File} {@var{x} =} arrayfun (@var{func}, @var{A})\n\
@@ -1805,10 +1805,10 @@
   return retval;
 }
 
-DEFUN_DLD (num2cell, args, ,
+DEFUN (num2cell, args, ,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {@var{C} =} num2cell (@var{A})\n\
-@deftypefnx {Loadable Function} {@var{C} =} num2cell (@var{A}, @var{dim})\n\
+@deftypefn  {Built-in Function} {@var{C} =} num2cell (@var{A})\n\
+@deftypefnx {Built-in Function} {@var{C} =} num2cell (@var{A}, @var{dim})\n\
 Convert the numeric matrix @var{A} to a cell array.  If @var{dim} is\n\
 defined, the value @var{C} is of dimension 1 in this dimension and the\n\
 elements of @var{A} are placed into @var{C} in slices.  For example:\n\
@@ -2134,11 +2134,11 @@
   return retval;
 }
 
-DEFUN_DLD (mat2cell, args, ,
+DEFUN (mat2cell, args, ,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {@var{C} =} mat2cell (@var{A}, @var{m}, @var{n})\n\
-@deftypefnx {Loadable Function} {@var{C} =} mat2cell (@var{A}, @var{d1}, @var{d2}, @dots{})\n\
-@deftypefnx {Loadable Function} {@var{C} =} mat2cell (@var{A}, @var{r})\n\
+@deftypefn  {Built-in Function} {@var{C} =} mat2cell (@var{A}, @var{m}, @var{n})\n\
+@deftypefnx {Built-in Function} {@var{C} =} mat2cell (@var{A}, @var{d1}, @var{d2}, @dots{})\n\
+@deftypefnx {Built-in Function} {@var{C} =} mat2cell (@var{A}, @var{r})\n\
 Convert the matrix @var{A} to a cell array.  If @var{A} is 2-D, then\n\
 it is required that @code{sum (@var{m}) == size (@var{A}, 1)} and\n\
 @code{sum (@var{n}) == size (@var{A}, 2)}.  Similarly, if @var{A} is\n\
@@ -2304,9 +2304,9 @@
   return retval;
 }
 
-DEFUN_DLD (cellslices, args, ,
+DEFUN (cellslices, args, ,
   "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {@var{sl} =} cellslices (@var{x}, @var{lb}, @var{ub}, @var{dim})\n\
+@deftypefn {Built-in Function} {@var{sl} =} cellslices (@var{x}, @var{lb}, @var{ub}, @var{dim})\n\
 Given an array @var{x}, this function produces a cell array of slices from\n\
 the array determined by the index vectors @var{lb}, @var{ub}, for lower and\n\
 upper bounds, respectively.  In other words, it is equivalent to the\n\
@@ -2425,9 +2425,9 @@
 %! assert (c, {[1, 2; 5, 6; 9, 10], [2, 3; 6, 7; 10, 11]});
 */
 
-DEFUN_DLD (cellindexmat, args, ,
+DEFUN (cellindexmat, args, ,
   "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {@var{y} =} cellindexmat (@var{x}, @var{varargin})\n\
+@deftypefn {Built-in Function} {@var{y} =} cellindexmat (@var{x}, @var{varargin})\n\
 Given a cell array of matrices @var{x}, this function computes\n\
 \n\
 @example\n\
rename from src/DLD-FUNCTIONS/colloc.cc
rename to src/corefcn/colloc.cc
--- a/src/DLD-FUNCTIONS/colloc.cc
+++ b/src/corefcn/colloc.cc
@@ -29,14 +29,14 @@
 #include "CollocWt.h"
 #include "lo-mappers.h"
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "oct-obj.h"
 #include "utils.h"
 
-DEFUN_DLD (colloc, args, ,
+DEFUN (colloc, args, ,
   "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {[@var{r}, @var{amat}, @var{bmat}, @var{q}] =} colloc (@var{n}, \"left\", \"right\")\n\
+@deftypefn {Built-in Function} {[@var{r}, @var{amat}, @var{bmat}, @var{q}] =} colloc (@var{n}, \"left\", \"right\")\n\
 Compute derivative and integral weight matrices for orthogonal\n\
 collocation using the subroutines given in J. Villadsen and\n\
 M. L. Michelsen, @cite{Solution of Differential Equation Models by\n\
rename from src/DLD-FUNCTIONS/conv2.cc
rename to src/corefcn/conv2.cc
--- a/src/DLD-FUNCTIONS/conv2.cc
+++ b/src/corefcn/conv2.cc
@@ -27,18 +27,18 @@
 
 #include "oct-convn.h"
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "oct-obj.h"
 #include "utils.h"
 
 enum Shape { SHAPE_FULL, SHAPE_SAME, SHAPE_VALID };
 
-DEFUN_DLD (conv2, args, ,
+DEFUN (conv2, args, ,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {} conv2 (@var{A}, @var{B})\n\
-@deftypefnx {Loadable Function} {} conv2 (@var{v1}, @var{v2}, @var{m})\n\
-@deftypefnx {Loadable Function} {} conv2 (@dots{}, @var{shape})\n\
+@deftypefn  {Built-in Function} {} conv2 (@var{A}, @var{B})\n\
+@deftypefnx {Built-in Function} {} conv2 (@var{v1}, @var{v2}, @var{m})\n\
+@deftypefnx {Built-in Function} {} conv2 (@dots{}, @var{shape})\n\
 Return the 2-D convolution of @var{A} and @var{B}.  The size of the result\n\
 is determined by the optional @var{shape} argument which takes the following\n\
 values\n\
@@ -283,10 +283,10 @@
 %!error conv2 (1, ones (2), 1)
 */
 
-DEFUN_DLD (convn, args, ,
+DEFUN (convn, args, ,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {@var{C} =} convn (@var{A}, @var{B})\n\
-@deftypefnx {Loadable Function} {@var{C} =} convn (@var{A}, @var{B}, @var{shape})\n\
+@deftypefn  {Built-in Function} {@var{C} =} convn (@var{A}, @var{B})\n\
+@deftypefnx {Built-in Function} {@var{C} =} convn (@var{A}, @var{B}, @var{shape})\n\
 Return the n-D convolution of @var{A} and @var{B}.  The size of the result\n\
 is determined by the optional @var{shape} argument which takes the following\n\
 values\n\
rename from src/DLD-FUNCTIONS/daspk.cc
rename to src/corefcn/daspk.cc
--- a/src/DLD-FUNCTIONS/daspk.cc
+++ b/src/corefcn/daspk.cc
@@ -31,7 +31,7 @@
 
 #include "DASPK.h"
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "gripes.h"
 #include "oct-obj.h"
@@ -170,9 +170,9 @@
     } \
   while (0)
 
-DEFUN_DLD (daspk, args, nargout,
+DEFUN (daspk, args, nargout,
   "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {[@var{x}, @var{xdot}, @var{istate}, @var{msg}] =} daspk (@var{fcn}, @var{x_0}, @var{xdot_0}, @var{t}, @var{t_crit})\n\
+@deftypefn {Built-in Function} {[@var{x}, @var{xdot}, @var{istate}, @var{msg}] =} daspk (@var{fcn}, @var{x_0}, @var{xdot_0}, @var{t}, @var{t_crit})\n\
 Solve the set of differential-algebraic equations\n\
 @tex\n\
 $$ 0 = f (x, \\dot{x}, t) $$\n\
rename from src/DLD-FUNCTIONS/dasrt.cc
rename to src/corefcn/dasrt.cc
--- a/src/DLD-FUNCTIONS/dasrt.cc
+++ b/src/corefcn/dasrt.cc
@@ -30,7 +30,7 @@
 #include "DASRT.h"
 #include "lo-mappers.h"
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "gripes.h"
 #include "oct-obj.h"
@@ -206,12 +206,12 @@
     } \
   while (0)
 
-DEFUN_DLD (dasrt, args, nargout,
+DEFUN (dasrt, args, nargout,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {[@var{x}, @var{xdot}, @var{t_out}, @var{istat}, @var{msg}] =} dasrt (@var{fcn}, [], @var{x_0}, @var{xdot_0}, @var{t})\n\
-@deftypefnx {Loadable Function} {@dots{} =} dasrt (@var{fcn}, @var{g}, @var{x_0}, @var{xdot_0}, @var{t})\n\
-@deftypefnx {Loadable Function} {@dots{} =} dasrt (@var{fcn}, [], @var{x_0}, @var{xdot_0}, @var{t}, @var{t_crit})\n\
-@deftypefnx {Loadable Function} {@dots{} =} dasrt (@var{fcn}, @var{g}, @var{x_0}, @var{xdot_0}, @var{t}, @var{t_crit})\n\
+@deftypefn  {Built-in Function} {[@var{x}, @var{xdot}, @var{t_out}, @var{istat}, @var{msg}] =} dasrt (@var{fcn}, [], @var{x_0}, @var{xdot_0}, @var{t})\n\
+@deftypefnx {Built-in Function} {@dots{} =} dasrt (@var{fcn}, @var{g}, @var{x_0}, @var{xdot_0}, @var{t})\n\
+@deftypefnx {Built-in Function} {@dots{} =} dasrt (@var{fcn}, [], @var{x_0}, @var{xdot_0}, @var{t}, @var{t_crit})\n\
+@deftypefnx {Built-in Function} {@dots{} =} dasrt (@var{fcn}, @var{g}, @var{x_0}, @var{xdot_0}, @var{t}, @var{t_crit})\n\
 Solve the set of differential-algebraic equations\n\
 @tex\n\
 $$ 0 = f (x, \\dot{x}, t) $$\n\
rename from src/DLD-FUNCTIONS/dassl.cc
rename to src/corefcn/dassl.cc
--- a/src/DLD-FUNCTIONS/dassl.cc
+++ b/src/corefcn/dassl.cc
@@ -31,7 +31,7 @@
 
 #include "DASSL.h"
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "gripes.h"
 #include "oct-obj.h"
@@ -170,9 +170,9 @@
     } \
   while (0)
 
-DEFUN_DLD (dassl, args, nargout,
+DEFUN (dassl, args, nargout,
   "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {[@var{x}, @var{xdot}, @var{istate}, @var{msg}] =} dassl (@var{fcn}, @var{x_0}, @var{xdot_0}, @var{t}, @var{t_crit})\n\
+@deftypefn {Built-in Function} {[@var{x}, @var{xdot}, @var{istate}, @var{msg}] =} dassl (@var{fcn}, @var{x_0}, @var{xdot_0}, @var{t}, @var{t_crit})\n\
 Solve the set of differential-algebraic equations\n\
 @tex\n\
 $$ 0 = f (x, \\dot{x}, t) $$\n\
rename from src/DLD-FUNCTIONS/det.cc
rename to src/corefcn/det.cc
--- a/src/DLD-FUNCTIONS/det.cc
+++ b/src/corefcn/det.cc
@@ -26,7 +26,7 @@
 
 #include "DET.h"
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "gripes.h"
 #include "oct-obj.h"
@@ -47,10 +47,10 @@
   const CLASS *VAR = arg.type_id () == CLASS::static_type_id () ? \
    dynamic_cast<const CLASS *> (&arg.get_rep ()) : 0
 
-DEFUN_DLD (det, args, nargout,
+DEFUN (det, args, nargout,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {} det (@var{A})\n\
-@deftypefnx {Loadable Function} {[@var{d}, @var{rcond}] =} det (@var{A})\n\
+@deftypefn  {Built-in Function} {} det (@var{A})\n\
+@deftypefnx {Built-in Function} {[@var{d}, @var{rcond}] =} det (@var{A})\n\
 Compute the determinant of @var{A}.\n\
 \n\
 Return an estimate of the reciprocal condition number if requested.\n\
rename from src/DLD-FUNCTIONS/dlmread.cc
rename to src/corefcn/dlmread.cc
--- a/src/DLD-FUNCTIONS/dlmread.cc
+++ b/src/corefcn/dlmread.cc
@@ -35,7 +35,7 @@
 #include "file-ops.h"
 #include "lo-ieee.h"
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "oct-stream.h"
 #include "error.h"
 #include "oct-obj.h"
@@ -155,13 +155,13 @@
   return stat;
 }
 
-DEFUN_DLD (dlmread, args, ,
+DEFUN (dlmread, args, ,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {@var{data} =} dlmread (@var{file})\n\
-@deftypefnx {Loadable Function} {@var{data} =} dlmread (@var{file}, @var{sep})\n\
-@deftypefnx {Loadable Function} {@var{data} =} dlmread (@var{file}, @var{sep}, @var{r0}, @var{c0})\n\
-@deftypefnx {Loadable Function} {@var{data} =} dlmread (@var{file}, @var{sep}, @var{range})\n\
-@deftypefnx {Loadable Function} {@var{data} =} dlmread (@dots{}, \"emptyvalue\", @var{EMPTYVAL})\n\
+@deftypefn  {Built-in Function} {@var{data} =} dlmread (@var{file})\n\
+@deftypefnx {Built-in Function} {@var{data} =} dlmread (@var{file}, @var{sep})\n\
+@deftypefnx {Built-in Function} {@var{data} =} dlmread (@var{file}, @var{sep}, @var{r0}, @var{c0})\n\
+@deftypefnx {Built-in Function} {@var{data} =} dlmread (@var{file}, @var{sep}, @var{range})\n\
+@deftypefnx {Built-in Function} {@var{data} =} dlmread (@dots{}, \"emptyvalue\", @var{EMPTYVAL})\n\
 Read the matrix @var{data} from a text file.  If not defined the separator\n\
 between fields is determined from the file itself.  Otherwise the\n\
 separation character is defined by @var{sep}.\n\
rename from src/DLD-FUNCTIONS/dot.cc
rename to src/corefcn/dot.cc
--- a/src/DLD-FUNCTIONS/dot.cc
+++ b/src/corefcn/dot.cc
@@ -27,7 +27,7 @@
 #include "f77-fcn.h"
 #include "mx-base.h"
 #include "error.h"
-#include "defun-dld.h"
+#include "defun.h"
 #include "parse.h"
 
 extern "C"
@@ -103,9 +103,9 @@
     }
 }
 
-DEFUN_DLD (dot, args, ,
+DEFUN (dot, args, ,
   "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {} dot (@var{x}, @var{y}, @var{dim})\n\
+@deftypefn {Built-in Function} {} dot (@var{x}, @var{y}, @var{dim})\n\
 Compute the dot product of two vectors.  If @var{x} and @var{y}\n\
 are matrices, calculate the dot products along the first\n\
 non-singleton dimension.  If the optional argument @var{dim} is\n\
@@ -249,9 +249,9 @@
 %! assert (dot (x, x), [4, 20]);
 */
 
-DEFUN_DLD (blkmm, args, ,
+DEFUN (blkmm, args, ,
   "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {} blkmm (@var{A}, @var{B})\n\
+@deftypefn {Built-in Function} {} blkmm (@var{A}, @var{B})\n\
 Compute products of matrix blocks.  The blocks are given as\n\
 2-dimensional subarrays of the arrays @var{A}, @var{B}.\n\
 The size of @var{A} must have the form @code{[m,k,@dots{}]} and\n\
rename from src/DLD-FUNCTIONS/eig.cc
rename to src/corefcn/eig.cc
--- a/src/DLD-FUNCTIONS/eig.cc
+++ b/src/corefcn/eig.cc
@@ -27,24 +27,24 @@
 #include "EIG.h"
 #include "fEIG.h"
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "gripes.h"
 #include "oct-obj.h"
 #include "utils.h"
 
-DEFUN_DLD (eig, args, nargout,
+DEFUN (eig, args, nargout,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {@var{lambda} =} eig (@var{A})\n\
-@deftypefnx {Loadable Function} {@var{lambda} =} eig (@var{A}, @var{B})\n\
-@deftypefnx {Loadable Function} {[@var{V}, @var{lambda}] =} eig (@var{A})\n\
-@deftypefnx {Loadable Function} {[@var{V}, @var{lambda}] =} eig (@var{A}, @var{B})\n\
-Compute the eigenvalues and eigenvectors of a matrix.\n\
+@deftypefn  {Built-in Function} {@var{lambda} =} eig (@var{A})\n\
+@deftypefnx {Built-in Function} {@var{lambda} =} eig (@var{A}, @var{B})\n\
+@deftypefnx {Built-in Function} {[@var{V}, @var{lambda}] =} eig (@var{A})\n\
+@deftypefnx {Built-in Function} {[@var{V}, @var{lambda}] =} eig (@var{A}, @var{B})\n\
+Compute the eigenvalues (and optionally the eigenvectors) of a matrix\n\
+or a pair of matrices\n\
 \n\
-Eigenvalues are computed in a several step process which begins with a\n\
-Hessenberg decomposition, followed by a Schur@tie{}decomposition, from which\n\
-the eigenvalues are apparent.  The eigenvectors, when desired, are computed\n\
-by further manipulations of the Schur@tie{}decomposition.\n\
+The algorithm used depends on whether there are one or two input\n\
+matrices, if they are real or complex and if they are symmetric\n\
+(Hermitian if complex) or non-symmetric.\n\
 \n\
 The eigenvalues returned by @code{eig} are not ordered.\n\
 @seealso{eigs, svd}\n\
rename from src/DLD-FUNCTIONS/fft.cc
rename to src/corefcn/fft.cc
--- a/src/DLD-FUNCTIONS/fft.cc
+++ b/src/corefcn/fft.cc
@@ -27,7 +27,7 @@
 
 #include "lo-mappers.h"
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "gripes.h"
 #include "oct-obj.h"
@@ -197,11 +197,11 @@
 */
 
 
-DEFUN_DLD (fft, args, ,
+DEFUN (fft, args, ,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {} fft (@var{x})\n\
-@deftypefnx {Loadable Function} {} fft (@var{x}, @var{n})\n\
-@deftypefnx {Loadable Function} {} fft (@var{x}, @var{n}, @var{dim})\n\
+@deftypefn  {Built-in Function} {} fft (@var{x})\n\
+@deftypefnx {Built-in Function} {} fft (@var{x}, @var{n})\n\
+@deftypefnx {Built-in Function} {} fft (@var{x}, @var{n}, @var{dim})\n\
 Compute the discrete Fourier transform of @var{A} using\n\
 a Fast Fourier Transform (FFT) algorithm.\n\
 \n\
@@ -226,11 +226,11 @@
 }
 
 
-DEFUN_DLD (ifft, args, ,
+DEFUN (ifft, args, ,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {} ifft (@var{x})\n\
-@deftypefnx {Loadable Function} {} ifft (@var{x}, @var{n})\n\
-@deftypefnx {Loadable Function} {} ifft (@var{x}, @var{n}, @var{dim})\n\
+@deftypefn  {Built-in Function} {} ifft (@var{x})\n\
+@deftypefnx {Built-in Function} {} ifft (@var{x}, @var{n})\n\
+@deftypefnx {Built-in Function} {} ifft (@var{x}, @var{n}, @var{dim})\n\
 Compute the inverse discrete Fourier transform of @var{A}\n\
 using a Fast Fourier Transform (FFT) algorithm.\n\
 \n\
rename from src/DLD-FUNCTIONS/fft2.cc
rename to src/corefcn/fft2.cc
--- a/src/DLD-FUNCTIONS/fft2.cc
+++ b/src/corefcn/fft2.cc
@@ -27,7 +27,7 @@
 
 #include "lo-mappers.h"
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "gripes.h"
 #include "oct-obj.h"
@@ -167,10 +167,10 @@
   return retval;
 }
 
-DEFUN_DLD (fft2, args, ,
+DEFUN (fft2, args, ,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {} fft2 (@var{A})\n\
-@deftypefnx {Loadable Function} {} fft2 (@var{A}, @var{m}, @var{n})\n\
+@deftypefn  {Built-in Function} {} fft2 (@var{A})\n\
+@deftypefnx {Built-in Function} {} fft2 (@var{A}, @var{m}, @var{n})\n\
 Compute the two-dimensional discrete Fourier transform of @var{A} using\n\
 a Fast Fourier Transform (FFT) algorithm.\n\
 \n\
@@ -188,10 +188,10 @@
 }
 
 
-DEFUN_DLD (ifft2, args, ,
+DEFUN (ifft2, args, ,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {} ifft2 (@var{A})\n\
-@deftypefnx {Loadable Function} {} ifft2 (@var{A}, @var{m}, @var{n})\n\
+@deftypefn  {Built-in Function} {} ifft2 (@var{A})\n\
+@deftypefnx {Built-in Function} {} ifft2 (@var{A}, @var{m}, @var{n})\n\
 Compute the inverse two-dimensional discrete Fourier transform of @var{A}\n\
 using a Fast Fourier Transform (FFT) algorithm.\n\
 \n\
rename from src/DLD-FUNCTIONS/fftn.cc
rename to src/corefcn/fftn.cc
--- a/src/DLD-FUNCTIONS/fftn.cc
+++ b/src/corefcn/fftn.cc
@@ -26,7 +26,7 @@
 
 #include "lo-mappers.h"
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "gripes.h"
 #include "oct-obj.h"
@@ -149,10 +149,10 @@
   return retval;
 }
 
-DEFUN_DLD (fftn, args, ,
+DEFUN (fftn, args, ,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {} fftn (@var{A})\n\
-@deftypefnx {Loadable Function} {} fftn (@var{A}, @var{size})\n\
+@deftypefn  {Built-in Function} {} fftn (@var{A})\n\
+@deftypefnx {Built-in Function} {} fftn (@var{A}, @var{size})\n\
 Compute the N-dimensional discrete Fourier transform of @var{A} using\n\
 a Fast Fourier Transform (FFT) algorithm.\n\
 \n\
@@ -168,10 +168,10 @@
   return do_fftn (args, "fftn", 0);
 }
 
-DEFUN_DLD (ifftn, args, ,
+DEFUN (ifftn, args, ,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {} ifftn (@var{A})\n\
-@deftypefnx {Loadable Function} {} ifftn (@var{A}, @var{size})\n\
+@deftypefn  {Built-in Function} {} ifftn (@var{A})\n\
+@deftypefnx {Built-in Function} {} ifftn (@var{A}, @var{size})\n\
 Compute the inverse N-dimensional discrete Fourier transform of @var{A}\n\
 using a Fast Fourier Transform (FFT) algorithm.\n\
 \n\
rename from src/DLD-FUNCTIONS/filter.cc
rename to src/corefcn/filter.cc
--- a/src/DLD-FUNCTIONS/filter.cc
+++ b/src/corefcn/filter.cc
@@ -34,7 +34,7 @@
 
 #include "quit.h"
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "oct-obj.h"
 
@@ -285,12 +285,12 @@
   return filter (b, a, x, si, dim);
 }
 
-DEFUN_DLD (filter, args, nargout,
+DEFUN (filter, args, nargout,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {y =} filter (@var{b}, @var{a}, @var{x})\n\
-@deftypefnx {Loadable Function} {[@var{y}, @var{sf}] =} filter (@var{b}, @var{a}, @var{x}, @var{si})\n\
-@deftypefnx {Loadable Function} {[@var{y}, @var{sf}] =} filter (@var{b}, @var{a}, @var{x}, [], @var{dim})\n\
-@deftypefnx {Loadable Function} {[@var{y}, @var{sf}] =} filter (@var{b}, @var{a}, @var{x}, @var{si}, @var{dim})\n\
+@deftypefn  {Built-in Function} {y =} filter (@var{b}, @var{a}, @var{x})\n\
+@deftypefnx {Built-in Function} {[@var{y}, @var{sf}] =} filter (@var{b}, @var{a}, @var{x}, @var{si})\n\
+@deftypefnx {Built-in Function} {[@var{y}, @var{sf}] =} filter (@var{b}, @var{a}, @var{x}, [], @var{dim})\n\
+@deftypefnx {Built-in Function} {[@var{y}, @var{sf}] =} filter (@var{b}, @var{a}, @var{x}, @var{si}, @var{dim})\n\
 Return the solution to the following linear, time-invariant difference\n\
 equation:\n\
 @tex\n\
rename from src/DLD-FUNCTIONS/find.cc
rename to src/corefcn/find.cc
--- a/src/DLD-FUNCTIONS/find.cc
+++ b/src/corefcn/find.cc
@@ -26,7 +26,7 @@
 
 #include "quit.h"
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "gripes.h"
 #include "oct-obj.h"
@@ -332,13 +332,13 @@
   return retval;
 }
 
-DEFUN_DLD (find, args, nargout,
+DEFUN (find, args, nargout,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {@var{idx} =} find (@var{x})\n\
-@deftypefnx {Loadable Function} {@var{idx} =} find (@var{x}, @var{n})\n\
-@deftypefnx {Loadable Function} {@var{idx} =} find (@var{x}, @var{n}, @var{direction})\n\
-@deftypefnx {Loadable Function} {[i, j] =} find (@dots{})\n\
-@deftypefnx {Loadable Function} {[i, j, v] =} find (@dots{})\n\
+@deftypefn  {Built-in Function} {@var{idx} =} find (@var{x})\n\
+@deftypefnx {Built-in Function} {@var{idx} =} find (@var{x}, @var{n})\n\
+@deftypefnx {Built-in Function} {@var{idx} =} find (@var{x}, @var{n}, @var{direction})\n\
+@deftypefnx {Built-in Function} {[i, j] =} find (@dots{})\n\
+@deftypefnx {Built-in Function} {[i, j, v] =} find (@dots{})\n\
 Return a vector of indices of nonzero elements of a matrix, as a row if\n\
 @var{x} is a row vector or as a column otherwise.  To obtain a single index\n\
 for each matrix element, Octave pretends that the columns of a matrix form\n\
rename from src/DLD-FUNCTIONS/gammainc.cc
rename to src/corefcn/gammainc.cc
--- a/src/DLD-FUNCTIONS/gammainc.cc
+++ b/src/corefcn/gammainc.cc
@@ -26,13 +26,13 @@
 
 #include "lo-specfun.h"
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "gripes.h"
 #include "oct-obj.h"
 #include "utils.h"
 
-DEFUN_DLD (gammainc, args, ,
+DEFUN (gammainc, args, ,
   "-*- texinfo -*-\n\
 @deftypefn  {Mapping Function} {} gammainc (@var{x}, @var{a})\n\
 @deftypefnx {Mapping Function} {} gammainc (@var{x}, @var{a}, \"lower\")\n\
rename from src/DLD-FUNCTIONS/gcd.cc
rename to src/corefcn/gcd.cc
--- a/src/DLD-FUNCTIONS/gcd.cc
+++ b/src/corefcn/gcd.cc
@@ -32,7 +32,7 @@
 #include "lo-mappers.h"
 #include "oct-binmap.h"
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "oct-obj.h"
 
@@ -432,10 +432,10 @@
   return retval;
 }
 
-DEFUN_DLD (gcd, args, nargout,
+DEFUN (gcd, args, nargout,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {@var{g} =} gcd (@var{a1}, @var{a2}, @dots{})\n\
-@deftypefnx {Loadable Function} {[@var{g}, @var{v1}, @dots{}] =} gcd (@var{a1}, @var{a2}, @dots{})\n\
+@deftypefn  {Built-in Function} {@var{g} =} gcd (@var{a1}, @var{a2}, @dots{})\n\
+@deftypefnx {Built-in Function} {[@var{g}, @var{v1}, @dots{}] =} gcd (@var{a1}, @var{a2}, @dots{})\n\
 \n\
 Compute the greatest common divisor of @var{a1}, @var{a2}, @dots{}.  If more\n\
 than one argument is given all arguments must be the same size or scalar.\n\
rename from src/DLD-FUNCTIONS/getgrent.cc
rename to src/corefcn/getgrent.cc
--- a/src/DLD-FUNCTIONS/getgrent.cc
+++ b/src/corefcn/getgrent.cc
@@ -30,7 +30,7 @@
 
 #include "oct-group.h"
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "gripes.h"
 #include "oct-map.h"
@@ -62,9 +62,9 @@
   return retval;
 }
 
-DEFUN_DLD (getgrent, args, ,
+DEFUN (getgrent, args, ,
  "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {@var{grp_struct} =} getgrent ()\n\
+@deftypefn {Built-in Function} {@var{grp_struct} =} getgrent ()\n\
 Return an entry from the group database, opening it if necessary.\n\
 Once the end of data has been reached, @code{getgrent} returns 0.\n\
 @end deftypefn")
@@ -89,9 +89,9 @@
   return retval;
 }
 
-DEFUN_DLD (getgrgid, args, ,
+DEFUN (getgrgid, args, ,
   "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {@var{grp_struct} =} getgrgid (@var{gid}).\n\
+@deftypefn {Built-in Function} {@var{grp_struct} =} getgrgid (@var{gid}).\n\
 Return the first entry from the group database with the group ID\n\
 @var{gid}.  If the group ID does not exist in the database,\n\
 @code{getgrgid} returns 0.\n\
@@ -129,9 +129,9 @@
   return retval;
 }
 
-DEFUN_DLD (getgrnam, args, ,
+DEFUN (getgrnam, args, ,
   "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {@var{grp_struct} =} getgrnam (@var{name})\n\
+@deftypefn {Built-in Function} {@var{grp_struct} =} getgrnam (@var{name})\n\
 Return the first entry from the group database with the group name\n\
 @var{name}.  If the group name does not exist in the database,\n\
 @code{getgrnam} returns 0.\n\
@@ -162,9 +162,9 @@
   return retval;
 }
 
-DEFUN_DLD (setgrent, args, ,
+DEFUN (setgrent, args, ,
   "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {} setgrent ()\n\
+@deftypefn {Built-in Function} {} setgrent ()\n\
 Return the internal pointer to the beginning of the group database.\n\
 @end deftypefn")
 {
@@ -188,9 +188,9 @@
   return retval;
 }
 
-DEFUN_DLD (endgrent, args, ,
+DEFUN (endgrent, args, ,
   "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {} endgrent ()\n\
+@deftypefn {Built-in Function} {} endgrent ()\n\
 Close the group database.\n\
 @end deftypefn")
 {
rename from src/DLD-FUNCTIONS/getpwent.cc
rename to src/corefcn/getpwent.cc
--- a/src/DLD-FUNCTIONS/getpwent.cc
+++ b/src/corefcn/getpwent.cc
@@ -30,7 +30,7 @@
 
 #include "oct-passwd.h"
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "gripes.h"
 #include "oct-map.h"
@@ -65,9 +65,9 @@
   return retval;
 }
 
-DEFUN_DLD (getpwent, args, ,
+DEFUN (getpwent, args, ,
  "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {@var{pw_struct} =} getpwent ()\n\
+@deftypefn {Built-in Function} {@var{pw_struct} =} getpwent ()\n\
 Return a structure containing an entry from the password database,\n\
 opening it if necessary.  Once the end of the data has been reached,\n\
 @code{getpwent} returns 0.\n\
@@ -93,9 +93,9 @@
   return retval;
 }
 
-DEFUN_DLD (getpwuid, args, ,
+DEFUN (getpwuid, args, ,
   "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {@var{pw_struct} =} getpwuid (@var{uid}).\n\
+@deftypefn {Built-in Function} {@var{pw_struct} =} getpwuid (@var{uid}).\n\
 Return a structure containing the first entry from the password database\n\
 with the user ID @var{uid}.  If the user ID does not exist in the\n\
 database, @code{getpwuid} returns 0.\n\
@@ -133,9 +133,9 @@
   return retval;
 }
 
-DEFUN_DLD (getpwnam, args, ,
+DEFUN (getpwnam, args, ,
   "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {@var{pw_struct} =} getpwnam (@var{name})\n\
+@deftypefn {Built-in Function} {@var{pw_struct} =} getpwnam (@var{name})\n\
 Return a structure containing the first entry from the password database\n\
 with the user name @var{name}.  If the user name does not exist in the\n\
 database, @code{getpwname} returns 0.\n\
@@ -166,9 +166,9 @@
   return retval;
 }
 
-DEFUN_DLD (setpwent, args, ,
+DEFUN (setpwent, args, ,
   "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {} setpwent ()\n\
+@deftypefn {Built-in Function} {} setpwent ()\n\
 Return the internal pointer to the beginning of the password database.\n\
 @end deftypefn")
 {
@@ -192,9 +192,9 @@
   return retval;
 }
 
-DEFUN_DLD (endpwent, args, ,
+DEFUN (endpwent, args, ,
   "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {} endpwent ()\n\
+@deftypefn {Built-in Function} {} endpwent ()\n\
 Close the password database.\n\
 @end deftypefn")
 {
rename from src/DLD-FUNCTIONS/getrusage.cc
rename to src/corefcn/getrusage.cc
--- a/src/DLD-FUNCTIONS/getrusage.cc
+++ b/src/corefcn/getrusage.cc
@@ -36,7 +36,7 @@
 #include <sys/param.h>
 #endif
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "oct-map.h"
 #include "sysdep.h"
 #include "ov.h"
@@ -59,9 +59,9 @@
 
 // System resource functions.
 
-DEFUN_DLD (getrusage, , ,
+DEFUN (getrusage, , ,
   "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {} getrusage ()\n\
+@deftypefn {Built-in Function} {} getrusage ()\n\
 Return a structure containing a number of statistics about the current\n\
 Octave process.  Not all fields are available on all systems.  If it is\n\
 not possible to get CPU time statistics, the CPU time slots are set to\n\
rename from src/DLD-FUNCTIONS/givens.cc
rename to src/corefcn/givens.cc
--- a/src/DLD-FUNCTIONS/givens.cc
+++ b/src/corefcn/givens.cc
@@ -26,14 +26,14 @@
 #include <config.h>
 #endif
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "oct-obj.h"
 
-DEFUN_DLD (givens, args, nargout,
+DEFUN (givens, args, nargout,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {@var{g} =} givens (@var{x}, @var{y})\n\
-@deftypefnx {Loadable Function} {[@var{c}, @var{s}] =} givens (@var{x}, @var{y})\n\
+@deftypefn  {Built-in Function} {@var{g} =} givens (@var{x}, @var{y})\n\
+@deftypefnx {Built-in Function} {[@var{c}, @var{s}] =} givens (@var{x}, @var{y})\n\
 @tex\n\
 Return a $2\\times 2$ orthogonal matrix\n\
 $$\n\
rename from src/DLD-FUNCTIONS/hess.cc
rename to src/corefcn/hess.cc
--- a/src/DLD-FUNCTIONS/hess.cc
+++ b/src/corefcn/hess.cc
@@ -29,16 +29,16 @@
 #include "fCmplxHESS.h"
 #include "floatHESS.h"
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "gripes.h"
 #include "oct-obj.h"
 #include "utils.h"
 
-DEFUN_DLD (hess, args, nargout,
+DEFUN (hess, args, nargout,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {@var{H} =} hess (@var{A})\n\
-@deftypefnx {Loadable Function} {[@var{P}, @var{H}] =} hess (@var{A})\n\
+@deftypefn  {Built-in Function} {@var{H} =} hess (@var{A})\n\
+@deftypefnx {Built-in Function} {[@var{P}, @var{H}] =} hess (@var{A})\n\
 @cindex Hessenberg decomposition\n\
 Compute the Hessenberg decomposition of the matrix @var{A}.\n\
 \n\
rename from src/DLD-FUNCTIONS/hex2num.cc
rename to src/corefcn/hex2num.cc
--- a/src/DLD-FUNCTIONS/hex2num.cc
+++ b/src/corefcn/hex2num.cc
@@ -26,15 +26,15 @@
 
 #include <algorithm>
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "gripes.h"
 #include "oct-obj.h"
 #include "utils.h"
 
-DEFUN_DLD (hex2num, args, ,
+DEFUN (hex2num, args, ,
   "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {@var{n} =} hex2num (@var{s})\n\
+@deftypefn {Built-in Function} {@var{n} =} hex2num (@var{s})\n\
 Typecast the 16 character hexadecimal character string to an IEEE 754\n\
 double precision number.  If fewer than 16 characters are given the\n\
 strings are right padded with '0' characters.\n\
@@ -122,9 +122,9 @@
 %!assert (hex2num (["c00";"bff";"000";"3ff";"400"]), [-2:2]')
 */
 
-DEFUN_DLD (num2hex, args, ,
+DEFUN (num2hex, args, ,
   "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {@var{s} =} num2hex (@var{n})\n\
+@deftypefn {Built-in Function} {@var{s} =} num2hex (@var{n})\n\
 Typecast a double precision number or vector to a 16 character hexadecimal\n\
 string of the IEEE 754 representation of the number.  For example:\n\
 \n\
rename from src/DLD-FUNCTIONS/inv.cc
rename to src/corefcn/inv.cc
--- a/src/DLD-FUNCTIONS/inv.cc
+++ b/src/corefcn/inv.cc
@@ -24,7 +24,7 @@
 #include <config.h>
 #endif
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "gripes.h"
 #include "oct-obj.h"
@@ -36,10 +36,10 @@
 #include "ov-perm.h"
 #include "utils.h"
 
-DEFUN_DLD (inv, args, nargout,
+DEFUN (inv, args, nargout,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {@var{x} =} inv (@var{A})\n\
-@deftypefnx {Loadable Function} {[@var{x}, @var{rcond}] =} inv (@var{A})\n\
+@deftypefn  {Built-in Function} {@var{x} =} inv (@var{A})\n\
+@deftypefnx {Built-in Function} {[@var{x}, @var{rcond}] =} inv (@var{A})\n\
 Compute the inverse of the square matrix @var{A}.  Return an estimate\n\
 of the reciprocal condition number if requested, otherwise warn of an\n\
 ill-conditioned matrix if the reciprocal condition number is small.\n\
@@ -236,10 +236,10 @@
 // alias_builtin() won't do the right thing if we are actually using
 // dynamic linking.
 
-DEFUN_DLD (inverse, args, nargout,
+DEFUN (inverse, args, nargout,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {@var{x} =} inverse (@var{A})\n\
-@deftypefnx {Loadable Function} {[@var{x}, @var{rcond}] =} inverse (@var{A})\n\
+@deftypefn  {Built-in Function} {@var{x} =} inverse (@var{A})\n\
+@deftypefnx {Built-in Function} {[@var{x}, @var{rcond}] =} inverse (@var{A})\n\
 Compute the inverse of the square matrix @var{A}.\n\
 \n\
 This is an alias for @code{inv}.\n\
rename from src/DLD-FUNCTIONS/kron.cc
rename to src/corefcn/kron.cc
--- a/src/DLD-FUNCTIONS/kron.cc
+++ b/src/corefcn/kron.cc
@@ -44,7 +44,7 @@
 #include "mx-inlines.cc"
 #include "quit.h"
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "oct-obj.h"
 
@@ -243,9 +243,9 @@
 }
 
 
-DEFUN_DLD (kron, args, , "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {} kron (@var{A}, @var{B})\n\
-@deftypefnx {Loadable Function} {} kron (@var{A1}, @var{A2}, @dots{})\n\
+DEFUN (kron, args, , "-*- texinfo -*-\n\
+@deftypefn  {Built-in Function} {} kron (@var{A}, @var{B})\n\
+@deftypefnx {Built-in Function} {} kron (@var{A1}, @var{A2}, @dots{})\n\
 Form the Kronecker product of two or more matrices, defined block by \n\
 block as\n\
 \n\
rename from src/DLD-FUNCTIONS/lookup.cc
rename to src/corefcn/lookup.cc
--- a/src/DLD-FUNCTIONS/lookup.cc
+++ b/src/corefcn/lookup.cc
@@ -34,7 +34,7 @@
 #include "CNDArray.h"
 
 #include "Cell.h"
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "gripes.h"
 #include "oct-obj.h"
@@ -186,10 +186,10 @@
   return retval;
 }
 
-DEFUN_DLD (lookup, args, ,
+DEFUN (lookup, args, ,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {@var{idx} =} lookup (@var{table}, @var{y})\n\
-@deftypefnx {Loadable Function} {@var{idx} =} lookup (@var{table}, @var{y}, @var{opt})\n\
+@deftypefn  {Built-in Function} {@var{idx} =} lookup (@var{table}, @var{y})\n\
+@deftypefnx {Built-in Function} {@var{idx} =} lookup (@var{table}, @var{y}, @var{opt})\n\
 Lookup values in a sorted table.  Usually used as a prelude to\n\
 interpolation.\n\
 \n\
rename from src/DLD-FUNCTIONS/lsode.cc
rename to src/corefcn/lsode.cc
--- a/src/DLD-FUNCTIONS/lsode.cc
+++ b/src/corefcn/lsode.cc
@@ -32,7 +32,7 @@
 #include "LSODE.h"
 #include "lo-mappers.h"
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "gripes.h"
 #include "oct-obj.h"
@@ -156,10 +156,10 @@
     } \
   while (0)
 
-DEFUN_DLD (lsode, args, nargout,
+DEFUN (lsode, args, nargout,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {[@var{x}, @var{istate}, @var{msg}] =} lsode (@var{fcn}, @var{x_0}, @var{t})\n\
-@deftypefnx {Loadable Function} {[@var{x}, @var{istate}, @var{msg}] =} lsode (@var{fcn}, @var{x_0}, @var{t}, @var{t_crit})\n\
+@deftypefn  {Built-in Function} {[@var{x}, @var{istate}, @var{msg}] =} lsode (@var{fcn}, @var{x_0}, @var{t})\n\
+@deftypefnx {Built-in Function} {[@var{x}, @var{istate}, @var{msg}] =} lsode (@var{fcn}, @var{x_0}, @var{t}, @var{t_crit})\n\
 Solve the set of differential equations\n\
 @tex\n\
 $$ {dx \\over dt} = f (x, t) $$\n\
rename from src/DLD-FUNCTIONS/lu.cc
rename to src/corefcn/lu.cc
--- a/src/DLD-FUNCTIONS/lu.cc
+++ b/src/corefcn/lu.cc
@@ -31,7 +31,7 @@
 #include "SparseCmplxLU.h"
 #include "SparsedbleLU.h"
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "gripes.h"
 #include "oct-obj.h"
@@ -61,15 +61,15 @@
     return U;
 }
 
-DEFUN_DLD (lu, args, nargout,
+DEFUN (lu, args, nargout,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {[@var{L}, @var{U}] =} lu (@var{A})\n\
-@deftypefnx {Loadable Function} {[@var{L}, @var{U}, @var{P}] =} lu (@var{A})\n\
-@deftypefnx {Loadable Function} {[@var{L}, @var{U}, @var{P}, @var{Q}] =} lu (@var{S})\n\
-@deftypefnx {Loadable Function} {[@var{L}, @var{U}, @var{P}, @var{Q}, @var{R}] =} lu (@var{S})\n\
-@deftypefnx {Loadable Function} {[@dots{}] =} lu (@var{S}, @var{thres})\n\
-@deftypefnx {Loadable Function} {@var{y} =} lu (@dots{})\n\
-@deftypefnx {Loadable Function} {[@dots{}] =} lu (@dots{}, \"vector\")\n\
+@deftypefn  {Built-in Function} {[@var{L}, @var{U}] =} lu (@var{A})\n\
+@deftypefnx {Built-in Function} {[@var{L}, @var{U}, @var{P}] =} lu (@var{A})\n\
+@deftypefnx {Built-in Function} {[@var{L}, @var{U}, @var{P}, @var{Q}] =} lu (@var{S})\n\
+@deftypefnx {Built-in Function} {[@var{L}, @var{U}, @var{P}, @var{Q}, @var{R}] =} lu (@var{S})\n\
+@deftypefnx {Built-in Function} {[@dots{}] =} lu (@var{S}, @var{thres})\n\
+@deftypefnx {Built-in Function} {@var{y} =} lu (@dots{})\n\
+@deftypefnx {Built-in Function} {[@dots{}] =} lu (@dots{}, \"vector\")\n\
 @cindex LU decomposition\n\
 Compute the LU@tie{}decomposition of @var{A}.  If @var{A} is full\n\
 subroutines from\n\
@@ -593,10 +593,10 @@
             (p.is_undefined () || p.rows () == m));
 }
 
-DEFUN_DLD (luupdate, args, ,
+DEFUN (luupdate, args, ,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {[@var{L}, @var{U}] =} luupdate (@var{L}, @var{U}, @var{x}, @var{y})\n\
-@deftypefnx {Loadable Function} {[@var{L}, @var{U}, @var{P}] =} luupdate (@var{L}, @var{U}, @var{P}, @var{x}, @var{y})\n\
+@deftypefn  {Built-in Function} {[@var{L}, @var{U}] =} luupdate (@var{L}, @var{U}, @var{x}, @var{y})\n\
+@deftypefnx {Built-in Function} {[@var{L}, @var{U}, @var{P}] =} luupdate (@var{L}, @var{U}, @var{P}, @var{x}, @var{y})\n\
 Given an LU@tie{}factorization of a real or complex matrix\n\
 @w{@var{A} = @var{L}*@var{U}}, @var{L}@tie{}lower unit trapezoidal and\n\
 @var{U}@tie{}upper trapezoidal, return the LU@tie{}factorization\n\
rename from src/DLD-FUNCTIONS/luinc.cc
rename to src/corefcn/luinc.cc
--- a/src/DLD-FUNCTIONS/luinc.cc
+++ b/src/corefcn/luinc.cc
@@ -24,7 +24,7 @@
 #include <config.h>
 #endif
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "gripes.h"
 #include "oct-obj.h"
@@ -37,11 +37,11 @@
 #include "ov-re-sparse.h"
 #include "ov-cx-sparse.h"
 
-DEFUN_DLD (luinc, args, nargout,
+DEFUN (luinc, args, nargout,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {[@var{L}, @var{U}, @var{P}, @var{Q}] =} luinc (@var{A}, '0')\n\
-@deftypefnx {Loadable Function} {[@var{L}, @var{U}, @var{P}, @var{Q}] =} luinc (@var{A}, @var{droptol})\n\
-@deftypefnx {Loadable Function} {[@var{L}, @var{U}, @var{P}, @var{Q}] =} luinc (@var{A}, @var{opts})\n\
+@deftypefn  {Built-in Function} {[@var{L}, @var{U}, @var{P}, @var{Q}] =} luinc (@var{A}, '0')\n\
+@deftypefnx {Built-in Function} {[@var{L}, @var{U}, @var{P}, @var{Q}] =} luinc (@var{A}, @var{droptol})\n\
+@deftypefnx {Built-in Function} {[@var{L}, @var{U}, @var{P}, @var{Q}] =} luinc (@var{A}, @var{opts})\n\
 @cindex LU decomposition\n\
 Produce the incomplete LU@tie{}factorization of the sparse matrix @var{A}.\n\
 Two types of incomplete factorization are possible, and the type\n\
rename from src/mappers.cc
rename to src/corefcn/mappers.cc
rename from src/DLD-FUNCTIONS/matrix_type.cc
rename to src/corefcn/matrix_type.cc
--- a/src/DLD-FUNCTIONS/matrix_type.cc
+++ b/src/corefcn/matrix_type.cc
@@ -27,7 +27,7 @@
 #include <algorithm>
 
 #include "ov.h"
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "ov-re-mat.h"
 #include "ov-cx-mat.h"
@@ -36,14 +36,14 @@
 #include "MatrixType.h"
 #include "oct-locbuf.h"
 
-DEFUN_DLD (matrix_type, args, ,
+DEFUN (matrix_type, args, ,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {@var{type} =} matrix_type (@var{A})\n\
-@deftypefnx {Loadable Function} {@var{type} =} matrix_type (@var{A}, \"nocompute\")\n\
-@deftypefnx {Loadable Function} {@var{A} =} matrix_type (@var{A}, @var{type})\n\
-@deftypefnx {Loadable Function} {@var{A} =} matrix_type (@var{A}, \"upper\", @var{perm})\n\
-@deftypefnx {Loadable Function} {@var{A} =} matrix_type (@var{A}, \"lower\", @var{perm})\n\
-@deftypefnx {Loadable Function} {@var{A} =} matrix_type (@var{A}, \"banded\", @var{nl}, @var{nu})\n\
+@deftypefn  {Built-in Function} {@var{type} =} matrix_type (@var{A})\n\
+@deftypefnx {Built-in Function} {@var{type} =} matrix_type (@var{A}, \"nocompute\")\n\
+@deftypefnx {Built-in Function} {@var{A} =} matrix_type (@var{A}, @var{type})\n\
+@deftypefnx {Built-in Function} {@var{A} =} matrix_type (@var{A}, \"upper\", @var{perm})\n\
+@deftypefnx {Built-in Function} {@var{A} =} matrix_type (@var{A}, \"lower\", @var{perm})\n\
+@deftypefnx {Built-in Function} {@var{A} =} matrix_type (@var{A}, \"banded\", @var{nl}, @var{nu})\n\
 Identify the matrix type or mark a matrix as a particular type.  This allows\n\
 more rapid solutions of linear equations involving @var{A} to be performed.\n\
 Called with a single argument, @code{matrix_type} returns the type of the\n\
rename from src/DLD-FUNCTIONS/max.cc
rename to src/corefcn/max.cc
--- a/src/DLD-FUNCTIONS/max.cc
+++ b/src/corefcn/max.cc
@@ -32,7 +32,7 @@
 #include "CNDArray.h"
 #include "quit.h"
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "gripes.h"
 #include "oct-obj.h"
@@ -305,13 +305,13 @@
   return retval;
 }
 
-DEFUN_DLD (min, args, nargout,
+DEFUN (min, args, nargout,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {} min (@var{x})\n\
-@deftypefnx {Loadable Function} {} min (@var{x}, @var{y})\n\
-@deftypefnx {Loadable Function} {} min (@var{x}, [], @var{dim})\n\
-@deftypefnx {Loadable Function} {} min (@var{x}, @var{y}, @var{dim})\n\
-@deftypefnx {Loadable Function} {[@var{w}, @var{iw}] =} min (@var{x})\n\
+@deftypefn  {Built-in Function} {} min (@var{x})\n\
+@deftypefnx {Built-in Function} {} min (@var{x}, @var{y})\n\
+@deftypefnx {Built-in Function} {} min (@var{x}, [], @var{dim})\n\
+@deftypefnx {Built-in Function} {} min (@var{x}, @var{y}, @var{dim})\n\
+@deftypefnx {Built-in Function} {[@var{w}, @var{iw}] =} min (@var{x})\n\
 For a vector argument, return the minimum value.  For a matrix\n\
 argument, return the minimum value from each column, as a row\n\
 vector, or over the dimension @var{dim} if defined, in which case @var{y} \n\
@@ -376,13 +376,13 @@
 %!error min (1, 2, 3, 4)
 */
 
-DEFUN_DLD (max, args, nargout,
+DEFUN (max, args, nargout,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {} max (@var{x})\n\
-@deftypefnx {Loadable Function} {} max (@var{x}, @var{y})\n\
-@deftypefnx {Loadable Function} {} max (@var{x}, [], @var{dim})\n\
-@deftypefnx {Loadable Function} {} max (@var{x}, @var{y}, @var{dim})\n\
-@deftypefnx {Loadable Function} {[@var{w}, @var{iw}] =} max (@var{x})\n\
+@deftypefn  {Built-in Function} {} max (@var{x})\n\
+@deftypefnx {Built-in Function} {} max (@var{x}, @var{y})\n\
+@deftypefnx {Built-in Function} {} max (@var{x}, [], @var{dim})\n\
+@deftypefnx {Built-in Function} {} max (@var{x}, @var{y}, @var{dim})\n\
+@deftypefnx {Built-in Function} {[@var{w}, @var{iw}] =} max (@var{x})\n\
 For a vector argument, return the maximum value.  For a matrix\n\
 argument, return the maximum value from each column, as a row\n\
 vector, or over the dimension @var{dim} if defined, in which case @var{y} \n\
@@ -548,11 +548,11 @@
   return retval;
 }
 
-DEFUN_DLD (cummin, args, nargout,
+DEFUN (cummin, args, nargout,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {} cummin (@var{x})\n\
-@deftypefnx {Loadable Function} {} cummin (@var{x}, @var{dim})\n\
-@deftypefnx {Loadable Function} {[@var{w}, @var{iw}] =} cummin (@var{x})\n\
+@deftypefn  {Built-in Function} {} cummin (@var{x})\n\
+@deftypefnx {Built-in Function} {} cummin (@var{x}, @var{dim})\n\
+@deftypefnx {Built-in Function} {[@var{w}, @var{iw}] =} cummin (@var{x})\n\
 Return the cumulative minimum values along dimension @var{dim}.  If @var{dim}\n\
 is unspecified it defaults to column-wise operation.  For example:\n\
 \n\
@@ -590,11 +590,11 @@
   return do_cumminmax_body (args, nargout, true);
 }
 
-DEFUN_DLD (cummax, args, nargout,
+DEFUN (cummax, args, nargout,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {} cummax (@var{x})\n\
-@deftypefnx {Loadable Function} {} cummax (@var{x}, @var{dim})\n\
-@deftypefnx {Loadable Function} {[@var{w}, @var{iw}] =} cummax (@var{x})\n\
+@deftypefn  {Built-in Function} {} cummax (@var{x})\n\
+@deftypefnx {Built-in Function} {} cummax (@var{x}, @var{dim})\n\
+@deftypefnx {Built-in Function} {[@var{w}, @var{iw}] =} cummax (@var{x})\n\
 Return the cumulative maximum values along dimension @var{dim}.  If @var{dim}\n\
 is unspecified it defaults to column-wise operation.  For example:\n\
 \n\
rename from src/DLD-FUNCTIONS/md5sum.cc
rename to src/corefcn/md5sum.cc
--- a/src/DLD-FUNCTIONS/md5sum.cc
+++ b/src/corefcn/md5sum.cc
@@ -28,7 +28,7 @@
 #include <string>
 #include <vector>
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "file-stat.h"
 #include "file-ops.h"
 #include "gripes.h"
@@ -36,10 +36,10 @@
 #include "oct-env.h"
 #include "oct-md5.h"
 
-DEFUN_DLD (md5sum, args, ,
+DEFUN (md5sum, args, ,
    "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {} md5sum (@var{file})\n\
-@deftypefnx {Loadable Function} {} md5sum (@var{str}, @var{opt})\n\
+@deftypefn  {Built-in Function} {} md5sum (@var{file})\n\
+@deftypefnx {Built-in Function} {} md5sum (@var{str}, @var{opt})\n\
 Calculate the MD5 sum of the file @var{file}.  If the second parameter\n\
 @var{opt} exists and is true, then calculate the MD5 sum of the\n\
 string @var{str}.\n\
rename from src/DLD-FUNCTIONS/mgorth.cc
rename to src/corefcn/mgorth.cc
--- a/src/DLD-FUNCTIONS/mgorth.cc
+++ b/src/corefcn/mgorth.cc
@@ -26,7 +26,7 @@
 #endif
 
 #include "oct-norm.h"
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "gripes.h"
 
@@ -48,9 +48,9 @@
     x = x / h(Vc);
 }
 
-DEFUN_DLD (mgorth, args, nargout,
+DEFUN (mgorth, args, nargout,
   "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {[@var{y}, @var{h}] =} mgorth (@var{x}, @var{v})\n\
+@deftypefn {Built-in Function} {[@var{y}, @var{h}] =} mgorth (@var{x}, @var{v})\n\
 Orthogonalize a given column vector @var{x} with respect to a given\n\
 orthonormal basis @var{v} using a modified Gram-Schmidt orthogonalization.  \n\
 On exit, @var{y} is a unit vector such that:\n\
new file mode 100644
--- /dev/null
+++ b/src/corefcn/module.mk
@@ -0,0 +1,98 @@
+EXTRA_DIST += \
+  corefcn/module.mk
+
+## Options functions for Fortran packages like LSODE, DASPK.
+## These are generated automagically by configure and Perl.
+OPT_HANDLERS = \
+  corefcn/DASPK-opts.cc \
+  corefcn/DASRT-opts.cc \
+  corefcn/DASSL-opts.cc \
+  corefcn/LSODE-opts.cc \
+  corefcn/Quad-opts.cc
+
+OPT_INC = \
+  $(top_builddir)/liboctave/DASPK-opts.h \
+  $(top_builddir)/liboctave/DASRT-opts.h \
+  $(top_builddir)/liboctave/DASSL-opts.h \
+  $(top_builddir)/liboctave/LSODE-opts.h \
+  $(top_builddir)/liboctave/Quad-opts.h
+
+$(OPT_HANDLERS): corefcn/%.cc : $(top_builddir)/liboctave/%.in
+	$(PERL) $(top_srcdir)/build-aux/mk-opts.pl --opt-handler-fcns $< > $@-t
+	mv $@-t $@
+
+$(OPT_INC) : %.h : %.in
+	$(MAKE) -C $(top_builddir)/liboctave $(@F)
+
+COREFCN_SRC = \
+  corefcn/__contourc__.cc \
+  corefcn/__dispatch__.cc \
+  corefcn/__lin_interpn__.cc \
+  corefcn/__pchip_deriv__.cc \
+  corefcn/__qp__.cc \
+  corefcn/balance.cc \
+  corefcn/besselj.cc \
+  corefcn/betainc.cc \
+  corefcn/bitfcns.cc \
+  corefcn/bsxfun.cc \
+  corefcn/cellfun.cc \
+  corefcn/colloc.cc \
+  corefcn/conv2.cc \
+  corefcn/daspk.cc \
+  corefcn/dasrt.cc \
+  corefcn/dassl.cc \
+  corefcn/det.cc \
+  corefcn/dlmread.cc \
+  corefcn/dot.cc \
+  corefcn/eig.cc \
+  corefcn/fft.cc \
+  corefcn/fft2.cc \
+  corefcn/fftn.cc \
+  corefcn/filter.cc \
+  corefcn/find.cc \
+  corefcn/gammainc.cc \
+  corefcn/gcd.cc \
+  corefcn/getgrent.cc \
+  corefcn/getpwent.cc \
+  corefcn/getrusage.cc \
+  corefcn/givens.cc \
+  corefcn/hess.cc \
+  corefcn/hex2num.cc \
+  corefcn/inv.cc \
+  corefcn/kron.cc \
+  corefcn/lookup.cc \
+  corefcn/lsode.cc \
+  corefcn/lu.cc \
+  corefcn/luinc.cc \
+  corefcn/mappers.cc \
+  corefcn/matrix_type.cc \
+  corefcn/max.cc \
+  corefcn/md5sum.cc \
+  corefcn/mgorth.cc \
+  corefcn/nproc.cc \
+  corefcn/pinv.cc \
+  corefcn/quad.cc \
+  corefcn/quadcc.cc \
+  corefcn/qz.cc \
+  corefcn/rand.cc \
+  corefcn/rcond.cc \
+  corefcn/regexp.cc \
+  corefcn/schur.cc \
+  corefcn/sparse.cc \
+  corefcn/spparms.cc \
+  corefcn/sqrtm.cc \
+  corefcn/str2double.cc \
+  corefcn/strfind.cc \
+  corefcn/strfns.cc \
+  corefcn/sub2ind.cc \
+  corefcn/svd.cc \
+  corefcn/syl.cc \
+  corefcn/syscalls.cc \
+  corefcn/time.cc \
+  corefcn/tril.cc \
+  corefcn/typecast.cc
+
+noinst_LTLIBRARIES += corefcn/libcorefcn.la
+
+corefcn_libcorefcn_la_SOURCES = $(COREFCN_SRC)
+
rename from src/DLD-FUNCTIONS/nproc.cc
rename to src/corefcn/nproc.cc
--- a/src/DLD-FUNCTIONS/nproc.cc
+++ b/src/corefcn/nproc.cc
@@ -24,13 +24,13 @@
 #include <config.h>
 #endif
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "nproc.h"
 
-DEFUN_DLD (nproc, args, nargout,
+DEFUN (nproc, args, nargout,
    "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {} nproc ()\n\
-@deftypefnx {Loadable Function} {} nproc (@var{query})\n\
+@deftypefn  {Built-in Function} {} nproc ()\n\
+@deftypefnx {Built-in Function} {} nproc (@var{query})\n\
 Return the current number of available processors.\n\
 \n\
 If called with the optional argument @var{query}, modify how processors\n\
rename from src/DLD-FUNCTIONS/pinv.cc
rename to src/corefcn/pinv.cc
--- a/src/DLD-FUNCTIONS/pinv.cc
+++ b/src/corefcn/pinv.cc
@@ -24,7 +24,7 @@
 #include <config.h>
 #endif
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "gripes.h"
 #include "oct-obj.h"
@@ -36,10 +36,10 @@
 #include "ov-flt-cx-diag.h"
 #include "ov-perm.h"
 
-DEFUN_DLD (pinv, args, ,
+DEFUN (pinv, args, ,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {} pinv (@var{x})\n\
-@deftypefnx {Loadable Function} {} pinv (@var{x}, @var{tol})\n\
+@deftypefn  {Built-in Function} {} pinv (@var{x})\n\
+@deftypefnx {Built-in Function} {} pinv (@var{x}, @var{tol})\n\
 Return the pseudoinverse of @var{x}.  Singular values less than\n\
 @var{tol} are ignored.\n\
 \n\
rename from src/DLD-FUNCTIONS/quad.cc
rename to src/corefcn/quad.cc
--- a/src/DLD-FUNCTIONS/quad.cc
+++ b/src/corefcn/quad.cc
@@ -32,7 +32,7 @@
 #include "Quad.h"
 #include "lo-mappers.h"
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "gripes.h"
 #include "pager.h"
@@ -172,12 +172,12 @@
     } \
   while (0)
 
-DEFUN_DLD (quad, args, nargout,
+DEFUN (quad, args, nargout,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {@var{q} =} quad (@var{f}, @var{a}, @var{b})\n\
-@deftypefnx {Loadable Function} {@var{q} =} quad (@var{f}, @var{a}, @var{b}, @var{tol})\n\
-@deftypefnx {Loadable Function} {@var{q} =} quad (@var{f}, @var{a}, @var{b}, @var{tol}, @var{sing})\n\
-@deftypefnx {Loadable Function} {[@var{q}, @var{ier}, @var{nfun}, @var{err}] =} quad (@dots{})\n\
+@deftypefn  {Built-in Function} {@var{q} =} quad (@var{f}, @var{a}, @var{b})\n\
+@deftypefnx {Built-in Function} {@var{q} =} quad (@var{f}, @var{a}, @var{b}, @var{tol})\n\
+@deftypefnx {Built-in Function} {@var{q} =} quad (@var{f}, @var{a}, @var{b}, @var{tol}, @var{sing})\n\
+@deftypefnx {Built-in Function} {[@var{q}, @var{ier}, @var{nfun}, @var{err}] =} quad (@dots{})\n\
 Numerically evaluate the integral of @var{f} from @var{a} to @var{b} using\n\
 Fortran routines from @w{@sc{quadpack}}.  @var{f} is a function handle,\n\
 inline function, or a string containing the name of the function to\n\
rename from src/DLD-FUNCTIONS/quadcc.cc
rename to src/corefcn/quadcc.cc
--- a/src/DLD-FUNCTIONS/quadcc.cc
+++ b/src/corefcn/quadcc.cc
@@ -24,12 +24,17 @@
 #include <config.h>
 #endif
 
-#include <stdlib.h>
-#include "lo-math.h"
 #include "lo-ieee.h"
-#include "oct.h"
 #include "parse.h"
-#include "ov-fcn-handle.h"
+#include "variables.h"
+
+#include "defun.h"
+#include "error.h"
+#include "oct-obj.h"
+#include "utils.h"
+
+//#include "oct.h"
+//#include "defun.h"
 
 /* Define the size of the interval heap. */
 #define cquad_heapsize                  200
@@ -1469,7 +1474,7 @@
 
 /* The actual integration routine.  */
 
-DEFUN_DLD (quadcc, args, nargout,
+DEFUN (quadcc, args, nargout,
 "-*- texinfo -*-\n\
 @deftypefn  {Function File} {@var{q} =} quadcc (@var{f}, @var{a}, @var{b})\n\
 @deftypefnx {Function File} {@var{q} =} quadcc (@var{f}, @var{a}, @var{b}, @var{tol})\n\
rename from src/DLD-FUNCTIONS/qz.cc
rename to src/corefcn/qz.cc
--- a/src/DLD-FUNCTIONS/qz.cc
+++ b/src/corefcn/qz.cc
@@ -44,7 +44,7 @@
 #include "lo-math.h"
 #include "quit.h"
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "gripes.h"
 #include "oct-obj.h"
@@ -290,10 +290,10 @@
 
 //FIXME: Matlab does not produce lambda as the first output argument.
 //       Compatibility problem?
-DEFUN_DLD (qz, args, nargout,
+DEFUN (qz, args, nargout,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {@var{lambda} =} qz (@var{A}, @var{B})\n\
-@deftypefnx {Loadable Function} {@var{lambda} =} qz (@var{A}, @var{B}, @var{opt})\n\
+@deftypefn  {Built-in Function} {@var{lambda} =} qz (@var{A}, @var{B})\n\
+@deftypefnx {Built-in Function} {@var{lambda} =} qz (@var{A}, @var{B}, @var{opt})\n\
 QZ@tie{}decomposition of the generalized eigenvalue problem\n\
 (@math{A x = s B x}).  There are three ways to call this function:\n\
 @enumerate\n\
rename from src/DLD-FUNCTIONS/rand.cc
rename to src/corefcn/rand.cc
--- a/src/DLD-FUNCTIONS/rand.cc
+++ b/src/corefcn/rand.cc
@@ -39,7 +39,7 @@
 #include "oct-rand.h"
 #include "quit.h"
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "gripes.h"
 #include "oct-obj.h"
@@ -363,19 +363,19 @@
     }
 }
 
-DEFUN_DLD (rand, args, ,
+DEFUN (rand, args, ,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {} rand (@var{n})\n\
-@deftypefnx {Loadable Function} {} rand (@var{n}, @var{m}, @dots{})\n\
-@deftypefnx {Loadable Function} {} rand ([@var{n} @var{m} @dots{}])\n\
-@deftypefnx {Loadable Function} {@var{v} =} rand (\"state\")\n\
-@deftypefnx {Loadable Function} {} rand (\"state\", @var{v})\n\
-@deftypefnx {Loadable Function} {} rand (\"state\", \"reset\")\n\
-@deftypefnx {Loadable Function} {@var{v} =} rand (\"seed\")\n\
-@deftypefnx {Loadable Function} {} rand (\"seed\", @var{v})\n\
-@deftypefnx {Loadable Function} {} rand (\"seed\", \"reset\")\n\
-@deftypefnx {Loadable Function} {} rand (@dots{}, \"single\")\n\
-@deftypefnx {Loadable Function} {} rand (@dots{}, \"double\")\n\
+@deftypefn  {Built-in Function} {} rand (@var{n})\n\
+@deftypefnx {Built-in Function} {} rand (@var{n}, @var{m}, @dots{})\n\
+@deftypefnx {Built-in Function} {} rand ([@var{n} @var{m} @dots{}])\n\
+@deftypefnx {Built-in Function} {@var{v} =} rand (\"state\")\n\
+@deftypefnx {Built-in Function} {} rand (\"state\", @var{v})\n\
+@deftypefnx {Built-in Function} {} rand (\"state\", \"reset\")\n\
+@deftypefnx {Built-in Function} {@var{v} =} rand (\"seed\")\n\
+@deftypefnx {Built-in Function} {} rand (\"seed\", @var{v})\n\
+@deftypefnx {Built-in Function} {} rand (\"seed\", \"reset\")\n\
+@deftypefnx {Built-in Function} {} rand (@dots{}, \"single\")\n\
+@deftypefnx {Built-in Function} {} rand (@dots{}, \"double\")\n\
 Return a matrix with random elements uniformly distributed on the\n\
 interval (0, 1).  The arguments are handled the same as the arguments\n\
 for @code{eye}.\n\
@@ -535,19 +535,19 @@
 
 static std::string current_distribution = octave_rand::distribution ();
 
-DEFUN_DLD (randn, args, ,
+DEFUN (randn, args, ,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {} randn (@var{n})\n\
-@deftypefnx {Loadable Function} {} randn (@var{n}, @var{m}, @dots{})\n\
-@deftypefnx {Loadable Function} {} randn ([@var{n} @var{m} @dots{}])\n\
-@deftypefnx {Loadable Function} {@var{v} =} randn (\"state\")\n\
-@deftypefnx {Loadable Function} {} randn (\"state\", @var{v})\n\
-@deftypefnx {Loadable Function} {} randn (\"state\", \"reset\")\n\
-@deftypefnx {Loadable Function} {@var{v} =} randn (\"seed\")\n\
-@deftypefnx {Loadable Function} {} randn (\"seed\", @var{v})\n\
-@deftypefnx {Loadable Function} {} randn (\"seed\", \"reset\")\n\
-@deftypefnx {Loadable Function} {} randn (@dots{}, \"single\")\n\
-@deftypefnx {Loadable Function} {} randn (@dots{}, \"double\")\n\
+@deftypefn  {Built-in Function} {} randn (@var{n})\n\
+@deftypefnx {Built-in Function} {} randn (@var{n}, @var{m}, @dots{})\n\
+@deftypefnx {Built-in Function} {} randn ([@var{n} @var{m} @dots{}])\n\
+@deftypefnx {Built-in Function} {@var{v} =} randn (\"state\")\n\
+@deftypefnx {Built-in Function} {} randn (\"state\", @var{v})\n\
+@deftypefnx {Built-in Function} {} randn (\"state\", \"reset\")\n\
+@deftypefnx {Built-in Function} {@var{v} =} randn (\"seed\")\n\
+@deftypefnx {Built-in Function} {} randn (\"seed\", @var{v})\n\
+@deftypefnx {Built-in Function} {} randn (\"seed\", \"reset\")\n\
+@deftypefnx {Built-in Function} {} randn (@dots{}, \"single\")\n\
+@deftypefnx {Built-in Function} {} randn (@dots{}, \"double\")\n\
 Return a matrix with normally distributed random\n\
 elements having zero mean and variance one.  The arguments are\n\
 handled the same as the arguments for @code{rand}.\n\
@@ -606,19 +606,19 @@
 %! endif
 */
 
-DEFUN_DLD (rande, args, ,
+DEFUN (rande, args, ,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {} rande (@var{n})\n\
-@deftypefnx {Loadable Function} {} rande (@var{n}, @var{m}, @dots{})\n\
-@deftypefnx {Loadable Function} {} rande ([@var{n} @var{m} @dots{}])\n\
-@deftypefnx {Loadable Function} {@var{v} =} rande (\"state\")\n\
-@deftypefnx {Loadable Function} {} rande (\"state\", @var{v})\n\
-@deftypefnx {Loadable Function} {} rande (\"state\", \"reset\")\n\
-@deftypefnx {Loadable Function} {@var{v} =} rande (\"seed\")\n\
-@deftypefnx {Loadable Function} {} rande (\"seed\", @var{v})\n\
-@deftypefnx {Loadable Function} {} rande (\"seed\", \"reset\")\n\
-@deftypefnx {Loadable Function} {} rande (@dots{}, \"single\")\n\
-@deftypefnx {Loadable Function} {} rande (@dots{}, \"double\")\n\
+@deftypefn  {Built-in Function} {} rande (@var{n})\n\
+@deftypefnx {Built-in Function} {} rande (@var{n}, @var{m}, @dots{})\n\
+@deftypefnx {Built-in Function} {} rande ([@var{n} @var{m} @dots{}])\n\
+@deftypefnx {Built-in Function} {@var{v} =} rande (\"state\")\n\
+@deftypefnx {Built-in Function} {} rande (\"state\", @var{v})\n\
+@deftypefnx {Built-in Function} {} rande (\"state\", \"reset\")\n\
+@deftypefnx {Built-in Function} {@var{v} =} rande (\"seed\")\n\
+@deftypefnx {Built-in Function} {} rande (\"seed\", @var{v})\n\
+@deftypefnx {Built-in Function} {} rande (\"seed\", \"reset\")\n\
+@deftypefnx {Built-in Function} {} rande (@dots{}, \"single\")\n\
+@deftypefnx {Built-in Function} {} rande (@dots{}, \"double\")\n\
 Return a matrix with exponentially distributed random elements.  The\n\
 arguments are handled the same as the arguments for @code{rand}.\n\
 \n\
@@ -678,19 +678,19 @@
 %! endif
 */
 
-DEFUN_DLD (randg, args, ,
+DEFUN (randg, args, ,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {} randg (@var{n})\n\
-@deftypefnx {Loadable Function} {} randg (@var{n}, @var{m}, @dots{})\n\
-@deftypefnx {Loadable Function} {} randg ([@var{n} @var{m} @dots{}])\n\
-@deftypefnx {Loadable Function} {@var{v} =} randg (\"state\")\n\
-@deftypefnx {Loadable Function} {} randg (\"state\", @var{v})\n\
-@deftypefnx {Loadable Function} {} randg (\"state\", \"reset\")\n\
-@deftypefnx {Loadable Function} {@var{v} =} randg (\"seed\")\n\
-@deftypefnx {Loadable Function} {} randg (\"seed\", @var{v})\n\
-@deftypefnx {Loadable Function} {} randg (\"seed\", \"reset\")\n\
-@deftypefnx {Loadable Function} {} randg (@dots{}, \"single\")\n\
-@deftypefnx {Loadable Function} {} randg (@dots{}, \"double\")\n\
+@deftypefn  {Built-in Function} {} randg (@var{n})\n\
+@deftypefnx {Built-in Function} {} randg (@var{n}, @var{m}, @dots{})\n\
+@deftypefnx {Built-in Function} {} randg ([@var{n} @var{m} @dots{}])\n\
+@deftypefnx {Built-in Function} {@var{v} =} randg (\"state\")\n\
+@deftypefnx {Built-in Function} {} randg (\"state\", @var{v})\n\
+@deftypefnx {Built-in Function} {} randg (\"state\", \"reset\")\n\
+@deftypefnx {Built-in Function} {@var{v} =} randg (\"seed\")\n\
+@deftypefnx {Built-in Function} {} randg (\"seed\", @var{v})\n\
+@deftypefnx {Built-in Function} {} randg (\"seed\", \"reset\")\n\
+@deftypefnx {Built-in Function} {} randg (@dots{}, \"single\")\n\
+@deftypefnx {Built-in Function} {} randg (@dots{}, \"double\")\n\
 Return a matrix with @code{gamma (@var{a},1)} distributed random elements.\n\
 The arguments are handled the same as the arguments for @code{rand},\n\
 except for the argument @var{a}.\n\
@@ -949,19 +949,19 @@
 %! endif
 */
 
-DEFUN_DLD (randp, args, ,
+DEFUN (randp, args, ,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {} randp (@var{l}, @var{n})\n\
-@deftypefnx {Loadable Function} {} randp (@var{l}, @var{n}, @var{m}, @dots{})\n\
-@deftypefnx {Loadable Function} {} randp (@var{l}, [@var{n} @var{m} @dots{}])\n\
-@deftypefnx {Loadable Function} {@var{v} =} randp (\"state\")\n\
-@deftypefnx {Loadable Function} {} randp (\"state\", @var{v})\n\
-@deftypefnx {Loadable Function} {} randp (\"state\", \"reset\")\n\
-@deftypefnx {Loadable Function} {@var{v} =} randp (\"seed\")\n\
-@deftypefnx {Loadable Function} {} randp (\"seed\", @var{v})\n\
-@deftypefnx {Loadable Function} {} randp (\"seed\", \"reset\")\n\
-@deftypefnx {Loadable Function} {} randp (@dots{}, \"single\")\n\
-@deftypefnx {Loadable Function} {} randp (@dots{}, \"double\")\n\
+@deftypefn  {Built-in Function} {} randp (@var{l}, @var{n})\n\
+@deftypefnx {Built-in Function} {} randp (@var{l}, @var{n}, @var{m}, @dots{})\n\
+@deftypefnx {Built-in Function} {} randp (@var{l}, [@var{n} @var{m} @dots{}])\n\
+@deftypefnx {Built-in Function} {@var{v} =} randp (\"state\")\n\
+@deftypefnx {Built-in Function} {} randp (\"state\", @var{v})\n\
+@deftypefnx {Built-in Function} {} randp (\"state\", \"reset\")\n\
+@deftypefnx {Built-in Function} {@var{v} =} randp (\"seed\")\n\
+@deftypefnx {Built-in Function} {} randp (\"seed\", @var{v})\n\
+@deftypefnx {Built-in Function} {} randp (\"seed\", \"reset\")\n\
+@deftypefnx {Built-in Function} {} randp (@dots{}, \"single\")\n\
+@deftypefnx {Built-in Function} {} randp (@dots{}, \"double\")\n\
 Return a matrix with Poisson distributed random elements with mean value\n\
 parameter given by the first argument, @var{l}.  The arguments\n\
 are handled the same as the arguments for @code{rand}, except for the\n\
@@ -1096,10 +1096,10 @@
 %! endif
 */
 
-DEFUN_DLD (randperm, args, ,
+DEFUN (randperm, args, ,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {} randperm (@var{n})\n\
-@deftypefnx {Loadable Function} {} randperm (@var{n}, @var{m})\n\
+@deftypefn  {Built-in Function} {} randperm (@var{n})\n\
+@deftypefnx {Built-in Function} {} randperm (@var{n}, @var{m})\n\
 Return a row vector containing a random permutation of @code{1:@var{n}}.\n\
 If @var{m} is supplied, return @var{m} unique entries, sampled without\n\
 replacement from @code{1:@var{n}}.  The complexity is O(@var{n}) in\n\
rename from src/DLD-FUNCTIONS/rcond.cc
rename to src/corefcn/rcond.cc
--- a/src/DLD-FUNCTIONS/rcond.cc
+++ b/src/corefcn/rcond.cc
@@ -24,15 +24,15 @@
 #include <config.h>
 #endif
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "gripes.h"
 #include "oct-obj.h"
 #include "utils.h"
 
-DEFUN_DLD (rcond, args, ,
+DEFUN (rcond, args, ,
   "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {@var{c} =} rcond (@var{A})\n\
+@deftypefn {Built-in Function} {@var{c} =} rcond (@var{A})\n\
 Compute the 1-norm estimate of the reciprocal condition number as returned\n\
 by @sc{lapack}.  If the matrix is well-conditioned then @var{c} will be near\n\
 1 and if the matrix is poorly conditioned it will be close to zero.\n\
rename from src/DLD-FUNCTIONS/regexp.cc
rename to src/corefcn/regexp.cc
--- a/src/DLD-FUNCTIONS/regexp.cc
+++ b/src/corefcn/regexp.cc
@@ -36,7 +36,7 @@
 #include "regexp.h"
 #include "str-vec.h"
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "Cell.h"
 #include "error.h"
 #include "gripes.h"
@@ -536,10 +536,10 @@
 
 }
 
-DEFUN_DLD (regexp, args, nargout,
+DEFUN (regexp, args, nargout,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {[@var{s}, @var{e}, @var{te}, @var{m}, @var{t}, @var{nm}, @var{sp}] =} regexp (@var{str}, @var{pat})\n\
-@deftypefnx {Loadable Function} {[@dots{}] =} regexp (@var{str}, @var{pat}, \"@var{opt1}\", @dots{})\n\
+@deftypefn  {Built-in Function} {[@var{s}, @var{e}, @var{te}, @var{m}, @var{t}, @var{nm}, @var{sp}] =} regexp (@var{str}, @var{pat})\n\
+@deftypefnx {Built-in Function} {[@dots{}] =} regexp (@var{str}, @var{pat}, \"@var{opt1}\", @dots{})\n\
 Regular expression string matching.  Search for @var{pat} in @var{str} and\n\
 return the positions and substrings of any matches, or empty values if there\n\
 are none.\n\
@@ -596,10 +596,7 @@
 end (@code{$}) of the string.\n\
 @end table\n\
 \n\
-In addition, the following escaped characters have special meaning.  Note,\n\
-it is recommended to quote @var{pat} in single quotes, rather than double\n\
-quotes, to avoid the escape sequences being interpreted by Octave before\n\
-being passed to @code{regexp}.\n\
+In addition, the following escaped characters have special meaning.\n\
 \n\
 @table @code\n\
 @item \\b\n\
@@ -633,6 +630,12 @@
 Match any non-digit\n\
 @end table\n\
 \n\
+Implementation Note: For compatibility with @sc{matlab}, ordinary escape\n\
+sequences (e.g., \"\\n\" => newline) are processed in @var{pat}\n\
+regardless of whether @var{pat} has been defined within single quotes.  Use\n\
+a second backslash to stop interpolation of the escape sequence (e.g.,\n\
+\"\\\\n\") or use the @code{regexptranslate} function.\n\
+\n\
 The outputs of @code{regexp} default to the order given below\n\
 \n\
 @table @var\n\
@@ -1016,10 +1019,10 @@
 %!assert (regexp ("\n", "\n"), 1);
 */
 
-DEFUN_DLD (regexpi, args, nargout,
+DEFUN (regexpi, args, nargout,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {[@var{s}, @var{e}, @var{te}, @var{m}, @var{t}, @var{nm}, @var{sp}] =} regexpi (@var{str}, @var{pat})\n\
-@deftypefnx {Loadable Function} {[@dots{}] =} regexpi (@var{str}, @var{pat}, \"@var{opt1}\", @dots{})\n\
+@deftypefn  {Built-in Function} {[@var{s}, @var{e}, @var{te}, @var{m}, @var{t}, @var{nm}, @var{sp}] =} regexpi (@var{str}, @var{pat})\n\
+@deftypefnx {Built-in Function} {[@dots{}] =} regexpi (@var{str}, @var{pat}, \"@var{opt1}\", @dots{})\n\
 \n\
 Case insensitive regular expression string matching.  Search for @var{pat} in\n\
 @var{str} and return the positions and substrings of any matches, or empty\n\
@@ -1228,10 +1231,10 @@
   return regexp_replace (pattern, buffer, replacement, options, who);
 }
 
-DEFUN_DLD (regexprep, args, ,
+DEFUN (regexprep, args, ,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {@var{outstr} =} regexprep (@var{string}, @var{pat}, @var{repstr})\n\
-@deftypefnx {Loadable Function} {@var{outstr} =} regexprep (@var{string}, @var{pat}, @var{repstr}, \"@var{opt1}\", @dots{})\n\
+@deftypefn  {Built-in Function} {@var{outstr} =} regexprep (@var{string}, @var{pat}, @var{repstr})\n\
+@deftypefnx {Built-in Function} {@var{outstr} =} regexprep (@var{string}, @var{pat}, @var{repstr}, \"@var{opt1}\", @dots{})\n\
 Replace occurrences of pattern @var{pat} in @var{string} with @var{repstr}.\n\
 \n\
 The pattern is a regular expression as documented for @code{regexp}.\n\
@@ -1258,6 +1261,11 @@
 This option is present for compatibility but is ignored.\n\
 \n\
 @end table\n\
+\n\
+Implementation Note: For compatibility with @sc{matlab}, ordinary escape\n\
+sequences (e.g., \"\\n\" => newline) are processed in both @var{pat}\n\
+and @var{repstr} regardless of whether they were defined within single quotes.  Use a second backslash to stop interpolation of the escape sequence (e.g.,\n\
+\"\\\\n\") or use the @code{regexptranslate} function.\n\
 @seealso{regexp, regexpi, strrep}\n\
 @end deftypefn")
 {
rename from src/DLD-FUNCTIONS/schur.cc
rename to src/corefcn/schur.cc
--- a/src/DLD-FUNCTIONS/schur.cc
+++ b/src/corefcn/schur.cc
@@ -31,7 +31,7 @@
 #include "fCmplxSCHUR.h"
 #include "floatSCHUR.h"
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "gripes.h"
 #include "oct-obj.h"
@@ -57,13 +57,13 @@
   return retval;
 }
 
-DEFUN_DLD (schur, args, nargout,
+DEFUN (schur, args, nargout,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {@var{S} =} schur (@var{A})\n\
-@deftypefnx {Loadable Function} {@var{S} =} schur (@var{A}, \"real\")\n\
-@deftypefnx {Loadable Function} {@var{S} =} schur (@var{A}, \"complex\")\n\
-@deftypefnx {Loadable Function} {@var{S} =} schur (@var{A}, @var{opt})\n\
-@deftypefnx {Loadable Function} {[@var{U}, @var{S}] =} schur (@var{A}, @dots{})\n\
+@deftypefn  {Built-in Function} {@var{S} =} schur (@var{A})\n\
+@deftypefnx {Built-in Function} {@var{S} =} schur (@var{A}, \"real\")\n\
+@deftypefnx {Built-in Function} {@var{S} =} schur (@var{A}, \"complex\")\n\
+@deftypefnx {Built-in Function} {@var{S} =} schur (@var{A}, @var{opt})\n\
+@deftypefnx {Built-in Function} {[@var{U}, @var{S}] =} schur (@var{A}, @dots{})\n\
 @cindex Schur decomposition\n\
 Compute the Schur@tie{}decomposition of @var{A}\n\
 @tex\n\
@@ -292,7 +292,7 @@
 %!error <argument must be a square matrix> schur ([1, 2, 3; 4, 5, 6])
 */
 
-DEFUN_DLD (rsf2csf, args, nargout,
+DEFUN (rsf2csf, args, nargout,
   "-*- texinfo -*-\n\
 @deftypefn {Function File} {[@var{U}, @var{T}] =} rsf2csf (@var{UR}, @var{TR})\n\
 Convert a real, upper quasi-triangular Schur@tie{}form @var{TR} to a complex,\n\
rename from src/sparse.cc
rename to src/corefcn/sparse.cc
--- a/src/sparse.cc
+++ b/src/corefcn/sparse.cc
@@ -43,7 +43,7 @@
 
 DEFUN (issparse, args, ,
   "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {} issparse (@var{x})\n\
+@deftypefn {Built-in Function} {} issparse (@var{x})\n\
 Return true if @var{x} is a sparse matrix.\n\
 @seealso{ismatrix}\n\
 @end deftypefn")
@@ -59,11 +59,11 @@
 
 DEFUN (sparse, args, ,
     "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {@var{s} =} sparse (@var{a})\n\
-@deftypefnx {Loadable Function} {@var{s} =} sparse (@var{i}, @var{j}, @var{sv}, @var{m}, @var{n}, @var{nzmax})\n\
-@deftypefnx {Loadable Function} {@var{s} =} sparse (@var{i}, @var{j}, @var{sv})\n\
-@deftypefnx {Loadable Function} {@var{s} =} sparse (@var{i}, @var{j}, @var{s}, @var{m}, @var{n}, \"unique\")\n\
-@deftypefnx {Loadable Function} {@var{s} =} sparse (@var{m}, @var{n})\n\
+@deftypefn  {Built-in Function} {@var{s} =} sparse (@var{a})\n\
+@deftypefnx {Built-in Function} {@var{s} =} sparse (@var{i}, @var{j}, @var{sv}, @var{m}, @var{n}, @var{nzmax})\n\
+@deftypefnx {Built-in Function} {@var{s} =} sparse (@var{i}, @var{j}, @var{sv})\n\
+@deftypefnx {Built-in Function} {@var{s} =} sparse (@var{i}, @var{j}, @var{s}, @var{m}, @var{n}, \"unique\")\n\
+@deftypefnx {Built-in Function} {@var{s} =} sparse (@var{m}, @var{n})\n\
 Create a sparse matrix from the full matrix or row, column, value triplets.\n\
 If @var{a} is a full matrix, convert it to a sparse matrix representation,\n\
 removing all zero values in the process.\n\
@@ -209,7 +209,7 @@
 
 DEFUN (spalloc, args, ,
     "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {@var{s} =} spalloc (@var{m}, @var{n}, @var{nz})\n\
+@deftypefn {Built-in Function} {@var{s} =} spalloc (@var{m}, @var{n}, @var{nz})\n\
 Create an @var{m}-by-@var{n} sparse matrix with pre-allocated space for at\n\
 most @var{nz} nonzero elements.  This is useful for building the matrix\n\
 incrementally by a sequence of indexed assignments.  Subsequent indexed\n\
rename from src/DLD-FUNCTIONS/spparms.cc
rename to src/corefcn/spparms.cc
--- a/src/DLD-FUNCTIONS/spparms.cc
+++ b/src/corefcn/spparms.cc
@@ -25,7 +25,7 @@
 #include <config.h>
 #endif
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "ov.h"
 #include "pager.h"
 #include "error.h"
@@ -33,16 +33,16 @@
 
 #include "oct-spparms.h"
 
-DEFUN_DLD (spparms, args, nargout,
+DEFUN (spparms, args, nargout,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} { } spparms ()\n\
-@deftypefnx {Loadable Function} {@var{vals} =} spparms ()\n\
-@deftypefnx {Loadable Function} {[@var{keys}, @var{vals}] =} spparms ()\n\
-@deftypefnx {Loadable Function} {@var{val} =} spparms (@var{key})\n\
-@deftypefnx {Loadable Function} { } spparms (@var{vals})\n\
-@deftypefnx {Loadable Function} { } spparms (\"defaults\")\n\
-@deftypefnx {Loadable Function} { } spparms (\"tight\")\n\
-@deftypefnx {Loadable Function} { } spparms (@var{key}, @var{val})\n\
+@deftypefn  {Built-in Function} { } spparms ()\n\
+@deftypefnx {Built-in Function} {@var{vals} =} spparms ()\n\
+@deftypefnx {Built-in Function} {[@var{keys}, @var{vals}] =} spparms ()\n\
+@deftypefnx {Built-in Function} {@var{val} =} spparms (@var{key})\n\
+@deftypefnx {Built-in Function} { } spparms (@var{vals})\n\
+@deftypefnx {Built-in Function} { } spparms (\"defaults\")\n\
+@deftypefnx {Built-in Function} { } spparms (\"tight\")\n\
+@deftypefnx {Built-in Function} { } spparms (@var{key}, @var{val})\n\
 Query or set the parameters used by the sparse solvers and factorization\n\
 functions.  The first four calls above get information about the current\n\
 settings, while the others change the current settings.  The parameters are\n\
@@ -126,7 +126,7 @@
           std::string str = args(0).string_value ();
           int len = str.length ();
           for (int i = 0; i < len; i++)
-            str [i] = tolower (str [i]);
+            str[i] = tolower (str[i]);
 
           if (str == "defaults")
             octave_sparse_params::defaults ();
rename from src/DLD-FUNCTIONS/sqrtm.cc
rename to src/corefcn/sqrtm.cc
--- a/src/DLD-FUNCTIONS/sqrtm.cc
+++ b/src/corefcn/sqrtm.cc
@@ -33,7 +33,7 @@
 #include "lo-mappers.h"
 #include "oct-norm.h"
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "gripes.h"
 #include "utils.h"
@@ -199,10 +199,10 @@
   return retval;
 }
 
-DEFUN_DLD (sqrtm, args, nargout,
+DEFUN (sqrtm, args, nargout,
  "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {@var{s} =} sqrtm (@var{A})\n\
-@deftypefnx {Loadable Function} {[@var{s}, @var{error_estimate}] =} sqrtm (@var{A})\n\
+@deftypefn  {Built-in Function} {@var{s} =} sqrtm (@var{A})\n\
+@deftypefnx {Built-in Function} {[@var{s}, @var{error_estimate}] =} sqrtm (@var{A})\n\
 Compute the matrix square root of the square matrix @var{A}.\n\
 \n\
 Ref: N.J. Higham.  @cite{A New sqrtm for @sc{matlab}}.  Numerical\n\
rename from src/DLD-FUNCTIONS/str2double.cc
rename to src/corefcn/str2double.cc
--- a/src/DLD-FUNCTIONS/str2double.cc
+++ b/src/corefcn/str2double.cc
@@ -34,7 +34,7 @@
 
 #include "Cell.h"
 #include "ov.h"
-#include "defun-dld.h"
+#include "defun.h"
 #include "gripes.h"
 #include "utils.h"
 
@@ -294,7 +294,7 @@
   return val;
 }
 
-DEFUN_DLD (str2double, args, ,
+DEFUN (str2double, args, ,
   "-*- texinfo -*-\n\
 @deftypefn {Built-in Function} {} str2double (@var{s})\n\
 Convert a string to a real or complex number.\n\
rename from src/DLD-FUNCTIONS/strfind.cc
rename to src/corefcn/strfind.cc
--- a/src/DLD-FUNCTIONS/strfind.cc
+++ b/src/corefcn/strfind.cc
@@ -32,7 +32,7 @@
 
 #include "Cell.h"
 #include "ov.h"
-#include "defun-dld.h"
+#include "defun.h"
 #include "unwind-prot.h"
 #include "gripes.h"
 #include "utils.h"
@@ -145,10 +145,10 @@
   return result;
 }
 
-DEFUN_DLD (strfind, args, ,
+DEFUN (strfind, args, ,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {@var{idx} =} strfind (@var{str}, @var{pattern})\n\
-@deftypefnx {Loadable Function} {@var{idx} =} strfind (@var{cellstr}, @var{pattern})\n\
+@deftypefn  {Built-in Function} {@var{idx} =} strfind (@var{str}, @var{pattern})\n\
+@deftypefnx {Built-in Function} {@var{idx} =} strfind (@var{cellstr}, @var{pattern})\n\
 Search for @var{pattern} in the string @var{str} and return the\n\
 starting index of every such occurrence in the vector @var{idx}.\n\
 If there is no such occurrence, or if @var{pattern} is longer\n\
@@ -319,10 +319,10 @@
   return ret;
 }
 
-DEFUN_DLD (strrep, args, ,
+DEFUN (strrep, args, ,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {} strrep (@var{s}, @var{ptn}, @var{rep})\n\
-@deftypefnx {Loadable Function} {} strrep (@var{s}, @var{ptn}, @var{rep}, \"overlaps\", @var{o})\n\
+@deftypefn  {Built-in Function} {} strrep (@var{s}, @var{ptn}, @var{rep})\n\
+@deftypefnx {Built-in Function} {} strrep (@var{s}, @var{ptn}, @var{rep}, \"overlaps\", @var{o})\n\
 Replace all occurrences of the substring @var{ptn} in the string @var{s}\n\
 with the string @var{rep} and return the result.  For example:\n\
 \n\
rename from src/strfns.cc
rename to src/corefcn/strfns.cc
rename from src/DLD-FUNCTIONS/sub2ind.cc
rename to src/corefcn/sub2ind.cc
--- a/src/DLD-FUNCTIONS/sub2ind.cc
+++ b/src/corefcn/sub2ind.cc
@@ -26,7 +26,7 @@
 
 #include "quit.h"
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "gripes.h"
 #include "oct-obj.h"
@@ -61,7 +61,7 @@
   return dv;
 }
 
-DEFUN_DLD (sub2ind, args, ,
+DEFUN (sub2ind, args, ,
   "-*- texinfo -*-\n\
 @deftypefn  {Function File} {@var{ind} =} sub2ind (@var{dims}, @var{i}, @var{j})\n\
 @deftypefnx {Function File} {@var{ind} =} sub2ind (@var{dims}, @var{s1}, @var{s2}, @dots{}, @var{sN})\n\
@@ -167,7 +167,7 @@
 %!error <subscript indices> sub2ind ([10 10], 1, 1.5)
 */
 
-DEFUN_DLD (ind2sub, args, nargout,
+DEFUN (ind2sub, args, nargout,
   "-*- texinfo -*-\n\
 @deftypefn {Function File} {[@var{s1}, @var{s2}, @dots{}, @var{sN}] =} ind2sub (@var{dims}, @var{ind})\n\
 Convert a linear index to subscripts.\n\
rename from src/DLD-FUNCTIONS/svd.cc
rename to src/corefcn/svd.cc
--- a/src/DLD-FUNCTIONS/svd.cc
+++ b/src/corefcn/svd.cc
@@ -29,7 +29,7 @@
 #include "fCmplxSVD.h"
 #include "floatSVD.h"
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "gripes.h"
 #include "oct-obj.h"
@@ -39,11 +39,11 @@
 
 static int Vsvd_driver = SVD::GESVD;
 
-DEFUN_DLD (svd, args, nargout,
+DEFUN (svd, args, nargout,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {@var{s} =} svd (@var{A})\n\
-@deftypefnx {Loadable Function} {[@var{U}, @var{S}, @var{V}] =} svd (@var{A})\n\
-@deftypefnx {Loadable Function} {[@var{U}, @var{S}, @var{V}] =} svd (@var{A}, @var{econ})\n\
+@deftypefn  {Built-in Function} {@var{s} =} svd (@var{A})\n\
+@deftypefnx {Built-in Function} {[@var{U}, @var{S}, @var{V}] =} svd (@var{A})\n\
+@deftypefnx {Built-in Function} {[@var{U}, @var{S}, @var{V}] =} svd (@var{A}, @var{econ})\n\
 @cindex singular value decomposition\n\
 Compute the singular value decomposition of @var{A}\n\
 @tex\n\
@@ -402,11 +402,11 @@
 %!error [u, v] = svd ([1, 2; 3, 4])
 */
 
-DEFUN_DLD (svd_driver, args, nargout,
+DEFUN (svd_driver, args, nargout,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {@var{val} =} svd_driver ()\n\
-@deftypefnx {Loadable Function} {@var{old_val} =} svd_driver (@var{new_val})\n\
-@deftypefnx {Loadable Function} {} svd_driver (@var{new_val}, \"local\")\n\
+@deftypefn  {Built-in Function} {@var{val} =} svd_driver ()\n\
+@deftypefnx {Built-in Function} {@var{old_val} =} svd_driver (@var{new_val})\n\
+@deftypefnx {Built-in Function} {} svd_driver (@var{new_val}, \"local\")\n\
 Query or set the underlying @sc{lapack} driver used by @code{svd}.\n\
 Currently recognized values are \"gesvd\" and \"gesdd\".  The default\n\
 is \"gesvd\".\n\
rename from src/DLD-FUNCTIONS/syl.cc
rename to src/corefcn/syl.cc
--- a/src/DLD-FUNCTIONS/syl.cc
+++ b/src/corefcn/syl.cc
@@ -26,15 +26,15 @@
 #include <config.h>
 #endif
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "gripes.h"
 #include "oct-obj.h"
 #include "utils.h"
 
-DEFUN_DLD (syl, args, nargout,
+DEFUN (syl, args, nargout,
   "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {@var{x} =} syl (@var{A}, @var{B}, @var{C})\n\
+@deftypefn {Built-in Function} {@var{x} =} syl (@var{A}, @var{B}, @var{C})\n\
 Solve the Sylvester equation\n\
 @tex\n\
 $$\n\
rename from src/syscalls.cc
rename to src/corefcn/syscalls.cc
--- a/src/syscalls.cc
+++ b/src/corefcn/syscalls.cc
@@ -936,7 +936,7 @@
 @end table\n\
 \n\
 If the call is successful @var{err} is 0 and @var{msg} is an empty\n\
-string.  If the file does not exist, or some other error occurs, @var{s}\n\
+string.  If the file does not exist, or some other error occurs, @var{info}\n\
 is an empty matrix, @var{err} is @minus{}1, and @var{msg} contains the\n\
 corresponding system error message.\n\
 \n\
@@ -947,8 +947,8 @@
 For example:\n\
 \n\
 @example\n\
-[s, err, msg] = stat (\"/vmlinuz\")\n\
-  @result{} s =\n\
+[info, err, msg] = stat (\"/vmlinuz\")\n\
+  @result{} info =\n\
      @{\n\
        atime = 855399756\n\
        rdev = 0\n\
rename from src/DLD-FUNCTIONS/time.cc
rename to src/corefcn/time.cc
--- a/src/DLD-FUNCTIONS/time.cc
+++ b/src/corefcn/time.cc
@@ -26,7 +26,7 @@
 
 #include <string>
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "oct-map.h"
 #include "oct-time.h"
@@ -101,9 +101,9 @@
   return tm;
 }
 
-DEFUN_DLD (time, args, ,
+DEFUN (time, args, ,
   "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {@var{seconds} =} time ()\n\
+@deftypefn {Built-in Function} {@var{seconds} =} time ()\n\
 Return the current time as the number of seconds since the epoch.  The\n\
 epoch is referenced to 00:00:00 CUT (Coordinated Universal Time) 1 Jan\n\
 1970.  For example, on Monday February 17, 1997 at 07:15:06 CUT, the\n\
@@ -125,9 +125,9 @@
 %!assert (time () > 0)
 */
 
-DEFUN_DLD (gmtime, args, ,
+DEFUN (gmtime, args, ,
   "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {@var{tm_struct} =} gmtime (@var{t})\n\
+@deftypefn {Built-in Function} {@var{tm_struct} =} gmtime (@var{t})\n\
 Given a value returned from @code{time}, or any non-negative integer,\n\
 return a time structure corresponding to CUT (Coordinated Universal Time).\n\
 For example:\n\
@@ -187,9 +187,9 @@
 %!error gmtime (1, 2)
 */
 
-DEFUN_DLD (localtime, args, ,
+DEFUN (localtime, args, ,
   "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {@var{tm_struct} =} localtime (@var{t})\n\
+@deftypefn {Built-in Function} {@var{tm_struct} =} localtime (@var{t})\n\
 Given a value returned from @code{time}, or any non-negative integer,\n\
 return a time structure corresponding to the local time zone.\n\
 \n\
@@ -248,9 +248,9 @@
 %!error localtime (1, 2)
 */
 
-DEFUN_DLD (mktime, args, ,
+DEFUN (mktime, args, ,
   "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {@var{seconds} =} mktime (@var{tm_struct})\n\
+@deftypefn {Built-in Function} {@var{seconds} =} mktime (@var{tm_struct})\n\
 Convert a time structure corresponding to the local time to the number\n\
 of seconds since the epoch.  For example:\n\
 \n\
@@ -302,9 +302,9 @@
 %!error mktime (1, 2, 3)
 */
 
-DEFUN_DLD (strftime, args, ,
+DEFUN (strftime, args, ,
   "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {} strftime (@var{fmt}, @var{tm_struct})\n\
+@deftypefn {Built-in Function} {} strftime (@var{fmt}, @var{tm_struct})\n\
 Format the time structure @var{tm_struct} in a flexible way using the\n\
 format string @var{fmt} that contains @samp{%} substitutions\n\
 similar to those in @code{printf}.  Except where noted, substituted\n\
@@ -497,9 +497,9 @@
 %!error strftime ("foo", localtime (time ()), 1)
 */
 
-DEFUN_DLD (strptime, args, ,
+DEFUN (strptime, args, ,
  "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {[@var{tm_struct}, @var{nchars}] =} strptime (@var{str}, @var{fmt})\n\
+@deftypefn {Built-in Function} {[@var{tm_struct}, @var{nchars}] =} strptime (@var{str}, @var{fmt})\n\
 Convert the string @var{str} to the time structure @var{tm_struct} under\n\
 the control of the format string @var{fmt}.\n\
 \n\
rename from src/DLD-FUNCTIONS/tril.cc
rename to src/corefcn/tril.cc
--- a/src/DLD-FUNCTIONS/tril.cc
+++ b/src/corefcn/tril.cc
@@ -33,7 +33,7 @@
 #include "ov.h"
 #include "Cell.h"
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "oct-obj.h"
 
@@ -339,7 +339,7 @@
   return retval;
 }
 
-DEFUN_DLD (tril, args, ,
+DEFUN (tril, args, ,
   "-*- texinfo -*-\n\
 @deftypefn  {Function File} {} tril (@var{A})\n\
 @deftypefnx {Function File} {} tril (@var{A}, @var{k})\n\
@@ -395,7 +395,7 @@
   return do_trilu ("tril", args);
 }
 
-DEFUN_DLD (triu, args, ,
+DEFUN (triu, args, ,
   "-*- texinfo -*-\n\
 @deftypefn  {Function File} {} triu (@var{A})\n\
 @deftypefnx {Function File} {} triu (@var{A}, @var{k})\n\
rename from src/DLD-FUNCTIONS/typecast.cc
rename to src/corefcn/typecast.cc
--- a/src/DLD-FUNCTIONS/typecast.cc
+++ b/src/corefcn/typecast.cc
@@ -27,7 +27,7 @@
 
 #include "mx-base.h"
 
-#include "defun-dld.h"
+#include "defun.h"
 #include "error.h"
 #include "gripes.h"
 #include "oct-obj.h"
@@ -86,9 +86,9 @@
 }
 
 
-DEFUN_DLD (typecast, args, ,
+DEFUN (typecast, args, ,
   "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {} typecast (@var{x}, @var{class})\n\
+@deftypefn {Built-in Function} {} typecast (@var{x}, @var{class})\n\
 Return a new array @var{y} resulting from interpreting the data of\n\
 @var{x} in memory as data of the numeric class @var{class}.  Both the class\n\
 of @var{x} and @var{class} must be one of the built-in numeric classes:\n\
@@ -271,9 +271,9 @@
     }
 }
 
-DEFUN_DLD (bitpack, args, ,
+DEFUN (bitpack, args, ,
   "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {@var{y} =} bitpack (@var{x}, @var{class})\n\
+@deftypefn {Built-in Function} {@var{y} =} bitpack (@var{x}, @var{class})\n\
 Return a new array @var{y} resulting from interpreting an array\n\
 @var{x} as raw bit patterns for data of the numeric class @var{class}.\n\
 @var{class} must be one of the built-in numeric classes:\n\
@@ -380,9 +380,9 @@
   return retval;
 }
 
-DEFUN_DLD (bitunpack, args, ,
+DEFUN (bitunpack, args, ,
   "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {@var{y} =} bitunpack (@var{x})\n\
+@deftypefn {Built-in Function} {@var{y} =} bitunpack (@var{x})\n\
 Return an array @var{y} corresponding to the raw bit patterns of\n\
 @var{x}.  @var{x} must belong to one of the built-in numeric classes:\n\
 \n\
rename from src/DLD-FUNCTIONS/__delaunayn__.cc
rename to src/dldfcn/__delaunayn__.cc
rename from src/DLD-FUNCTIONS/__dsearchn__.cc
rename to src/dldfcn/__dsearchn__.cc
rename from src/DLD-FUNCTIONS/__fltk_uigetfile__.cc
rename to src/dldfcn/__fltk_uigetfile__.cc
rename from src/DLD-FUNCTIONS/__glpk__.cc
rename to src/dldfcn/__glpk__.cc
rename from src/DLD-FUNCTIONS/__init_fltk__.cc
rename to src/dldfcn/__init_fltk__.cc
rename from src/DLD-FUNCTIONS/__init_gnuplot__.cc
rename to src/dldfcn/__init_gnuplot__.cc
rename from src/DLD-FUNCTIONS/__magick_read__.cc
rename to src/dldfcn/__magick_read__.cc
rename from src/DLD-FUNCTIONS/__voronoi__.cc
rename to src/dldfcn/__voronoi__.cc
rename from src/DLD-FUNCTIONS/amd.cc
rename to src/dldfcn/amd.cc
rename from src/DLD-FUNCTIONS/ccolamd.cc
rename to src/dldfcn/ccolamd.cc
--- a/src/DLD-FUNCTIONS/ccolamd.cc
+++ b/src/dldfcn/ccolamd.cc
@@ -164,53 +164,53 @@
           int nel_User_knobs = User_knobs.length ();
 
           if (nel_User_knobs > 0)
-            knobs [CCOLAMD_LU] = (User_knobs (0) != 0);
+            knobs[CCOLAMD_LU] = (User_knobs(0) != 0);
           if (nel_User_knobs > 1)
-            knobs [CCOLAMD_DENSE_ROW]  = User_knobs (1);
+            knobs[CCOLAMD_DENSE_ROW] = User_knobs(1);
           if (nel_User_knobs > 2)
-            knobs [CCOLAMD_DENSE_COL]  = User_knobs (2);
+            knobs[CCOLAMD_DENSE_COL] = User_knobs(2);
           if (nel_User_knobs > 3)
-            knobs [CCOLAMD_AGGRESSIVE] = (User_knobs (3) != 0);
+            knobs[CCOLAMD_AGGRESSIVE] = (User_knobs(3) != 0);
           if (nel_User_knobs > 4)
-            spumoni = (User_knobs (4) != 0);
+            spumoni = (User_knobs(4) != 0);
 
           // print knob settings if spumoni is set
           if (spumoni)
             {
               octave_stdout << "\nccolamd version " << CCOLAMD_MAIN_VERSION << "."
                             <<  CCOLAMD_SUB_VERSION << ", " << CCOLAMD_DATE
-                            << ":\nknobs(1): " << User_knobs (0) << ", order for ";
-              if ( knobs [CCOLAMD_LU] != 0)
+                            << ":\nknobs(1): " << User_knobs(0) << ", order for ";
+              if (knobs[CCOLAMD_LU] != 0)
                 octave_stdout << "lu (A)\n";
               else
                 octave_stdout << "chol (A'*A)\n";
 
-              if (knobs [CCOLAMD_DENSE_ROW] >= 0)
-                octave_stdout << "knobs(2): " << User_knobs (1)
+              if (knobs[CCOLAMD_DENSE_ROW] >= 0)
+                octave_stdout << "knobs(2): " << User_knobs(1)
                               << ", rows with > max (16,"
-                              << knobs [CCOLAMD_DENSE_ROW] << "*sqrt (size(A,2)))"
+                              << knobs[CCOLAMD_DENSE_ROW] << "*sqrt (size(A,2)))"
                               << " entries removed\n";
               else
-                octave_stdout << "knobs(2): " << User_knobs (1)
+                octave_stdout << "knobs(2): " << User_knobs(1)
                               << ", no dense rows removed\n";
 
-              if (knobs [CCOLAMD_DENSE_COL] >= 0)
-                octave_stdout << "knobs(3): " << User_knobs (2)
+              if (knobs[CCOLAMD_DENSE_COL] >= 0)
+                octave_stdout << "knobs(3): " << User_knobs(2)
                               << ", cols with > max (16,"
-                              << knobs [CCOLAMD_DENSE_COL] << "*sqrt (size(A)))"
+                              << knobs[CCOLAMD_DENSE_COL] << "*sqrt (size(A)))"
                               << " entries removed\n";
               else
-                octave_stdout << "knobs(3): " << User_knobs (2)
+                octave_stdout << "knobs(3): " << User_knobs(2)
                               << ", no dense columns removed\n";
 
-              if (knobs [CCOLAMD_AGGRESSIVE] != 0)
+              if (knobs[CCOLAMD_AGGRESSIVE] != 0)
                 octave_stdout << "knobs(4): " << User_knobs(3)
                               << ", aggressive absorption: yes";
               else
                 octave_stdout << "knobs(4): " << User_knobs(3)
                               << ", aggressive absorption: no";
 
-              octave_stdout << "knobs(5): " << User_knobs (4)
+              octave_stdout << "knobs(5): " << User_knobs(4)
                             << ", statistics and knobs printed\n";
             }
         }
@@ -259,12 +259,12 @@
       // Allocate workspace for ccolamd
       OCTAVE_LOCAL_BUFFER (octave_idx_type, p, n_col+1);
       for (octave_idx_type i = 0; i < n_col+1; i++)
-        p[i] = cidx [i];
+        p[i] = cidx[i];
 
       octave_idx_type Alen = CCOLAMD_NAME (_recommended) (nnz, n_row, n_col);
       OCTAVE_LOCAL_BUFFER (octave_idx_type, A, Alen);
       for (octave_idx_type i = 0; i < nnz; i++)
-        A[i] = ridx [i];
+        A[i] = ridx[i];
 
       OCTAVE_LOCAL_BUFFER (octave_idx_type, stats, CCOLAMD_STATS);
 
@@ -315,7 +315,7 @@
         {
           NDArray out_stats (dim_vector (1, CCOLAMD_STATS));
           for (octave_idx_type i = 0 ; i < CCOLAMD_STATS ; i++)
-            out_stats (i) = stats [i] ;
+            out_stats(i) = stats[i] ;
           retval(1) = out_stats;
 
           // fix stats (5) and (6), for 1-based information on
@@ -419,11 +419,11 @@
           int nel_User_knobs = User_knobs.length ();
 
           if (nel_User_knobs > 0)
-            knobs [CCOLAMD_DENSE_ROW] = User_knobs (0);
+            knobs[CCOLAMD_DENSE_ROW] = User_knobs(0);
           if (nel_User_knobs > 0)
-            knobs [CCOLAMD_AGGRESSIVE] = User_knobs (1);
+            knobs[CCOLAMD_AGGRESSIVE] = User_knobs(1);
           if (nel_User_knobs > 1)
-            spumoni = static_cast<int> (User_knobs (2));
+            spumoni = static_cast<int> (User_knobs(2));
 
           // print knob settings if spumoni is set
           if (spumoni)
@@ -431,16 +431,16 @@
               octave_stdout << "\ncsymamd version " << CCOLAMD_MAIN_VERSION << "."
                             <<  CCOLAMD_SUB_VERSION << ", " << CCOLAMD_DATE << "\n";
 
-              if (knobs [CCOLAMD_DENSE_ROW] >= 0)
-                octave_stdout << "knobs(1): " << User_knobs (0)
+              if (knobs[CCOLAMD_DENSE_ROW] >= 0)
+                octave_stdout << "knobs(1): " << User_knobs(0)
                               << ", rows/cols with > max (16,"
-                              << knobs [CCOLAMD_DENSE_ROW] << "*sqrt (size(A,2)))"
+                              << knobs[CCOLAMD_DENSE_ROW] << "*sqrt (size(A,2)))"
                               << " entries removed\n";
               else
-                octave_stdout << "knobs(1): " << User_knobs (0)
+                octave_stdout << "knobs(1): " << User_knobs(0)
                               << ", no dense rows/cols removed\n";
 
-              if (knobs [CCOLAMD_AGGRESSIVE] != 0)
+              if (knobs[CCOLAMD_AGGRESSIVE] != 0)
                 octave_stdout << "knobs(2): " << User_knobs(1)
                               << ", aggressive absorption: yes";
               else
@@ -448,7 +448,7 @@
                               << ", aggressive absorption: no";
 
 
-              octave_stdout << "knobs(3): " << User_knobs (2)
+              octave_stdout << "knobs(3): " << User_knobs(2)
                             << ", statistics and knobs printed\n";
             }
         }
@@ -543,7 +543,7 @@
         {
           NDArray out_stats (dim_vector (1, CCOLAMD_STATS));
           for (octave_idx_type i = 0 ; i < CCOLAMD_STATS ; i++)
-            out_stats (i) = stats [i] ;
+            out_stats(i) = stats[i] ;
           retval(1) = out_stats;
 
           // fix stats (5) and (6), for 1-based information on
@@ -562,7 +562,7 @@
         {
           NDArray out_stats (dim_vector (1, CCOLAMD_STATS));
           for (octave_idx_type i = 0 ; i < CCOLAMD_STATS ; i++)
-            out_stats (i) = stats [i] ;
+            out_stats(i) = stats[i] ;
           retval(1) = out_stats;
 
           // fix stats (5) and (6), for 1-based information on
rename from src/DLD-FUNCTIONS/chol.cc
rename to src/dldfcn/chol.cc
--- a/src/DLD-FUNCTIONS/chol.cc
+++ b/src/dldfcn/chol.cc
@@ -197,7 +197,7 @@
 
               if (! error_state)
                 {
-                  octave_idx_type info;
+                  octave_idx_type info = nargout;
                   SparseCHOL fact (m, info, natural);
                   if (nargout == 3)
                     {
@@ -225,7 +225,7 @@
 
               if (! error_state)
                 {
-                  octave_idx_type info;
+                  octave_idx_type info = nargout;
                   SparseComplexCHOL fact (m, info, natural);
 
                   if (nargout == 3)
rename from src/DLD-FUNCTIONS/colamd.cc
rename to src/dldfcn/colamd.cc
--- a/src/DLD-FUNCTIONS/colamd.cc
+++ b/src/dldfcn/colamd.cc
@@ -63,28 +63,28 @@
   if (P)
     // If P is present then compute Pinv, the inverse of P
     for (octave_idx_type k = 0 ; k < n ; k++)
-      Pinv [P [k]] = k ;
+      Pinv[P[k]] = k ;
 
   for (octave_idx_type k = 0 ; k < n ; k++)
     {
       // L(k,:) pattern: all nodes reachable in etree from nz in A(0:k-1,k)
-      Parent [k] = n ;                // parent of k is not yet known
-      Flag [k] = k ;                  // mark node k as visited
-      octave_idx_type kk = (P) ? (P [k]) : (k) ;  // kth original, or permuted, column
-      octave_idx_type p2 = cidx [kk+1] ;
-      for (octave_idx_type p = cidx [kk] ; p < p2 ; p++)
+      Parent[k] = n ;                // parent of k is not yet known
+      Flag[k] = k ;                  // mark node k as visited
+      octave_idx_type kk = (P) ? (P[k]) : (k) ;  // kth original, or permuted, column
+      octave_idx_type p2 = cidx[kk+1] ;
+      for (octave_idx_type p = cidx[kk] ; p < p2 ; p++)
         {
           // A (i,k) is nonzero (original or permuted A)
-          octave_idx_type i = (Pinv) ? (Pinv [ridx [p]]) : (ridx [p]) ;
+          octave_idx_type i = (Pinv) ? (Pinv[ridx[p]]) : (ridx[p]) ;
           if (i < k)
             {
               // follow path from i to root of etree, stop at flagged node
-              for ( ; Flag [i] != k ; i = Parent [i])
+              for ( ; Flag[i] != k ; i = Parent[i])
                 {
                   // find parent of i if not yet determined
-                  if (Parent [i] == n)
-                    Parent [i] = k ;
-                  Flag [i] = k ;        // mark i as visited
+                  if (Parent[i] == n)
+                    Parent[i] = k ;
+                  Flag[i] = k ;        // mark i as visited
                 }
             }
         }
@@ -299,11 +299,11 @@
           int nel_User_knobs = User_knobs.length ();
 
           if (nel_User_knobs > 0)
-            knobs [COLAMD_DENSE_ROW] = User_knobs (0);
+            knobs[COLAMD_DENSE_ROW] = User_knobs(0);
           if (nel_User_knobs > 1)
-            knobs [COLAMD_DENSE_COL] = User_knobs (1) ;
+            knobs[COLAMD_DENSE_COL] = User_knobs(1) ;
           if (nel_User_knobs > 2)
-            spumoni = static_cast<int> (User_knobs (2));
+            spumoni = static_cast<int> (User_knobs(2));
 
           // print knob settings if spumoni is set
           if (spumoni)
@@ -312,19 +312,19 @@
               octave_stdout << "\ncolamd version " << COLAMD_MAIN_VERSION << "."
                             <<  COLAMD_SUB_VERSION << ", " << COLAMD_DATE << ":\n";
 
-              if (knobs [COLAMD_DENSE_ROW] >= 0)
+              if (knobs[COLAMD_DENSE_ROW] >= 0)
                 octave_stdout << "knobs(1): " << User_knobs (0)
                               << ", rows with > max (16,"
-                              << knobs [COLAMD_DENSE_ROW] << "*sqrt (size(A,2)))"
+                              << knobs[COLAMD_DENSE_ROW] << "*sqrt (size(A,2)))"
                               << " entries removed\n";
               else
                 octave_stdout << "knobs(1): " << User_knobs (0)
                               << ", only completely dense rows removed\n";
 
-              if (knobs [COLAMD_DENSE_COL] >= 0)
+              if (knobs[COLAMD_DENSE_COL] >= 0)
                 octave_stdout << "knobs(2): " << User_knobs (1)
                               << ", cols with > max (16,"
-                              << knobs [COLAMD_DENSE_COL] << "*sqrt (size(A)))"
+                              << knobs[COLAMD_DENSE_COL] << "*sqrt (size(A)))"
                               << " entries removed\n";
               else
                 octave_stdout << "knobs(2): " << User_knobs (1)
@@ -380,12 +380,12 @@
       // Allocate workspace for colamd
       OCTAVE_LOCAL_BUFFER (octave_idx_type, p, n_col+1);
       for (octave_idx_type i = 0; i < n_col+1; i++)
-        p[i] = cidx [i];
+        p[i] = cidx[i];
 
       octave_idx_type Alen = COLAMD_NAME (_recommended) (nnz, n_row, n_col);
       OCTAVE_LOCAL_BUFFER (octave_idx_type, A, Alen);
       for (octave_idx_type i = 0; i < nnz; i++)
-        A[i] = ridx [i];
+        A[i] = ridx[i];
 
       // Order the columns (destroys A)
       OCTAVE_LOCAL_BUFFER (octave_idx_type, stats, COLAMD_STATS);
@@ -415,7 +415,7 @@
       // return the permutation vector
       NDArray out_perm (dim_vector (1, n_col));
       for (octave_idx_type i = 0; i < n_col; i++)
-        out_perm(i) = p[colbeg [i]] + 1;
+        out_perm(i) = p[colbeg[i]] + 1;
 
       retval(0) = out_perm;
 
@@ -428,7 +428,7 @@
         {
           NDArray out_stats (dim_vector (1, COLAMD_STATS));
           for (octave_idx_type i = 0 ; i < COLAMD_STATS ; i++)
-            out_stats (i) = stats [i] ;
+            out_stats(i) = stats[i] ;
           retval(1) = out_stats;
 
           // fix stats (5) and (6), for 1-based information on
@@ -534,7 +534,7 @@
           int nel_User_knobs = User_knobs.length ();
 
           if (nel_User_knobs > 0)
-            knobs [COLAMD_DENSE_ROW] = User_knobs (COLAMD_DENSE_ROW);
+            knobs[COLAMD_DENSE_ROW] = User_knobs(COLAMD_DENSE_ROW);
           if (nel_User_knobs > 1)
             spumoni = static_cast<int> (User_knobs (1));
         }
@@ -542,7 +542,7 @@
       // print knob settings if spumoni is set
       if (spumoni > 0)
         octave_stdout << "symamd: dense row/col fraction: "
-                      << knobs [COLAMD_DENSE_ROW] << std::endl;
+                      << knobs[COLAMD_DENSE_ROW] << std::endl;
 
       octave_idx_type n_row, n_col;
       octave_idx_type *ridx, *cidx;
@@ -608,7 +608,7 @@
       // return the permutation vector
       NDArray out_perm (dim_vector (1, n_col));
       for (octave_idx_type i = 0; i < n_col; i++)
-        out_perm(i) = perm[post [i]] + 1;
+        out_perm(i) = perm[post[i]] + 1;
 
       retval(0) = out_perm;
 
@@ -621,7 +621,7 @@
         {
           NDArray out_stats (dim_vector (1, COLAMD_STATS));
           for (octave_idx_type i = 0 ; i < COLAMD_STATS ; i++)
-            out_stats (i) = stats [i] ;
+            out_stats(i) = stats[i] ;
           retval(1) = out_stats;
 
           // fix stats (5) and (6), for 1-based information on
rename from src/DLD-FUNCTIONS/config-module.awk
rename to src/dldfcn/config-module.awk
--- a/src/DLD-FUNCTIONS/config-module.awk
+++ b/src/dldfcn/config-module.awk
@@ -5,10 +5,10 @@
   print "## DO NOT EDIT -- generated from module-files by config-module.awk";
   print ""
   print "EXTRA_DIST += \\"
-  print "  DLD-FUNCTIONS/config-module.sh \\"
-  print "  DLD-FUNCTIONS/config-module.awk \\"
-  print "  DLD-FUNCTIONS/module-files \\"
-  print "  DLD-FUNCTIONS/oct-qhull.h"
+  print "  dldfcn/config-module.sh \\"
+  print "  dldfcn/config-module.awk \\"
+  print "  dldfcn/module-files \\"
+  print "  dldfcn/oct-qhull.h"
   print ""
 }
 /^#.*/ { next; }
@@ -20,20 +20,20 @@
   libraries[nfiles] = $4;
 } END {
   sep = " \\\n";
-  print "DLD_FUNCTIONS_SRC = \\";
+  print "DLDFCN_SRC = \\";
   for (i = 1; i <= nfiles; i++) {
     if (i == nfiles)
       sep = "\n";
-    printf ("  DLD-FUNCTIONS/%s%s", files[i], sep);
+    printf ("  dldfcn/%s%s", files[i], sep);
   }
   print "";
 
   sep = " \\\n";
-  print "DLD_FUNCTIONS_LIBS = $(DLD_FUNCTIONS_SRC:.cc=.la)";
+  print "DLDFCN_LIBS = $(DLDFCN_SRC:.cc=.la)";
   print "";
   print "if AMCOND_ENABLE_DYNAMIC_LINKING";
   print "";
-  print "octlib_LTLIBRARIES += $(DLD_FUNCTIONS_LIBS)";
+  print "octlib_LTLIBRARIES += $(DLDFCN_LIBS)";
   print "";
   print "## Use stamp files to avoid problems with checking timestamps";
   print "## of symbolic links";
@@ -41,18 +41,18 @@
   for (i = 1; i <= nfiles; i++) {
     basename = files[i];
     sub (/\.cc$/, "", basename);
-    printf ("DLD-FUNCTIONS/$(am__leading_dot)%s.oct-stamp: DLD-FUNCTIONS/%s.la\n", basename, basename);
+    printf ("dldfcn/$(am__leading_dot)%s.oct-stamp: dldfcn/%s.la\n", basename, basename);
     print "\trm -f $(<:.la=.oct)";
     print "\tla=$(<F) && \\";
     print "\t  of=$(<F:.la=.oct) && \\";
-    print "\t  cd DLD-FUNCTIONS && \\";
+    print "\t  cd dldfcn && \\";
     print "\t  $(LN_S) .libs/`$(SED) -n -e \"s/dlname='\\([^']*\\)'/\\1/p\" < $$la` $$of && \\";
     print "\t  touch $(@F)";
     print "";
   }
   print "else";
   print "";
-  print "noinst_LTLIBRARIES = $(DLD_FUNCTIONS_LIBS)";
+  print "noinst_LTLIBRARIES += $(DLDFCN_LIBS)";
   print "";
   print "endif";
 
@@ -60,18 +60,18 @@
     basename = files[i];
     sub (/\.cc$/, "", basename);
     print "";
-    printf ("DLD_FUNCTIONS_%s_la_SOURCES = DLD-FUNCTIONS/%s\n",
+    printf ("dldfcn_%s_la_SOURCES = dldfcn/%s\n",
 	    basename, files[i]);
     if (cppflags[i])
       {
-        printf ("DLD-FUNCTIONS/%s.df: CPPFLAGS += %s\n",
+        printf ("dldfcn/%s.df: CPPFLAGS += %s\n",
                 basename, cppflags[i]);
-        printf ("DLD_FUNCTIONS_%s_la_CPPFLAGS = $(AM_CPPFLAGS) %s\n",
+        printf ("dldfcn_%s_la_CPPFLAGS = $(AM_CPPFLAGS) %s\n",
                 basename, cppflags[i]);
       }
-    printf ("DLD_FUNCTIONS_%s_la_LDFLAGS = -avoid-version -module $(NO_UNDEFINED_LDFLAG) %s $(OCT_LINK_OPTS)\n",
+    printf ("dldfcn_%s_la_LDFLAGS = -avoid-version -module $(NO_UNDEFINED_LDFLAG) %s $(OCT_LINK_OPTS)\n",
             basename, ldflags[i]);
-    printf ("DLD_FUNCTIONS_%s_la_LIBADD = $(DLD_LIBOCTINTERP_LIBADD) ../liboctave/liboctave.la ../libcruft/libcruft.la %s $(OCT_LINK_DEPS)\n",
+    printf ("dldfcn_%s_la_LIBADD = $(DLD_LIBOCTINTERP_LIBADD) ../liboctave/liboctave.la ../libcruft/libcruft.la %s $(OCT_LINK_DEPS)\n",
             basename, libraries[i]);
   }
 }
rename from src/DLD-FUNCTIONS/config-module.sh
rename to src/dldfcn/config-module.sh
--- a/src/DLD-FUNCTIONS/config-module.sh
+++ b/src/dldfcn/config-module.sh
@@ -12,7 +12,7 @@
 
 move_if_change="$top_srcdir/build-aux/move-if-change"
 
-dld_dir=$top_srcdir/src/DLD-FUNCTIONS
+dld_dir=$top_srcdir/src/dldfcn
 
 $AWK -f $dld_dir/config-module.awk < $dld_dir/module-files > $dld_dir/module.mk-t
 
rename from src/DLD-FUNCTIONS/convhulln.cc
rename to src/dldfcn/convhulln.cc
rename from src/DLD-FUNCTIONS/dmperm.cc
rename to src/dldfcn/dmperm.cc
rename from src/DLD-FUNCTIONS/eigs.cc
rename to src/dldfcn/eigs.cc
--- a/src/DLD-FUNCTIONS/eigs.cc
+++ b/src/dldfcn/eigs.cc
@@ -258,6 +258,7 @@
 default is @code{1:@var{n}}.\n\
 \n\
 @end table\n\
+\n\
 It is also possible to represent @var{A} by a function denoted @var{af}.\n\
 @var{af} must be followed by a scalar argument @var{n} defining the length\n\
 of the vector argument accepted by @var{af}.  @var{af} can be\n\
rename from src/DLD-FUNCTIONS/fftw.cc
rename to src/dldfcn/fftw.cc
rename from src/DLD-FUNCTIONS/module-files
rename to src/dldfcn/module-files
--- a/src/DLD-FUNCTIONS/module-files
+++ b/src/dldfcn/module-files
@@ -1,83 +1,22 @@
 # FILE|CPPFLAGS|LDFLAGS|LIBRARIES
-__contourc__.cc
 __delaunayn__.cc|$(QHULL_CPPFLAGS)|$(QHULL_LDFLAGS)|$(QHULL_LIBS)
-__dispatch__.cc
 __dsearchn__.cc
 __fltk_uigetfile__.cc|$(GRAPHICS_CFLAGS) $(FT2_CPPFLAGS)|$(GRAPHICS_LDFLAGS) $(FT2_LDFLAGS)|$(GRAPHICS_LIBS) $(FT2_LIBS)
 __glpk__.cc|$(GLPK_CPPFLAGS)|$(GLPK_LDFLAGS)|$(GLPK_LIBS)
 __init_fltk__.cc|$(GRAPHICS_CFLAGS) $(FT2_CPPFLAGS)|$(GRAPHICS_LDFLAGS) $(FT2_LDFLAGS)|$(GRAPHICS_LIBS) $(FT2_LIBS)
 __init_gnuplot__.cc
-__lin_interpn__.cc
 __magick_read__.cc|$(MAGICK_CPPFLAGS)|$(MAGICK_LDFLAGS)|$(MAGICK_LIBS)
-__pchip_deriv__.cc
-__qp__.cc
 __voronoi__.cc|$(QHULL_CPPFLAGS)|$(QHULL_LDFLAGS)|$(QHULL_LIBS)
 amd.cc|$(SPARSE_XCPPFLAGS)|$(SPARSE_XLDFLAGS)|$(SPARSE_XLIBS)
-balance.cc
-besselj.cc
-betainc.cc
-bsxfun.cc
 ccolamd.cc|$(SPARSE_XCPPFLAGS)|$(SPARSE_XLDFLAGS)|$(SPARSE_XLIBS)
-cellfun.cc
-chol.cc|$(QRUPDATE_CPPFLAGS) $(SPARSE_XCPPFLAGS)|$(QRUPDATE_LDFLAGS) $(SPARSE_XLDFLAGS)|$(QRUPDATE_LIBS) $(SPARSE_XLIBS)
+chol.cc
 colamd.cc|$(SPARSE_XCPPFLAGS)|$(SPARSE_XLDFLAGS)|$(SPARSE_XLIBS)
-colloc.cc
-conv2.cc
 convhulln.cc|$(QHULL_CPPFLAGS)|$(QHULL_LDFLAGS)|$(QHULL_LIBS)
-daspk.cc
-dasrt.cc
-dassl.cc
-det.cc
-dlmread.cc
 dmperm.cc|$(SPARSE_XCPPFLAGS)|$(SPARSE_XLDFLAGS)|$(SPARSE_XLIBS)
-dot.cc
-eig.cc
 eigs.cc|$(ARPACK_CPPFLAGS) $(SPARSE_XCPPFLAGS)|$(ARPACK_LDFLAGS) $(SPARSE_XLDFLAGS)|$(ARPACK_LIBS) $(SPARSE_XLIBS) $(LAPACK_LIBS) $(BLAS_LIBS)
-fft.cc|$(FFTW_XCPPFLAGS)|$(FFTW_XLDFLAGS)|$(FFTW_XLIBS)
-fft2.cc|$(FFTW_XCPPFLAGS)|$(FFTW_XLDFLAGS)|$(FFTW_XLIBS)
-fftn.cc|$(FFTW_XCPPFLAGS)|$(FFTW_XLDFLAGS)|$(FFTW_XLIBS)
 fftw.cc|$(FFTW_XCPPFLAGS)|$(FFTW_XLDFLAGS)|$(FFTW_XLIBS)
-filter.cc
-find.cc
-gammainc.cc
-gcd.cc
-getgrent.cc
-getpwent.cc
-getrusage.cc
-givens.cc
-hess.cc
-hex2num.cc
-inv.cc
-kron.cc
-lookup.cc
-lsode.cc
-lu.cc
-luinc.cc
-matrix_type.cc
-max.cc
-md5sum.cc
-mgorth.cc
-nproc.cc
-pinv.cc
 qr.cc|$(QRUPDATE_CPPFLAGS) $(SPARSE_XCPPFLAGS)|$(QRUPDATE_LDFLAGS) $(SPARSE_XLDFLAGS)|$(QRUPDATE_LIBS) $(SPARSE_XLIBS)
-quad.cc
-quadcc.cc
-qz.cc|||$(LAPACK_LIBS) $(BLAS_LIBS)
-rand.cc
-rcond.cc
-regexp.cc|$(REGEX_CPPFLAGS)|$(REGEX_LDFLAGS)|$(REGEX_LIBS)
-schur.cc
-spparms.cc
-sqrtm.cc
-strfind.cc
-str2double.cc
-sub2ind.cc
-svd.cc
-syl.cc
 symbfact.cc|$(SPARSE_XCPPFLAGS)|$(SPARSE_XLDFLAGS)|$(SPARSE_XLIBS)
 symrcm.cc|$(SPARSE_XCPPFLAGS)|$(SPARSE_XLDFLAGS)|$(SPARSE_XLIBS)
-time.cc
-tril.cc
 tsearch.cc
-typecast.cc
 urlwrite.cc|$(CURL_CPPFLAGS)|$(CURL_LDFLAGS)|$(CURL_LIBS)
rename from src/DLD-FUNCTIONS/oct-qhull.h
rename to src/dldfcn/oct-qhull.h
rename from src/DLD-FUNCTIONS/qr.cc
rename to src/dldfcn/qr.cc
rename from src/DLD-FUNCTIONS/symbfact.cc
rename to src/dldfcn/symbfact.cc
--- a/src/DLD-FUNCTIONS/symbfact.cc
+++ b/src/dldfcn/symbfact.cc
@@ -270,7 +270,7 @@
           // count the total number of entries in L
           octave_idx_type lnz = 0 ;
           for (octave_idx_type j = 0 ; j < n ; j++)
-            lnz += ColCount [j] ;
+            lnz += ColCount[j];
 
 
           // allocate the output matrix L (pattern-only)
@@ -281,7 +281,7 @@
           for (octave_idx_type j = 0 ; j < n ; j++)
             {
               L.xcidx(j) = lnz;
-              lnz += ColCount [j];
+              lnz += ColCount[j];
             }
           L.xcidx(n) = lnz;
 
@@ -302,11 +302,11 @@
             {
               // get the kth row of L and store in the columns of L
               CHOLMOD_NAME (row_subtree) (A1, A2, k, Parent, R, cm) ;
-              for (octave_idx_type p = 0 ; p < Rp [1] ; p++)
-                L.xridx (W [Ri [p]]++) = k ;
+              for (octave_idx_type p = 0 ; p < Rp[1] ; p++)
+                L.xridx (W[Ri[p]]++) = k ;
 
               // add the diagonal entry
-              L.xridx (W [k]++) = k ;
+              L.xridx (W[k]++) = k ;
             }
 
           // free workspace
rename from src/DLD-FUNCTIONS/symrcm.cc
rename to src/dldfcn/symrcm.cc
--- a/src/DLD-FUNCTIONS/symrcm.cc
+++ b/src/dldfcn/symrcm.cc
@@ -405,7 +405,7 @@
     for (octave_idx_type k = cidx[j]; k < cidx[j + 1]; k++)
       {
         OCTAVE_QUIT;
-        octave_idx_type q = w [ridx[k]]++;
+        octave_idx_type q = w[ridx[k]]++;
         ridx2[q] = j;
       }
 }
rename from src/DLD-FUNCTIONS/tsearch.cc
rename to src/dldfcn/tsearch.cc
rename from src/DLD-FUNCTIONS/urlwrite.cc
rename to src/dldfcn/urlwrite.cc
--- a/src/find-defun-files.sh
+++ b/src/find-defun-files.sh
@@ -21,6 +21,6 @@
     file="$srcdir/$arg"
   fi
   if [ "`$EGREP -l "$DEFUN_PATTERN" $file`" ]; then
-    echo "$file" | $SED 's,.*/,,; s/\.cc$/.df/; s/\.ll$/.df/; s/\.yy$/.df/';
+    echo "$file" | $SED "s,\\$srcdir/,," | $SED 's/\.cc$/.df/; s/\.ll$/.df/; s/\.yy$/.df/';
   fi
 done
rename from src/Cell.cc
rename to src/interp-core/Cell.cc
rename from src/Cell.h
rename to src/interp-core/Cell.h
rename from src/c-file-ptr-stream.cc
rename to src/interp-core/c-file-ptr-stream.cc
rename from src/c-file-ptr-stream.h
rename to src/interp-core/c-file-ptr-stream.h
rename from src/comment-list.cc
rename to src/interp-core/comment-list.cc
rename from src/comment-list.h
rename to src/interp-core/comment-list.h
rename from src/cutils.c
rename to src/interp-core/cutils.c
rename from src/cutils.h
rename to src/interp-core/cutils.h
rename from src/defun-dld.h
rename to src/interp-core/defun-dld.h
rename from src/defun-int.h
rename to src/interp-core/defun-int.h
--- a/src/defun-int.h
+++ b/src/interp-core/defun-int.h
@@ -39,7 +39,7 @@
 
 extern OCTINTERP_API void
 install_builtin_function (octave_builtin::fcn f, const std::string& name,
-                          const std::string& doc,
+                          const std::string& file, const std::string& doc,
                           bool can_hide_function = true);
 
 extern OCTINTERP_API void
rename from src/display.cc
rename to src/interp-core/display.cc
--- a/src/display.cc
+++ b/src/interp-core/display.cc
@@ -79,6 +79,8 @@
 
           rx = wd * 25.4 / wd_mm;
           ry = ht * 25.4 / ht_mm;
+
+          dpy_avail = true;
         }
       else
         warning ("no graphical display found");
@@ -109,6 +111,8 @@
 
           rx = wd * 25.4 / wd_mm;
           ry = ht * 25.4 / ht_mm;
+
+          dpy_avail = true;
         }
       else
         warning ("no graphical display found");
@@ -144,6 +148,8 @@
                 warning ("X11 display has no default screen");
 
               XCloseDisplay (display);
+
+              dpy_avail = true;
             }
           else
             warning ("unable to open X11 DISPLAY");
rename from src/display.h
rename to src/interp-core/display.h
--- a/src/display.h
+++ b/src/interp-core/display.h
@@ -30,7 +30,7 @@
 protected:
 
   display_info (bool query = true)
-    : ht (1), wd (1), dp (0), rx (72), ry (72)
+    : ht (1), wd (1), dp (0), rx (72), ry (72), dpy_avail (false)
   {
     init (query);
   }
@@ -62,6 +62,11 @@
     return instance_ok () ? instance->do_y_dpi () : 0;
   }
 
+  static bool display_available (void)
+  {
+    return instance_ok () ? instance->do_display_available () : false;
+  }
+
   // To disable querying the window system for defaults, this function
   // must be called before any other display_info function.
   static void no_window_system (void)
@@ -84,6 +89,8 @@
   double rx;
   double ry;
 
+  bool dpy_avail;
+
   int do_height (void) const { return ht; }
   int do_width (void) const { return wd; }
   int do_depth (void) const { return dp; }
@@ -91,6 +98,8 @@
   double do_x_dpi (void) const { return rx; }
   double do_y_dpi (void) const { return ry; }
 
+  bool do_display_available (void) const { return dpy_avail; }
+
   void init (bool query = true);
 
   static bool instance_ok (bool query = true);
rename from src/dynamic-ld.cc
rename to src/interp-core/dynamic-ld.cc
rename from src/dynamic-ld.h
rename to src/interp-core/dynamic-ld.h
rename from src/gl-render.cc
rename to src/interp-core/gl-render.cc
--- a/src/gl-render.cc
+++ b/src/interp-core/gl-render.cc
@@ -2488,6 +2488,10 @@
   Matrix x = props.get_xdata ().matrix_value ();
   Matrix y = props.get_ydata ().matrix_value ();
 
+  // Someone wants us to draw an empty image? No way.
+  if (x.is_empty () || y.is_empty ())
+    return;
+
   if (w > 1 && x(1) == x(0))
     x(1) = x(1) + (w-1);
 
rename from src/gl-render.h
rename to src/interp-core/gl-render.h
rename from src/gl2ps-renderer.cc
rename to src/interp-core/gl2ps-renderer.cc
rename from src/gl2ps-renderer.h
rename to src/interp-core/gl2ps-renderer.h
rename from src/gl2ps.c
rename to src/interp-core/gl2ps.c
rename from src/gl2ps.h
rename to src/interp-core/gl2ps.h
rename from src/gripes.cc
rename to src/interp-core/gripes.cc
rename from src/gripes.h
rename to src/interp-core/gripes.h
new file mode 100644
--- /dev/null
+++ b/src/interp-core/jit-ir.cc
@@ -0,0 +1,714 @@
+/*
+
+Copyright (C) 2012 Max Brister <max@2bass.com>
+
+This file is part of Octave.
+
+Octave is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3 of the License, or (at your
+option) any later version.
+
+Octave is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with Octave; see the file COPYING.  If not, see
+<http://www.gnu.org/licenses/>.
+
+*/
+
+// defines required by llvm
+#define __STDC_LIMIT_MACROS
+#define __STDC_CONSTANT_MACROS
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_LLVM
+
+#include "jit-ir.h"
+
+#include <llvm/BasicBlock.h>
+#include <llvm/Instructions.h>
+
+#include "error.h"
+
+// -------------------- jit_factory --------------------
+jit_factory::~jit_factory (void)
+{
+  for (value_list::iterator iter = all_values.begin ();
+       iter != all_values.end (); ++iter)
+    delete *iter;
+}
+
+void
+jit_factory::track_value (jit_value *value)
+{
+  if (value->type ())
+    mconstants.push_back (value);
+  all_values.push_back (value);
+}
+
+// -------------------- jit_block_list --------------------
+void
+jit_block_list::insert_after (iterator iter, jit_block *ablock)
+{
+  ++iter;
+  insert_before (iter, ablock);
+}
+
+void
+jit_block_list::insert_after (jit_block *loc, jit_block *ablock)
+{
+  insert_after (loc->location (), ablock);
+}
+
+void
+jit_block_list::insert_before (iterator iter, jit_block *ablock)
+{
+  iter = mlist.insert (iter, ablock);
+  ablock->stash_location (iter);
+}
+
+void
+jit_block_list::insert_before (jit_block *loc, jit_block *ablock)
+{
+  insert_before (loc->location (), ablock);
+}
+
+void
+jit_block_list::push_back (jit_block *b)
+{
+  mlist.push_back (b);
+  iterator iter = mlist.end ();
+  b->stash_location (--iter);
+}
+
+// -------------------- jit_use --------------------
+jit_block *
+jit_use::user_parent (void) const
+{
+  return muser->parent ();
+}
+
+// -------------------- jit_value --------------------
+jit_value::~jit_value (void)
+{}
+
+jit_block *
+jit_value::first_use_block (void)
+{
+  jit_use *use = first_use ();
+  while (use)
+    {
+      if (! isa<jit_error_check> (use->user ()))
+        return use->user_parent ();
+
+      use = use->next ();
+    }
+
+  return 0;
+}
+
+void
+jit_value::replace_with (jit_value *value)
+{
+  while (first_use ())
+    {
+      jit_instruction *user = first_use ()->user ();
+      size_t idx = first_use ()->index ();
+      user->stash_argument (idx, value);
+    }
+}
+
+#define JIT_METH(clname)                                \
+  void                                                  \
+  jit_ ## clname::accept (jit_ir_walker& walker)        \
+  {                                                     \
+    walker.visit (*this);                               \
+  }
+
+JIT_VISIT_IR_NOTEMPLATE
+#undef JIT_METH
+
+std::ostream&
+operator<< (std::ostream& os, const jit_value& value)
+{
+  return value.short_print (os);
+}
+
+std::ostream&
+jit_print (std::ostream& os, jit_value *avalue)
+{
+  if (avalue)
+    return avalue->print (os);
+  return os << "NULL";
+}
+
+// -------------------- jit_instruction --------------------
+void
+jit_instruction::remove (void)
+{
+  if (mparent)
+    mparent->remove (mlocation);
+  resize_arguments (0);
+}
+
+llvm::BasicBlock *
+jit_instruction::parent_llvm (void) const
+{
+  return mparent->to_llvm ();
+}
+
+std::ostream&
+jit_instruction::short_print (std::ostream& os) const
+{
+  if (type ())
+    jit_print (os, type ()) << ": ";
+  return os << "#" << mid;
+}
+
+void
+jit_instruction::do_construct_ssa (size_t start, size_t end)
+{
+  for (size_t i = start; i < end; ++i)
+    {
+      jit_value *arg = argument (i);
+      jit_variable *var = dynamic_cast<jit_variable *> (arg);
+      if (var && var->has_top ())
+        stash_argument (i, var->top ());
+    }
+}
+
+// -------------------- jit_block --------------------
+void
+jit_block::replace_with (jit_value *value)
+{
+  assert (isa<jit_block> (value));
+  jit_block *block = static_cast<jit_block *> (value);
+
+  jit_value::replace_with (block);
+
+  while (ILIST_T::first_use ())
+    {
+      jit_phi_incomming *incomming = ILIST_T::first_use ();
+      incomming->stash_value (block);
+    }
+}
+
+void
+jit_block::replace_in_phi (jit_block *ablock, jit_block *with)
+{
+  jit_phi_incomming *node = ILIST_T::first_use ();
+  while (node)
+    {
+      jit_phi_incomming *prev = node;
+      node = node->next ();
+
+      if (prev->user_parent () == ablock)
+        prev->stash_value (with);
+    }
+}
+
+jit_block *
+jit_block::maybe_merge ()
+{
+  if (successor_count () == 1 && successor (0) != this
+      && (successor (0)->use_count () == 1 || instructions.size () == 1))
+    {
+      jit_block *to_merge = successor (0);
+      merge (*to_merge);
+      return to_merge;
+    }
+
+  return 0;
+}
+
+void
+jit_block::merge (jit_block& block)
+{
+  // the merge block will contain a new terminator
+  jit_terminator *old_term = terminator ();
+  if (old_term)
+    old_term->remove ();
+
+  bool was_empty = end () == begin ();
+  iterator merge_begin = end ();
+  if (! was_empty)
+    --merge_begin;
+
+  instructions.splice (end (), block.instructions);
+  if (was_empty)
+    merge_begin = begin ();
+  else
+    ++merge_begin;
+
+  // now merge_begin points to the start of the new instructions, we must
+  // update their parent information
+  for (iterator iter = merge_begin; iter != end (); ++iter)
+    {
+      jit_instruction *instr = *iter;
+      instr->stash_parent (this, iter);
+    }
+
+  block.replace_with (this);
+}
+
+jit_instruction *
+jit_block::prepend (jit_instruction *instr)
+{
+  instructions.push_front (instr);
+  instr->stash_parent (this, instructions.begin ());
+  return instr;
+}
+
+jit_instruction *
+jit_block::prepend_after_phi (jit_instruction *instr)
+{
+  // FIXME: Make this O(1)
+  for (iterator iter = begin (); iter != end (); ++iter)
+    {
+      jit_instruction *temp = *iter;
+      if (! isa<jit_phi> (temp))
+        {
+          insert_before (iter, instr);
+          return instr;
+        }
+    }
+
+  return append (instr);
+}
+
+void
+jit_block::internal_append (jit_instruction *instr)
+{
+  instructions.push_back (instr);
+  instr->stash_parent (this, --instructions.end ());
+}
+
+jit_instruction *
+jit_block::insert_before (iterator loc, jit_instruction *instr)
+{
+  iterator iloc = instructions.insert (loc, instr);
+  instr->stash_parent (this, iloc);
+  return instr;
+}
+
+jit_instruction *
+jit_block::insert_after (iterator loc, jit_instruction *instr)
+{
+  ++loc;
+  iterator iloc = instructions.insert (loc, instr);
+  instr->stash_parent (this, iloc);
+  return instr;
+}
+
+jit_terminator *
+jit_block::terminator (void) const
+{
+  assert (this);
+  if (instructions.empty ())
+    return 0;
+
+  jit_instruction *last = instructions.back ();
+  return dynamic_cast<jit_terminator *> (last);
+}
+
+bool
+jit_block::branch_alive (jit_block *asucc) const
+{
+  return terminator ()->alive (asucc);
+}
+
+jit_block *
+jit_block::successor (size_t i) const
+{
+  jit_terminator *term = terminator ();
+  return term->successor (i);
+}
+
+size_t
+jit_block::successor_count (void) const
+{
+  jit_terminator *term = terminator ();
+  return term ? term->successor_count () : 0;
+}
+
+llvm::BasicBlock *
+jit_block::to_llvm (void) const
+{
+  return llvm::cast<llvm::BasicBlock> (llvm_value);
+}
+
+std::ostream&
+jit_block::print_dom (std::ostream& os) const
+{
+  short_print (os);
+  os << ":\n";
+  os << "  mid: " << mid << std::endl;
+  os << "  predecessors: ";
+  for (jit_use *use = first_use (); use; use = use->next ())
+    os << *use->user_parent () << " ";
+  os << std::endl;
+
+  os << "  successors: ";
+  for (size_t i = 0; i < successor_count (); ++i)
+    os << *successor (i) << " ";
+  os << std::endl;
+
+  os << "  idom: ";
+  if (idom)
+    os << *idom;
+  else
+    os << "NULL";
+  os << std::endl;
+  os << "  df: ";
+  for (df_iterator iter = df_begin (); iter != df_end (); ++iter)
+    os << **iter << " ";
+  os << std::endl;
+
+  os << "  dom_succ: ";
+  for (size_t i = 0; i < dom_succ.size (); ++i)
+    os << *dom_succ[i] << " ";
+
+  return os << std::endl;
+}
+
+void
+jit_block::compute_df (size_t avisit_count)
+{
+  if (visited (avisit_count))
+    return;
+
+  if (use_count () >= 2)
+    {
+      for (jit_use *use = first_use (); use; use = use->next ())
+        {
+          jit_block *runner = use->user_parent ();
+          while (runner != idom)
+            {
+              runner->mdf.insert (this);
+              runner = runner->idom;
+            }
+        }
+    }
+
+  for (size_t i = 0; i < successor_count (); ++i)
+    successor (i)->compute_df (avisit_count);
+}
+
+bool
+jit_block::update_idom (size_t avisit_count)
+{
+  if (visited (avisit_count) || ! use_count ())
+    return false;
+
+  bool changed = false;
+  for (jit_use *use = first_use (); use; use = use->next ())
+    {
+      jit_block *pred = use->user_parent ();
+      changed = pred->update_idom (avisit_count) || changed;
+    }
+
+  jit_use *use = first_use ();
+  jit_block *new_idom = use->user_parent ();
+  use = use->next ();
+
+  for (; use; use = use->next ())
+    {
+      jit_block *pred = use->user_parent ();
+      jit_block *pidom = pred->idom;
+      if (pidom)
+        new_idom = idom_intersect (pidom, new_idom);
+    }
+
+  if (idom != new_idom)
+    {
+      idom = new_idom;
+      return true;
+    }
+
+  return changed;
+}
+
+void
+jit_block::pop_all (void)
+{
+  for (iterator iter = begin (); iter != end (); ++iter)
+    {
+      jit_instruction *instr = *iter;
+      instr->pop_variable ();
+    }
+}
+
+jit_block *
+jit_block::maybe_split (jit_factory& factory, jit_block_list& blocks,
+                        jit_block *asuccessor)
+{
+  if (successor_count () > 1)
+    {
+      jit_terminator *term = terminator ();
+      size_t idx = term->successor_index (asuccessor);
+      jit_block *split = factory.create<jit_block> ("phi_split", mvisit_count);
+
+      // place after this to ensure define before use in the blocks list
+      blocks.insert_after (this, split);
+
+      term->stash_argument (idx, split);
+      jit_branch *br = split->append (factory.create<jit_branch> (asuccessor));
+      replace_in_phi (asuccessor, split);
+
+      if (alive ())
+        {
+          split->mark_alive ();
+          br->infer ();
+        }
+
+      return split;
+    }
+
+  return this;
+}
+
+void
+jit_block::create_dom_tree (size_t avisit_count)
+{
+  if (visited (avisit_count))
+    return;
+
+  if (idom != this)
+    idom->dom_succ.push_back (this);
+
+  for (size_t i = 0; i < successor_count (); ++i)
+    successor (i)->create_dom_tree (avisit_count);
+}
+
+jit_block *
+jit_block::idom_intersect (jit_block *i, jit_block *j)
+{
+  while (i && j && i != j)
+    {
+      while (i && i->id () > j->id ())
+        i = i->idom;
+
+      while (i && j && j->id () > i->id ())
+        j = j->idom;
+    }
+
+  return i ? i : j;
+}
+
+// -------------------- jit_phi_incomming --------------------
+
+jit_block *
+jit_phi_incomming::user_parent (void) const
+{ return muser->parent (); }
+
+// -------------------- jit_phi --------------------
+bool
+jit_phi::prune (void)
+{
+  jit_block *p = parent ();
+  size_t new_idx = 0;
+  jit_value *unique = argument (1);
+
+  for (size_t i = 0; i < argument_count (); ++i)
+    {
+      jit_block *inc = incomming (i);
+      if (inc->branch_alive (p))
+        {
+          if (unique != argument (i))
+            unique = 0;
+
+          if (new_idx != i)
+            {
+              stash_argument (new_idx, argument (i));
+              mincomming[new_idx].stash_value (inc);
+            }
+
+          ++new_idx;
+        }
+    }
+
+  if (new_idx != argument_count ())
+    {
+      resize_arguments (new_idx);
+      mincomming.resize (new_idx);
+    }
+
+  assert (argument_count () > 0);
+  if (unique)
+    {
+      replace_with (unique);
+      return true;
+    }
+
+  return false;
+}
+
+bool
+jit_phi::infer (void)
+{
+  jit_block *p = parent ();
+  if (! p->alive ())
+    return false;
+
+  jit_type *infered = 0;
+  for (size_t i = 0; i < argument_count (); ++i)
+    {
+      jit_block *inc = incomming (i);
+      if (inc->branch_alive (p))
+        infered = jit_typeinfo::join (infered, argument_type (i));
+    }
+
+  if (infered != type ())
+    {
+      stash_type (infered);
+      return true;
+    }
+
+  return false;
+}
+
+llvm::PHINode *
+jit_phi::to_llvm (void) const
+{
+  return llvm::cast<llvm::PHINode> (jit_value::to_llvm ());
+}
+
+// -------------------- jit_terminator --------------------
+size_t
+jit_terminator::successor_index (const jit_block *asuccessor) const
+{
+  size_t scount = successor_count ();
+  for (size_t i = 0; i < scount; ++i)
+    if (successor (i) == asuccessor)
+      return i;
+
+  panic_impossible ();
+}
+
+bool
+jit_terminator::infer (void)
+{
+  if (! parent ()->alive ())
+    return false;
+
+  bool changed = false;
+  for (size_t i = 0; i < malive.size (); ++i)
+    if (! malive[i] && check_alive (i))
+      {
+        changed = true;
+        malive[i] = true;
+        successor (i)->mark_alive ();
+      }
+
+  return changed;
+}
+
+llvm::TerminatorInst *
+jit_terminator::to_llvm (void) const
+{
+  return llvm::cast<llvm::TerminatorInst> (jit_value::to_llvm ());
+}
+
+// -------------------- jit_call --------------------
+bool
+jit_call::infer (void)
+{
+  // FIXME: explain algorithm
+  for (size_t i = 0; i < argument_count (); ++i)
+    {
+      already_infered[i] = argument_type (i);
+      if (! already_infered[i])
+        return false;
+    }
+
+  jit_type *infered = moperation.result (already_infered);
+  if (! infered && use_count ())
+    {
+      std::stringstream ss;
+      ss << "Missing overload in type inference for ";
+      print (ss, 0);
+      throw jit_fail_exception (ss.str ());
+    }
+
+  if (infered != type ())
+    {
+      stash_type (infered);
+      return true;
+    }
+
+  return false;
+}
+
+// -------------------- jit_magic_end --------------------
+jit_magic_end::context::context (jit_factory& factory, jit_value *avalue,
+                                 size_t aindex, size_t acount)
+  : value (avalue), index (factory.create<jit_const_index> (aindex)),
+    count (factory.create<jit_const_index> (acount))
+{}
+
+jit_magic_end::jit_magic_end (const std::vector<context>& full_context)
+  : contexts (full_context)
+{
+  resize_arguments (contexts.size ());
+
+  size_t i;
+  std::vector<context>::const_iterator iter;
+  for (iter = contexts.begin (), i = 0; iter != contexts.end (); ++iter, ++i)
+    stash_argument (i, iter->value);
+}
+
+jit_magic_end::context
+jit_magic_end::resolve_context (void) const
+{
+  size_t idx;
+  for (idx = 0; idx < contexts.size (); ++idx)
+    {
+      jit_type *ctx_type = contexts[idx].value->type ();
+      if (! ctx_type || ctx_type->skip_paren ())
+        break;
+    }
+
+  if (idx >= contexts.size ())
+    idx = 0;
+
+  context ret = contexts[idx];
+  ret.value = argument (idx);
+  return ret;
+}
+
+bool
+jit_magic_end::infer (void)
+{
+  jit_type *new_type = overload ().result ();
+  if (new_type != type ())
+    {
+      stash_type (new_type);
+      return true;
+    }
+
+  return false;
+}
+
+std::ostream&
+jit_magic_end::print (std::ostream& os, size_t indent) const
+{
+  context ctx = resolve_context ();
+  short_print (print_indent (os, indent)) << " (" << *ctx.value << ", ";
+  return os << *ctx.index << ", " << *ctx.count << ")";
+}
+
+const jit_function&
+jit_magic_end::overload () const
+{
+  const context& ctx = resolve_context ();
+  return jit_typeinfo::end (ctx.value, ctx.index, ctx.count);
+}
+
+#endif
new file mode 100644
--- /dev/null
+++ b/src/interp-core/jit-ir.h
@@ -0,0 +1,1382 @@
+/*
+
+Copyright (C) 2012 Max Brister <max@2bass.com>
+
+This file is part of Octave.
+
+Octave is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3 of the License, or (at your
+option) any later version.
+
+Octave is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with Octave; see the file COPYING.  If not, see
+<http://www.gnu.org/licenses/>.
+
+*/
+
+#if !defined (octave_jit_ir_h)
+#define octave_jit_ir_h 1
+
+#ifdef HAVE_LLVM
+
+#include <list>
+#include <stack>
+#include <set>
+
+#include "jit-typeinfo.h"
+
+// The low level octave jit ir
+// this ir is close to llvm, but contains information for doing type inference.
+// We convert the octave parse tree to this IR directly.
+
+#define JIT_VISIT_IR_NOTEMPLATE                 \
+  JIT_METH(block);                              \
+  JIT_METH(branch);                             \
+  JIT_METH(cond_branch);                        \
+  JIT_METH(call);                               \
+  JIT_METH(extract_argument);                   \
+  JIT_METH(store_argument);                     \
+  JIT_METH(phi);                                \
+  JIT_METH(variable);                           \
+  JIT_METH(error_check);                        \
+  JIT_METH(assign)                              \
+  JIT_METH(argument)                            \
+  JIT_METH(magic_end)
+
+#define JIT_VISIT_IR_CONST                      \
+  JIT_METH(const_bool);                         \
+  JIT_METH(const_scalar);                       \
+  JIT_METH(const_complex);                      \
+  JIT_METH(const_index);                        \
+  JIT_METH(const_string);                       \
+  JIT_METH(const_range)
+
+#define JIT_VISIT_IR_CLASSES                    \
+  JIT_VISIT_IR_NOTEMPLATE                       \
+  JIT_VISIT_IR_CONST
+
+// forward declare all ir classes
+#define JIT_METH(cname)                         \
+  class jit_ ## cname;
+
+JIT_VISIT_IR_NOTEMPLATE
+
+#undef JIT_METH
+
+// ABCs which aren't included in  JIT_VISIT_IR_ALL
+class jit_instruction;
+class jit_terminator;
+
+template <typename T, jit_type *(*EXTRACT_T)(void), typename PASS_T = T,
+          bool QUOTE=false>
+class jit_const;
+
+typedef jit_const<bool, jit_typeinfo::get_bool> jit_const_bool;
+typedef jit_const<double, jit_typeinfo::get_scalar> jit_const_scalar;
+typedef jit_const<Complex, jit_typeinfo::get_complex> jit_const_complex;
+typedef jit_const<octave_idx_type, jit_typeinfo::get_index> jit_const_index;
+
+typedef jit_const<std::string, jit_typeinfo::get_string, const std::string&,
+                  true> jit_const_string;
+typedef jit_const<jit_range, jit_typeinfo::get_range, const jit_range&>
+jit_const_range;
+
+class jit_ir_walker;
+class jit_use;
+
+// Creates and tracks memory for jit_value and subclasses.
+// Memory managment is simple, all values that are created live as long as the
+// factory.
+class
+jit_factory
+{
+  typedef std::list<jit_value *> value_list;
+public:
+  ~jit_factory (void);
+
+  const value_list& constants (void) const { return mconstants; }
+
+  // this would be easier with variadic templates
+  template <typename T>
+  T *create (void)
+  {
+    T *ret = new T ();
+    track_value (ret);
+    return ret;
+  }
+
+#define DECL_ARG(n) const ARG ## n& arg ## n
+#define JIT_CREATE(N)                                           \
+  template <typename T, OCT_MAKE_DECL_LIST (typename, ARG, N)>  \
+  T *create (OCT_MAKE_LIST (DECL_ARG, N))                       \
+  {                                                             \
+    T *ret = new T (OCT_MAKE_ARG_LIST (arg, N));                \
+    track_value (ret);                                          \
+    return ret;                                                 \
+  }
+
+  JIT_CREATE (1)
+  JIT_CREATE (2)
+  JIT_CREATE (3)
+  JIT_CREATE (4)
+
+#undef JIT_CREATE
+private:
+  void track_value (jit_value *v);
+
+  value_list all_values;
+
+  value_list mconstants;
+};
+
+// A list of basic blocks (jit_block) which form some body of code.
+//
+// We do not directly inherit from std::list because we need to update the
+// blocks stashed location in push_back and insert.
+class
+jit_block_list
+{
+public:
+  typedef std::list<jit_block *>::iterator iterator;
+  typedef std::list<jit_block *>::const_iterator const_iterator;
+
+  jit_block *back (void) const { return mlist.back (); }
+
+  iterator begin (void) { return mlist.begin (); }
+
+  const_iterator begin (void) const { return mlist.begin (); }
+
+  iterator end (void)  { return mlist.end (); }
+
+  const_iterator end (void) const  { return mlist.end (); }
+
+  iterator erase (iterator iter) { return mlist.erase (iter); }
+
+  jit_block *front (void) const { return mlist.front (); }
+
+  void insert_after (iterator iter, jit_block *ablock);
+
+  void insert_after (jit_block *loc, jit_block *ablock);
+
+  void insert_before (iterator iter, jit_block *ablock);
+
+  void insert_before (jit_block *loc, jit_block *ablock);
+
+  void push_back (jit_block *b);
+private:
+  std::list<jit_block *> mlist;
+};
+
+class
+jit_value : public jit_internal_list<jit_value, jit_use>
+{
+public:
+  jit_value (void) : llvm_value (0), ty (0), mlast_use (0),
+                     min_worklist (false) {}
+
+  virtual ~jit_value (void);
+
+  bool in_worklist (void) const
+  {
+    return min_worklist;
+  }
+
+  void stash_in_worklist (bool ain_worklist)
+  {
+    min_worklist = ain_worklist;
+  }
+
+  // The block of the first use which is not a jit_error_check
+  // So this is not necessarily first_use ()->parent ().
+  jit_block *first_use_block (void);
+
+  // replace all uses with
+  virtual void replace_with (jit_value *value);
+
+  jit_type *type (void) const { return ty; }
+
+  llvm::Type *type_llvm (void) const
+  {
+    return ty ? ty->to_llvm () : 0;
+  }
+
+  const std::string& type_name (void) const
+  {
+    return ty->name ();
+  }
+
+  void stash_type (jit_type *new_ty) { ty = new_ty; }
+
+  std::string print_string (void)
+  {
+    std::stringstream ss;
+    print (ss);
+    return ss.str ();
+  }
+
+  jit_instruction *last_use (void) const { return mlast_use; }
+
+  void stash_last_use (jit_instruction *alast_use)
+  {
+    mlast_use = alast_use;
+  }
+
+  virtual bool needs_release (void) const { return false; }
+
+  virtual std::ostream& print (std::ostream& os, size_t indent = 0) const = 0;
+
+  virtual std::ostream& short_print (std::ostream& os) const
+  { return print (os); }
+
+  virtual void accept (jit_ir_walker& walker) = 0;
+
+  bool has_llvm (void) const
+  {
+    return llvm_value;
+  }
+
+  llvm::Value *to_llvm (void) const
+  {
+    assert (llvm_value);
+    return llvm_value;
+  }
+
+  void stash_llvm (llvm::Value *compiled)
+  {
+    llvm_value = compiled;
+  }
+
+protected:
+  std::ostream& print_indent (std::ostream& os, size_t indent = 0) const
+  {
+    for (size_t i = 0; i < indent * 8; ++i)
+      os << " ";
+    return os;
+  }
+
+  llvm::Value *llvm_value;
+private:
+  jit_type *ty;
+  jit_instruction *mlast_use;
+  bool min_worklist;
+};
+
+std::ostream& operator<< (std::ostream& os, const jit_value& value);
+std::ostream& jit_print (std::ostream& os, jit_value *avalue);
+
+class
+jit_use : public jit_internal_node<jit_value, jit_use>
+{
+public:
+  jit_use (void) : muser (0), mindex (0) {}
+
+  // we should really have a move operator, but not until c++11 :(
+  jit_use (const jit_use& use) : muser (0), mindex (0)
+  {
+    *this = use;
+  }
+
+  jit_use& operator= (const jit_use& use)
+  {
+    stash_value (use.value (), use.user (), use.index ());
+    return *this;
+  }
+
+  size_t index (void) const { return mindex; }
+
+  jit_instruction *user (void) const { return muser; }
+
+  jit_block *user_parent (void) const;
+
+  std::list<jit_block *> user_parent_location (void) const;
+
+  void stash_value (jit_value *avalue, jit_instruction *auser = 0,
+                    size_t aindex = -1)
+  {
+    jit_internal_node::stash_value (avalue);
+    mindex = aindex;
+    muser = auser;
+  }
+private:
+  jit_instruction *muser;
+  size_t mindex;
+};
+
+class
+jit_instruction : public jit_value
+{
+public:
+  // FIXME: this code could be so much pretier with varadic templates...
+  jit_instruction (void) : mid (next_id ()), mparent (0)
+  {}
+
+  jit_instruction (size_t nargs) : mid (next_id ()), mparent (0)
+  {
+    already_infered.reserve (nargs);
+    marguments.reserve (nargs);
+  }
+
+#define STASH_ARG(i) stash_argument (i, arg ## i);
+#define JIT_INSTRUCTION_CTOR(N)                                         \
+  jit_instruction (OCT_MAKE_DECL_LIST (jit_value *, arg, N))            \
+  : already_infered (N), marguments (N), mid (next_id ()), mparent (0)  \
+  {                                                                     \
+    OCT_ITERATE_MACRO (STASH_ARG, N);                                   \
+  }
+
+  JIT_INSTRUCTION_CTOR(1)
+  JIT_INSTRUCTION_CTOR(2)
+  JIT_INSTRUCTION_CTOR(3)
+  JIT_INSTRUCTION_CTOR(4)
+
+#undef STASH_ARG
+#undef JIT_INSTRUCTION_CTOR
+
+  jit_instruction (const std::vector<jit_value *>& aarguments)
+  : already_infered (aarguments.size ()), marguments (aarguments.size ()),
+    mid (next_id ()), mparent (0)
+  {
+    for (size_t i = 0; i < aarguments.size (); ++i)
+      stash_argument (i, aarguments[i]);
+  }
+
+  static void reset_ids (void)
+  {
+    next_id (true);
+  }
+
+  jit_value *argument (size_t i) const
+  {
+    return marguments[i].value ();
+  }
+
+  llvm::Value *argument_llvm (size_t i) const
+  {
+    assert (argument (i));
+    return argument (i)->to_llvm ();
+  }
+
+  jit_type *argument_type (size_t i) const
+  {
+    return argument (i)->type ();
+  }
+
+  llvm::Type *argument_type_llvm (size_t i) const
+  {
+    assert (argument (i));
+    return argument_type (i)->to_llvm ();
+  }
+
+  std::ostream& print_argument (std::ostream& os, size_t i) const
+  {
+    if (argument (i))
+      return argument (i)->short_print (os);
+    else
+      return os << "NULL";
+  }
+
+  void stash_argument (size_t i, jit_value *arg)
+  {
+    marguments[i].stash_value (arg, this, i);
+  }
+
+  void push_argument (jit_value *arg)
+  {
+    marguments.push_back (jit_use ());
+    stash_argument (marguments.size () - 1, arg);
+    already_infered.push_back (0);
+  }
+
+  size_t argument_count (void) const
+  {
+    return marguments.size ();
+  }
+
+  void resize_arguments (size_t acount, jit_value *adefault = 0)
+  {
+    size_t old = marguments.size ();
+    marguments.resize (acount);
+    already_infered.resize (acount);
+
+    if (adefault)
+      for (size_t i = old; i < acount; ++i)
+        stash_argument (i, adefault);
+  }
+
+  const std::vector<jit_use>& arguments (void) const { return marguments; }
+
+  // argument types which have been infered already
+  const std::vector<jit_type *>& argument_types (void) const
+  { return already_infered; }
+
+  virtual void push_variable (void) {}
+
+  virtual void pop_variable (void) {}
+
+  virtual void construct_ssa (void)
+  {
+    do_construct_ssa (0, argument_count ());
+  }
+
+  virtual bool infer (void) { return false; }
+
+  void remove (void);
+
+  virtual std::ostream& short_print (std::ostream& os) const;
+
+  jit_block *parent (void) const { return mparent; }
+
+  std::list<jit_instruction *>::iterator location (void) const
+  {
+    return mlocation;
+  }
+
+  llvm::BasicBlock *parent_llvm (void) const;
+
+  void stash_parent (jit_block *aparent,
+                     std::list<jit_instruction *>::iterator alocation)
+  {
+    mparent = aparent;
+    mlocation = alocation;
+  }
+
+  size_t id (void) const { return mid; }
+protected:
+
+  // Do SSA replacement on arguments in [start, end)
+  void do_construct_ssa (size_t start, size_t end);
+
+  std::vector<jit_type *> already_infered;
+private:
+  static size_t next_id (bool reset = false)
+  {
+    static size_t ret = 0;
+    if (reset)
+      return ret = 0;
+
+    return ret++;
+  }
+
+  std::vector<jit_use> marguments;
+
+  size_t mid;
+  jit_block *mparent;
+  std::list<jit_instruction *>::iterator mlocation;
+};
+
+// defnie accept methods for subclasses
+#define JIT_VALUE_ACCEPT                        \
+  virtual void accept (jit_ir_walker& walker);
+
+// for use as a dummy argument during conversion to LLVM
+class
+jit_argument : public jit_value
+{
+public:
+  jit_argument (jit_type *atype, llvm::Value *avalue)
+  {
+    stash_type (atype);
+    stash_llvm (avalue);
+  }
+
+  virtual std::ostream& print (std::ostream& os, size_t indent = 0) const
+  {
+    print_indent (os, indent);
+    return jit_print (os, type ()) << ": DUMMY";
+  }
+
+  JIT_VALUE_ACCEPT;
+};
+
+template <typename T, jit_type *(*EXTRACT_T)(void), typename PASS_T,
+          bool QUOTE>
+class
+jit_const : public jit_value
+{
+public:
+  typedef PASS_T pass_t;
+
+  jit_const (PASS_T avalue) : mvalue (avalue)
+  {
+    stash_type (EXTRACT_T ());
+  }
+
+  PASS_T value (void) const { return mvalue; }
+
+  virtual std::ostream& print (std::ostream& os, size_t indent = 0) const
+  {
+    print_indent (os, indent);
+    jit_print (os, type ()) << ": ";
+    if (QUOTE)
+      os << "\"";
+    os << mvalue;
+    if (QUOTE)
+      os << "\"";
+    return os;
+  }
+
+  JIT_VALUE_ACCEPT;
+private:
+  T mvalue;
+};
+
+class jit_phi_incomming;
+
+class
+jit_block : public jit_value, public jit_internal_list<jit_block,
+                                                       jit_phi_incomming>
+{
+  typedef jit_internal_list<jit_block, jit_phi_incomming> ILIST_T;
+public:
+  typedef std::list<jit_instruction *> instruction_list;
+  typedef instruction_list::iterator iterator;
+  typedef instruction_list::const_iterator const_iterator;
+
+  typedef std::set<jit_block *> df_set;
+  typedef df_set::const_iterator df_iterator;
+
+  static const size_t NO_ID = static_cast<size_t> (-1);
+
+  jit_block (const std::string& aname, size_t avisit_count = 0)
+    : mvisit_count (avisit_count), mid (NO_ID), idom (0), mname (aname),
+      malive (false)
+  {}
+
+  virtual void replace_with (jit_value *value);
+
+  void replace_in_phi (jit_block *ablock, jit_block *with);
+
+  // we have a new internal list, but we want to stay compatable with jit_value
+  jit_use *first_use (void) const { return jit_value::first_use (); }
+
+  size_t use_count (void) const { return jit_value::use_count (); }
+
+  // if a block is alive, then it might be visited during execution
+  bool alive (void) const { return malive; }
+
+  void mark_alive (void) { malive = true; }
+
+  // If we can merge with a successor, do so and return the now empty block
+  jit_block *maybe_merge ();
+
+  // merge another block into this block, leaving the merge block empty
+  void merge (jit_block& merge);
+
+  const std::string& name (void) const { return mname; }
+
+  jit_instruction *prepend (jit_instruction *instr);
+
+  jit_instruction *prepend_after_phi (jit_instruction *instr);
+
+  template <typename T>
+  T *append (T *instr)
+  {
+    internal_append (instr);
+    return instr;
+  }
+
+  jit_instruction *insert_before (iterator loc, jit_instruction *instr);
+
+  jit_instruction *insert_before (jit_instruction *loc, jit_instruction *instr)
+  {
+    return insert_before (loc->location (), instr);
+  }
+
+  jit_instruction *insert_after (iterator loc, jit_instruction *instr);
+
+  jit_instruction *insert_after (jit_instruction *loc, jit_instruction *instr)
+  {
+    return insert_after (loc->location (), instr);
+  }
+
+  iterator remove (iterator iter)
+  {
+    jit_instruction *instr = *iter;
+    iter = instructions.erase (iter);
+    instr->stash_parent (0, instructions.end ());
+    return iter;
+  }
+
+  jit_terminator *terminator (void) const;
+
+  // is the jump from pred alive?
+  bool branch_alive (jit_block *asucc) const;
+
+  jit_block *successor (size_t i) const;
+
+  size_t successor_count (void) const;
+
+  iterator begin (void) { return instructions.begin (); }
+
+  const_iterator begin (void) const { return instructions.begin (); }
+
+  iterator end (void) { return instructions.end (); }
+
+  const_iterator end (void) const { return instructions.end (); }
+
+  iterator phi_begin (void);
+
+  iterator phi_end (void);
+
+  iterator nonphi_begin (void);
+
+  // must label before id is valid
+  size_t id (void) const { return mid; }
+
+  // dominance frontier
+  const df_set& df (void) const { return mdf; }
+
+  df_iterator df_begin (void) const { return mdf.begin (); }
+
+  df_iterator df_end (void) const { return mdf.end (); }
+
+  // label with a RPO walk
+  void label (void)
+  {
+    size_t number = 0;
+    label (mvisit_count, number);
+  }
+
+  void label (size_t avisit_count, size_t& number)
+  {
+    if (visited (avisit_count))
+      return;
+
+    for (jit_use *use = first_use (); use; use = use->next ())
+      {
+        jit_block *pred = use->user_parent ();
+        pred->label (avisit_count, number);
+      }
+
+    mid = number++;
+  }
+
+  // See for idom computation algorithm
+  // Cooper, Keith D.; Harvey, Timothy J; and Kennedy, Ken (2001).
+  // "A Simple, Fast Dominance Algorithm"
+  void compute_idom (jit_block *entry_block)
+  {
+    bool changed;
+    entry_block->idom = entry_block;
+    do
+      changed = update_idom (mvisit_count);
+    while (changed);
+  }
+
+  // compute dominance frontier
+  void compute_df (void)
+  {
+    compute_df (mvisit_count);
+  }
+
+  void create_dom_tree (void)
+  {
+    create_dom_tree (mvisit_count);
+  }
+
+  jit_block *dom_successor (size_t idx) const
+  {
+    return dom_succ[idx];
+  }
+
+  size_t dom_successor_count (void) const
+  {
+    return dom_succ.size ();
+  }
+
+  // call pop_varaible on all instructions
+  void pop_all (void);
+
+  virtual std::ostream& print (std::ostream& os, size_t indent = 0) const
+  {
+    print_indent (os, indent);
+    short_print (os) << ":        %pred = ";
+    for (jit_use *use = first_use (); use; use = use->next ())
+      {
+        jit_block *pred = use->user_parent ();
+        os << *pred;
+        if (use->next ())
+          os << ", ";
+      }
+    os << std::endl;
+
+    for (const_iterator iter = begin (); iter != end (); ++iter)
+      {
+        jit_instruction *instr = *iter;
+        instr->print (os, indent + 1) << std::endl;
+      }
+    return os;
+  }
+
+  jit_block *maybe_split (jit_factory& factory, jit_block_list& blocks,
+                          jit_block *asuccessor);
+
+  jit_block *maybe_split (jit_factory& factory, jit_block_list& blocks,
+                          jit_block& asuccessor)
+  {
+    return maybe_split (factory, blocks, &asuccessor);
+  }
+
+  // print dominator infomration
+  std::ostream& print_dom (std::ostream& os) const;
+
+  virtual std::ostream& short_print (std::ostream& os) const
+  {
+    os << mname;
+    if (mid != NO_ID)
+      os << mid;
+    return os;
+  }
+
+  llvm::BasicBlock *to_llvm (void) const;
+
+  std::list<jit_block *>::iterator location (void) const
+  { return mlocation; }
+
+  void stash_location (std::list<jit_block *>::iterator alocation)
+  { mlocation = alocation; }
+
+  // used to prevent visiting the same node twice in the graph
+  size_t visit_count (void) const { return mvisit_count; }
+
+  // check if this node has been visited yet at the given visit count. If we
+  // have not been visited yet, mark us as visited.
+  bool visited (size_t avisit_count)
+  {
+    if (mvisit_count <= avisit_count)
+      {
+        mvisit_count = avisit_count + 1;
+        return false;
+      }
+
+    return true;
+  }
+
+  JIT_VALUE_ACCEPT;
+private:
+  void internal_append (jit_instruction *instr);
+
+  void compute_df (size_t avisit_count);
+
+  bool update_idom (size_t avisit_count);
+
+  void create_dom_tree (size_t avisit_count);
+
+  static jit_block *idom_intersect (jit_block *i, jit_block *j);
+
+  size_t mvisit_count;
+  size_t mid;
+  jit_block *idom;
+  df_set mdf;
+  std::vector<jit_block *> dom_succ;
+  std::string mname;
+  instruction_list instructions;
+  bool malive;
+  std::list<jit_block *>::iterator mlocation;
+};
+
+// keeps track of phi functions that use a block on incomming edges
+class
+jit_phi_incomming : public jit_internal_node<jit_block, jit_phi_incomming>
+{
+public:
+  jit_phi_incomming (void) : muser (0) {}
+
+  jit_phi_incomming (jit_phi *auser) : muser (auser) {}
+
+  jit_phi_incomming (const jit_phi_incomming& use) : jit_internal_node ()
+  {
+    *this = use;
+  }
+
+  jit_phi_incomming& operator= (const jit_phi_incomming& use)
+  {
+    stash_value (use.value ());
+    muser = use.muser;
+    return *this;
+  }
+
+  jit_phi *user (void) const { return muser; }
+
+  jit_block *user_parent (void) const;
+private:
+  jit_phi *muser;
+};
+
+// A non-ssa variable
+class
+jit_variable : public jit_value
+{
+public:
+  jit_variable (const std::string& aname) : mname (aname), mlast_use (0) {}
+
+  const std::string &name (void) const { return mname; }
+
+  // manipulate the value_stack, for use during SSA construction. The top of the
+  // value stack represents the current value for this variable
+  bool has_top (void) const
+  {
+    return ! value_stack.empty ();
+  }
+
+  jit_value *top (void) const
+  {
+    return value_stack.top ();
+  }
+
+  void push (jit_instruction *v)
+  {
+    value_stack.push (v);
+    mlast_use = v;
+  }
+
+  void pop (void)
+  {
+    value_stack.pop ();
+  }
+
+  jit_instruction *last_use (void) const
+  {
+    return mlast_use;
+  }
+
+  void stash_last_use (jit_instruction *instr)
+  {
+    mlast_use = instr;
+  }
+
+  // blocks in which we are used
+  void use_blocks (jit_block::df_set& result)
+  {
+    jit_use *use = first_use ();
+    while (use)
+      {
+        result.insert (use->user_parent ());
+        use = use->next ();
+      }
+  }
+
+  virtual std::ostream& print (std::ostream& os, size_t indent = 0) const
+  {
+    return print_indent (os, indent) << mname;
+  }
+
+  JIT_VALUE_ACCEPT;
+private:
+  std::string mname;
+  std::stack<jit_value *> value_stack;
+  jit_instruction *mlast_use;
+};
+
+class
+jit_assign_base : public jit_instruction
+{
+public:
+  jit_assign_base (jit_variable *adest) : jit_instruction (), mdest (adest) {}
+
+  jit_assign_base (jit_variable *adest, size_t npred) : jit_instruction (npred),
+                                                        mdest (adest) {}
+
+  jit_assign_base (jit_variable *adest, jit_value *arg0, jit_value *arg1)
+    : jit_instruction (arg0, arg1), mdest (adest) {}
+
+  jit_variable *dest (void) const { return mdest; }
+
+  virtual void push_variable (void)
+  {
+    mdest->push (this);
+  }
+
+  virtual void pop_variable (void)
+  {
+    mdest->pop ();
+  }
+
+  virtual std::ostream& short_print (std::ostream& os) const
+  {
+    if (type ())
+      jit_print (os, type ()) << ": ";
+
+    dest ()->short_print (os);
+    return os << "#" << id ();
+  }
+private:
+  jit_variable *mdest;
+};
+
+class
+jit_assign : public jit_assign_base
+{
+public:
+  jit_assign (jit_variable *adest, jit_value *asrc)
+    : jit_assign_base (adest, adest, asrc), martificial (false) {}
+
+  jit_value *overwrite (void) const
+  {
+    return argument (0);
+  }
+
+  jit_value *src (void) const
+  {
+    return argument (1);
+  }
+
+  // variables don't get modified in an SSA, but COW requires we modify
+  // variables. An artificial assign is for when a variable gets modified. We
+  // need an assign in the SSA, but the reference counts shouldn't be updated.
+  bool artificial (void) const { return martificial; }
+
+  void mark_artificial (void) { martificial = true; }
+
+  virtual bool infer (void)
+  {
+    jit_type *stype = src ()->type ();
+    if (stype != type())
+      {
+        stash_type (stype);
+        return true;
+      }
+
+    return false;
+  }
+
+  virtual std::ostream& print (std::ostream& os, size_t indent = 0) const
+  {
+    print_indent (os, indent) << *this << " = " << *src ();
+
+    if (artificial ())
+      os << " [artificial]";
+
+    return os;
+  }
+
+  JIT_VALUE_ACCEPT;
+private:
+  bool martificial;
+};
+
+class
+jit_phi : public jit_assign_base
+{
+public:
+  jit_phi (jit_variable *adest, size_t npred)
+    : jit_assign_base (adest, npred)
+  {
+    mincomming.reserve (npred);
+  }
+
+  // removes arguments form dead incomming jumps
+  bool prune (void);
+
+  void add_incomming (jit_block *from, jit_value *value)
+  {
+    push_argument (value);
+    mincomming.push_back (jit_phi_incomming (this));
+    mincomming[mincomming.size () - 1].stash_value (from);
+  }
+
+  jit_block *incomming (size_t i) const
+  {
+    return mincomming[i].value ();
+  }
+
+  llvm::BasicBlock *incomming_llvm (size_t i) const
+  {
+    return incomming (i)->to_llvm ();
+  }
+
+  virtual void construct_ssa (void) {}
+
+  virtual bool infer (void);
+
+  virtual std::ostream& print (std::ostream& os, size_t indent = 0) const
+  {
+    std::stringstream ss;
+    print_indent (ss, indent);
+    short_print (ss) << " phi ";
+    std::string ss_str = ss.str ();
+    std::string indent_str (ss_str.size (), ' ');
+    os << ss_str;
+
+    for (size_t i = 0; i < argument_count (); ++i)
+      {
+        if (i > 0)
+          os << indent_str;
+        os << "| ";
+
+        os << *incomming (i) << " -> ";
+        os << *argument (i);
+
+        if (i + 1 < argument_count ())
+          os << std::endl;
+      }
+
+    return os;
+  }
+
+  llvm::PHINode *to_llvm (void) const;
+
+  JIT_VALUE_ACCEPT;
+private:
+  std::vector<jit_phi_incomming> mincomming;
+};
+
+class
+jit_terminator : public jit_instruction
+{
+public:
+#define JIT_TERMINATOR_CONST(N)                                         \
+  jit_terminator (size_t asuccessor_count,                              \
+                  OCT_MAKE_DECL_LIST (jit_value *, arg, N))             \
+    : jit_instruction (OCT_MAKE_ARG_LIST (arg, N)),                     \
+      malive (asuccessor_count, false) {}
+
+  JIT_TERMINATOR_CONST (1)
+  JIT_TERMINATOR_CONST (2)
+  JIT_TERMINATOR_CONST (3)
+
+#undef JIT_TERMINATOR_CONST
+
+  jit_block *successor (size_t idx = 0) const
+  {
+    return static_cast<jit_block *> (argument (idx));
+  }
+
+  llvm::BasicBlock *successor_llvm (size_t idx = 0) const
+  {
+    return successor (idx)->to_llvm ();
+  }
+
+  size_t successor_index (const jit_block *asuccessor) const;
+
+  std::ostream& print_successor (std::ostream& os, size_t idx = 0) const
+  {
+    if (alive (idx))
+      os << "[live] ";
+    else
+      os << "[dead] ";
+
+    return successor (idx)->short_print (os);
+  }
+
+  // Check if the jump to successor is live
+  bool alive (const jit_block *asuccessor) const
+  {
+    return alive (successor_index (asuccessor));
+  }
+
+  bool alive (size_t idx) const { return malive[idx]; }
+
+  bool alive (int idx) const { return malive[idx]; }
+
+  size_t successor_count (void) const { return malive.size (); }
+
+  virtual bool infer (void);
+
+  llvm::TerminatorInst *to_llvm (void) const;
+protected:
+  virtual bool check_alive (size_t) const { return true; }
+private:
+  std::vector<bool> malive;
+};
+
+class
+jit_branch : public jit_terminator
+{
+public:
+  jit_branch (jit_block *succ) : jit_terminator (1, succ) {}
+
+  virtual size_t successor_count (void) const { return 1; }
+
+  virtual std::ostream& print (std::ostream& os, size_t indent = 0) const
+  {
+    print_indent (os, indent) << "branch: ";
+    return print_successor (os);
+  }
+
+  JIT_VALUE_ACCEPT;
+};
+
+class
+jit_cond_branch : public jit_terminator
+{
+public:
+  jit_cond_branch (jit_value *c, jit_block *ctrue, jit_block *cfalse)
+    : jit_terminator (2, ctrue, cfalse, c) {}
+
+  jit_value *cond (void) const { return argument (2); }
+
+  std::ostream& print_cond (std::ostream& os) const
+  {
+    return cond ()->short_print (os);
+  }
+
+  llvm::Value *cond_llvm (void) const
+  {
+    return cond ()->to_llvm ();
+  }
+
+  virtual size_t successor_count (void) const { return 2; }
+
+  virtual std::ostream& print (std::ostream& os, size_t indent = 0) const
+  {
+    print_indent (os, indent) << "cond_branch: ";
+    print_cond (os) << ", ";
+    print_successor (os, 0) << ", ";
+    return print_successor (os, 1);
+  }
+
+  JIT_VALUE_ACCEPT;
+};
+
+class
+jit_call : public jit_instruction
+{
+public:
+#define JIT_CALL_CONST(N)                                               \
+  jit_call (const jit_operation& aoperation,                            \
+            OCT_MAKE_DECL_LIST (jit_value *, arg, N))                   \
+    : jit_instruction (OCT_MAKE_ARG_LIST (arg, N)), moperation (aoperation) {} \
+                                                                        \
+  jit_call (const jit_operation& (*aoperation) (void),                  \
+            OCT_MAKE_DECL_LIST (jit_value *, arg, N))                   \
+    : jit_instruction (OCT_MAKE_ARG_LIST (arg, N)), moperation (aoperation ()) \
+  {}
+
+  JIT_CALL_CONST (1)
+  JIT_CALL_CONST (2)
+  JIT_CALL_CONST (3)
+  JIT_CALL_CONST (4)
+
+#undef JIT_CALL_CONST
+
+  jit_call (const jit_operation& aoperation,
+            const std::vector<jit_value *>& args)
+  : jit_instruction (args), moperation (aoperation)
+  {}
+
+  const jit_operation& operation (void) const { return moperation; }
+
+  bool can_error (void) const
+  {
+    return overload ().can_error ();
+  }
+
+  const jit_function& overload (void) const
+  {
+    return moperation.overload (argument_types ());
+  }
+
+  virtual bool needs_release (void) const
+  {
+    return type () && jit_typeinfo::get_release (type ()).valid ();
+  }
+
+  virtual std::ostream& print (std::ostream& os, size_t indent = 0) const
+  {
+    print_indent (os, indent);
+
+    if (use_count ())
+      short_print (os) << " = ";
+    os << "call " << moperation.name () << " (";
+
+    for (size_t i = 0; i < argument_count (); ++i)
+      {
+        print_argument (os, i);
+        if (i + 1 < argument_count ())
+          os << ", ";
+      }
+    return os << ")";
+  }
+
+  virtual bool infer (void);
+
+  JIT_VALUE_ACCEPT;
+private:
+  const jit_operation& moperation;
+};
+
+// FIXME: This is just ugly...
+// checks error_state, if error_state is false then goto the normal branche,
+// otherwise goto the error branch
+class
+jit_error_check : public jit_terminator
+{
+public:
+  jit_error_check (jit_call *acheck_for, jit_block *normal, jit_block *error)
+    : jit_terminator (2, error, normal, acheck_for) {}
+
+  jit_call *check_for (void) const
+  {
+    return static_cast<jit_call *> (argument (2));
+  }
+
+  virtual std::ostream& print (std::ostream& os, size_t indent = 0) const
+  {
+    print_indent (os, indent) << "error_check " << *check_for () << ", ";
+    print_successor (os, 1) << ", ";
+    return print_successor (os, 0);
+  }
+
+  JIT_VALUE_ACCEPT;
+protected:
+  virtual bool check_alive (size_t idx) const
+  {
+    return idx == 1 ? true : check_for ()->can_error ();
+  }
+};
+
+// for now only handles the 1D case
+class
+jit_magic_end : public jit_instruction
+{
+public:
+  class
+  context
+  {
+  public:
+    context (void) : value (0), index (0), count (0)
+    {}
+
+    context (jit_factory& factory, jit_value *avalue, size_t aindex,
+             size_t acount);
+
+    jit_value *value;
+    jit_const_index *index;
+    jit_const_index *count;
+  };
+
+  jit_magic_end (const std::vector<context>& full_context);
+
+  virtual bool infer (void);
+
+  const jit_function& overload () const;
+
+  virtual std::ostream& print (std::ostream& os, size_t indent = 0) const;
+
+  context resolve_context (void) const;
+
+  virtual std::ostream& short_print (std::ostream& os) const
+  {
+    return os << "magic_end" << "#" << id ();
+  }
+
+  JIT_VALUE_ACCEPT;
+private:
+  std::vector<context> contexts;
+};
+
+class
+jit_extract_argument : public jit_assign_base
+{
+public:
+  jit_extract_argument (jit_type *atype, jit_variable *adest)
+    : jit_assign_base (adest)
+  {
+    stash_type (atype);
+  }
+
+  const std::string& name (void) const
+  {
+    return dest ()->name ();
+  }
+
+  const jit_function& overload (void) const
+  {
+    return jit_typeinfo::cast (type (), jit_typeinfo::get_any ());
+  }
+
+  virtual std::ostream& print (std::ostream& os, size_t indent = 0) const
+  {
+    print_indent (os, indent);
+
+    return short_print (os) << " = extract " << name ();
+  }
+
+  JIT_VALUE_ACCEPT;
+};
+
+class
+jit_store_argument : public jit_instruction
+{
+public:
+  jit_store_argument (jit_variable *var)
+  : jit_instruction (var), dest (var)
+  {}
+
+  const std::string& name (void) const
+  {
+    return dest->name ();
+  }
+
+  const jit_function& overload (void) const
+  {
+    return jit_typeinfo::cast (jit_typeinfo::get_any (), result_type ());
+  }
+
+  jit_value *result (void) const
+  {
+    return argument (0);
+  }
+
+  jit_type *result_type (void) const
+  {
+    return result ()->type ();
+  }
+
+  llvm::Value *result_llvm (void) const
+  {
+    return result ()->to_llvm ();
+  }
+
+  virtual std::ostream& print (std::ostream& os, size_t indent = 0) const
+  {
+    jit_value *res = result ();
+    print_indent (os, indent) << "store ";
+    dest->short_print (os);
+
+    if (! isa<jit_variable> (res))
+      {
+        os << " = ";
+        res->short_print (os);
+      }
+
+    return os;
+  }
+
+  JIT_VALUE_ACCEPT;
+private:
+  jit_variable *dest;
+};
+
+class
+jit_ir_walker
+{
+public:
+  virtual ~jit_ir_walker () {}
+
+#define JIT_METH(clname) \
+  virtual void visit (jit_ ## clname&) = 0;
+
+  JIT_VISIT_IR_CLASSES;
+
+#undef JIT_METH
+};
+
+template <typename T, jit_type *(*EXTRACT_T)(void), typename PASS_T, bool QUOTE>
+void
+jit_const<T, EXTRACT_T, PASS_T, QUOTE>::accept (jit_ir_walker& walker)
+{
+  walker.visit (*this);
+}
+
+#undef JIT_VALUE_ACCEPT
+
+#endif
+#endif
new file mode 100644
--- /dev/null
+++ b/src/interp-core/jit-typeinfo.cc
@@ -0,0 +1,2216 @@
+/*
+
+Copyright (C) 2012 Max Brister <max@2bass.com>
+
+This file is part of Octave.
+
+Octave is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3 of the License, or (at your
+option) any later version.
+
+Octave is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with Octave; see the file COPYING.  If not, see
+<http://www.gnu.org/licenses/>.
+
+*/
+
+// defines required by llvm
+#define __STDC_LIMIT_MACROS
+#define __STDC_CONSTANT_MACROS
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_LLVM
+
+#include "jit-typeinfo.h"
+
+#include <llvm/Analysis/Verifier.h>
+#include <llvm/GlobalVariable.h>
+#include <llvm/ExecutionEngine/ExecutionEngine.h>
+#include <llvm/LLVMContext.h>
+#include <llvm/Function.h>
+#include <llvm/Instructions.h>
+#include <llvm/Intrinsics.h>
+#include <llvm/Support/IRBuilder.h>
+#include <llvm/Support/raw_os_ostream.h>
+
+#include "jit-ir.h"
+#include "ov.h"
+#include "ov-builtin.h"
+#include "ov-complex.h"
+#include "ov-scalar.h"
+#include "pager.h"
+
+static llvm::LLVMContext& context = llvm::getGlobalContext ();
+
+jit_typeinfo *jit_typeinfo::instance = 0;
+
+std::ostream& jit_print (std::ostream& os, jit_type *atype)
+{
+  if (! atype)
+    return os << "null";
+  return os << atype->name ();
+}
+
+// function that jit code calls
+extern "C" void
+octave_jit_print_any (const char *name, octave_base_value *obv)
+{
+  obv->print_with_name (octave_stdout, name, true);
+}
+
+extern "C" void
+octave_jit_print_scalar (const char *name, double value)
+{
+  // FIXME: We should avoid allocating a new octave_scalar each time
+  octave_value ov (value);
+  ov.print_with_name (octave_stdout, name);
+}
+
+extern "C" octave_base_value*
+octave_jit_binary_any_any (octave_value::binary_op op, octave_base_value *lhs,
+                           octave_base_value *rhs)
+{
+  octave_value olhs (lhs, true);
+  octave_value orhs (rhs, true);
+  octave_value result = do_binary_op (op, olhs, orhs);
+  octave_base_value *rep = result.internal_rep ();
+  rep->grab ();
+  return rep;
+}
+
+extern "C" octave_idx_type
+octave_jit_compute_nelem (double base, double limit, double inc)
+{
+  Range rng = Range (base, limit, inc);
+  return rng.nelem ();
+}
+
+extern "C" void
+octave_jit_release_any (octave_base_value *obv)
+{
+  obv->release ();
+}
+
+extern "C" void
+octave_jit_release_matrix (jit_matrix *m)
+{
+  delete m->array;
+}
+
+extern "C" octave_base_value *
+octave_jit_grab_any (octave_base_value *obv)
+{
+  obv->grab ();
+  return obv;
+}
+
+extern "C" void
+octave_jit_grab_matrix (jit_matrix *result, jit_matrix *m)
+{
+  *result = *m->array;
+}
+
+extern "C" octave_base_value *
+octave_jit_cast_any_matrix (jit_matrix *m)
+{
+  octave_value ret (*m->array);
+  octave_base_value *rep = ret.internal_rep ();
+  rep->grab ();
+  delete m->array;
+
+  return rep;
+}
+
+extern "C" void
+octave_jit_cast_matrix_any (jit_matrix *ret, octave_base_value *obv)
+{
+  NDArray m = obv->array_value ();
+  *ret = m;
+  obv->release ();
+}
+
+extern "C" octave_base_value *
+octave_jit_cast_any_range (jit_range *rng)
+{
+  Range temp (*rng);
+  octave_value ret (temp);
+  octave_base_value *rep = ret.internal_rep ();
+  rep->grab ();
+
+  return rep;
+}
+extern "C" void
+octave_jit_cast_range_any (jit_range *ret, octave_base_value *obv)
+{
+
+  jit_range r (obv->range_value ());
+  *ret = r;
+  obv->release ();
+}
+
+extern "C" double
+octave_jit_cast_scalar_any (octave_base_value *obv)
+{
+  double ret = obv->double_value ();
+  obv->release ();
+  return ret;
+}
+
+extern "C" octave_base_value *
+octave_jit_cast_any_scalar (double value)
+{
+  return new octave_scalar (value);
+}
+
+extern "C" Complex
+octave_jit_cast_complex_any (octave_base_value *obv)
+{
+  Complex ret = obv->complex_value ();
+  obv->release ();
+  return ret;
+}
+
+extern "C" octave_base_value *
+octave_jit_cast_any_complex (Complex c)
+{
+  if (c.imag () == 0)
+    return new octave_scalar (c.real ());
+  else
+    return new octave_complex (c);
+}
+
+extern "C" void
+octave_jit_gripe_nan_to_logical_conversion (void)
+{
+  try
+    {
+      gripe_nan_to_logical_conversion ();
+    }
+  catch (const octave_execution_exception&)
+    {
+      gripe_library_execution_error ();
+    }
+}
+
+extern "C" void
+octave_jit_ginvalid_index (void)
+{
+  try
+    {
+      gripe_invalid_index ();
+    }
+  catch (const octave_execution_exception&)
+    {
+      gripe_library_execution_error ();
+    }
+}
+
+extern "C" void
+octave_jit_gindex_range (int nd, int dim, octave_idx_type iext,
+                         octave_idx_type ext)
+{
+  try
+    {
+      gripe_index_out_of_range (nd, dim, iext, ext);
+    }
+  catch (const octave_execution_exception&)
+    {
+      gripe_library_execution_error ();
+    }
+}
+
+extern "C" void
+octave_jit_paren_subsasgn_impl (jit_matrix *ret, jit_matrix *mat,
+                                octave_idx_type index, double value)
+{
+  NDArray *array = mat->array;
+  if (array->nelem () < index)
+    array->resize1 (index);
+
+  double *data = array->fortran_vec ();
+  data[index - 1] = value;
+
+  mat->update ();
+  *ret = *mat;
+}
+
+static void
+make_indices (double *indices, octave_idx_type idx_count,
+              Array<idx_vector>& result)
+{
+  result.resize (dim_vector (1, idx_count));
+  for (octave_idx_type i = 0; i < idx_count; ++i)
+    result(i) = idx_vector (indices[i]);
+}
+
+extern "C" double
+octave_jit_paren_scalar (jit_matrix *mat, double *indicies,
+                         octave_idx_type idx_count)
+{
+  // FIXME: Replace this with a more optimal version
+  try
+    {
+      Array<idx_vector> idx;
+      make_indices (indicies, idx_count, idx);
+
+      Array<double> ret = mat->array->index (idx);
+      return ret.xelem (0);
+    }
+  catch (const octave_execution_exception&)
+    {
+      gripe_library_execution_error ();
+      return 0;
+    }
+}
+
+extern "C" void
+octave_jit_paren_scalar_subsasgn (jit_matrix *ret, jit_matrix *mat,
+                                  double *indices, octave_idx_type idx_count,
+                                  double value)
+{
+  // FIXME: Replace this with a more optimal version
+  try
+    {
+      Array<idx_vector> idx;
+      make_indices (indices, idx_count, idx);
+
+      Matrix temp (1, 1);
+      temp.xelem(0) = value;
+      mat->array->assign (idx, temp);
+      ret->update (mat->array);
+    }
+  catch (const octave_execution_exception&)
+    {
+      gripe_library_execution_error ();
+    }
+}
+
+extern "C" void
+octave_jit_paren_subsasgn_matrix_range (jit_matrix *result, jit_matrix *mat,
+                                        jit_range *index, double value)
+{
+  NDArray *array = mat->array;
+  bool done = false;
+
+  // optimize for the simple case (no resizing and no errors)
+  if (*array->jit_ref_count () == 1
+      && index->all_elements_are_ints ())
+    {
+      // this code is similar to idx_vector::fill, but we avoid allocating an
+      // idx_vector and its associated rep
+      octave_idx_type start = static_cast<octave_idx_type> (index->base) - 1;
+      octave_idx_type step = static_cast<octave_idx_type> (index->inc);
+      octave_idx_type nelem = index->nelem;
+      octave_idx_type final = start + nelem * step;
+      if (step < 0)
+        {
+          step = -step;
+          std::swap (final, start);
+        }
+
+      if (start >= 0 && final < mat->slice_len)
+        {
+          done = true;
+
+          double *data = array->jit_slice_data ();
+          if (step == 1)
+            std::fill (data + start, data + start + nelem, value);
+          else
+            {
+              for (octave_idx_type i = start; i < final; i += step)
+                data[i] = value;
+            }
+        }
+    }
+
+  if (! done)
+    {
+      idx_vector idx (*index);
+      NDArray avalue (dim_vector (1, 1));
+      avalue.xelem (0) = value;
+      array->assign (idx, avalue);
+    }
+
+  result->update (array);
+}
+
+extern "C" double
+octave_jit_end_matrix (jit_matrix *mat, octave_idx_type idx,
+                       octave_idx_type count)
+{
+  octave_idx_type ndim = mat->dimensions[-1];
+  if (ndim == count)
+    return mat->dimensions[idx];
+  else if (ndim > count)
+    {
+      if (idx == count - 1)
+        {
+          double ret = mat->dimensions[idx];
+          for (octave_idx_type i = idx + 1; i < ndim; ++i)
+            ret *= mat->dimensions[idx];
+          return ret;
+        }
+
+      return mat->dimensions[idx];
+    }
+  else // ndim < count
+    return idx < ndim ? mat->dimensions[idx] : 1;
+}
+
+extern "C" Complex
+octave_jit_complex_div (Complex lhs, Complex rhs)
+{
+  // see src/OPERATORS/op-cs-cs.cc
+  if (rhs == 0.0)
+    gripe_divide_by_zero ();
+
+  return lhs / rhs;
+}
+
+// FIXME: CP form src/xpow.cc
+static inline int
+xisint (double x)
+{
+  return (D_NINT (x) == x
+          && ((x >= 0 && x < INT_MAX)
+              || (x <= 0 && x > INT_MIN)));
+}
+
+extern "C" Complex
+octave_jit_pow_scalar_scalar (double lhs, double rhs)
+{
+  // FIXME: almost CP from src/xpow.cc
+  if (lhs < 0.0 && ! xisint (rhs))
+    return std::pow (Complex (lhs), rhs);
+  return std::pow (lhs, rhs);
+}
+
+extern "C" Complex
+octave_jit_pow_complex_complex (Complex lhs, Complex rhs)
+{
+  if (lhs.imag () == 0 && rhs.imag () == 0)
+    return octave_jit_pow_scalar_scalar (lhs.real (), rhs.real ());
+  return std::pow (lhs, rhs);
+}
+
+extern "C" Complex
+octave_jit_pow_complex_scalar (Complex lhs, double rhs)
+{
+  if (lhs.imag () == 0)
+    return octave_jit_pow_scalar_scalar (lhs.real (), rhs);
+  return std::pow (lhs, rhs);
+}
+
+extern "C" Complex
+octave_jit_pow_scalar_complex (double lhs, Complex rhs)
+{
+  if (rhs.imag () == 0)
+    return octave_jit_pow_scalar_scalar (lhs, rhs.real ());
+  return std::pow (lhs, rhs);
+}
+
+extern "C" void
+octave_jit_print_matrix (jit_matrix *m)
+{
+  std::cout << *m << std::endl;
+}
+
+static void
+gripe_bad_result (void)
+{
+  error ("incorrect type information given to the JIT compiler");
+}
+
+// FIXME: Add support for multiple outputs
+extern "C" octave_base_value *
+octave_jit_call (octave_builtin::fcn fn, size_t nargin,
+                 octave_base_value **argin, jit_type *result_type)
+{
+  octave_value_list ovl (nargin);
+  for (size_t i = 0; i < nargin; ++i)
+    ovl.xelem (i) = octave_value (argin[i]);
+
+  ovl = fn (ovl, 1);
+
+  // FIXME: Check result_type somehow
+  if (result_type)
+    {
+      if (ovl.length () < 1)
+        {
+          gripe_bad_result ();
+          return 0;
+        }
+
+      octave_value result = ovl.xelem(0);
+      octave_base_value *ret = result.internal_rep ();
+      ret->grab ();
+      return ret;
+    }
+
+  if (! (ovl.length () == 0
+         || (ovl.length () == 1 && ovl.xelem (0).is_undefined ())))
+    gripe_bad_result ();
+
+  return 0;
+}
+
+// -------------------- jit_range --------------------
+bool
+jit_range::all_elements_are_ints () const
+{
+  Range r (*this);
+  return r.all_elements_are_ints ();
+}
+
+std::ostream&
+operator<< (std::ostream& os, const jit_range& rng)
+{
+  return os << "Range[" << rng.base << ", " << rng.limit << ", " << rng.inc
+            << ", " << rng.nelem << "]";
+}
+
+// -------------------- jit_matrix --------------------
+
+std::ostream&
+operator<< (std::ostream& os, const jit_matrix& mat)
+{
+  return os << "Matrix[" << mat.ref_count << ", " << mat.slice_data << ", "
+            << mat.slice_len << ", " << mat.dimensions << ", "
+            << mat.array << "]";
+}
+
+// -------------------- jit_type --------------------
+jit_type::jit_type (const std::string& aname, jit_type *aparent,
+                    llvm::Type *allvm_type, bool askip_paren, int aid) :
+  mname (aname), mparent (aparent), llvm_type (allvm_type), mid (aid),
+  mdepth (aparent ? aparent->mdepth + 1 : 0), mskip_paren (askip_paren)
+{
+  std::memset (msret, 0, sizeof (msret));
+  std::memset (mpointer_arg, 0, sizeof (mpointer_arg));
+  std::memset (mpack, 0, sizeof (mpack));
+  std::memset (munpack, 0, sizeof (munpack));
+
+  for (size_t i = 0; i < jit_convention::length; ++i)
+    mpacked_type[i] = llvm_type;
+}
+
+llvm::Type *
+jit_type::to_llvm_arg (void) const
+{
+  return llvm_type ? llvm_type->getPointerTo () : 0;
+}
+
+// -------------------- jit_function --------------------
+jit_function::jit_function () : module (0), llvm_function (0), mresult (0),
+                                call_conv (jit_convention::length),
+                                mcan_error (false)
+{}
+
+jit_function::jit_function (llvm::Module *amodule,
+                            jit_convention::type acall_conv,
+                            const llvm::Twine& aname, jit_type *aresult,
+                            const std::vector<jit_type *>& aargs)
+  : module (amodule), mresult (aresult), args (aargs), call_conv (acall_conv),
+    mcan_error (false)
+{
+  llvm::SmallVector<llvm::Type *, 15> llvm_args;
+
+  llvm::Type *rtype = llvm::Type::getVoidTy (context);
+  if (mresult)
+    {
+      rtype = mresult->packed_type (call_conv);
+      if (sret ())
+        {
+          llvm_args.push_back (rtype->getPointerTo ());
+          rtype = llvm::Type::getVoidTy (context);
+        }
+    }
+
+  for (std::vector<jit_type *>::const_iterator iter = args.begin ();
+       iter != args.end (); ++iter)
+    {
+      jit_type *ty = *iter;
+      assert (ty);
+      llvm::Type *argty = ty->packed_type (call_conv);
+      if (ty->pointer_arg (call_conv))
+        argty = argty->getPointerTo ();
+
+      llvm_args.push_back (argty);
+    }
+
+  // we mark all functinos as external linkage because this prevents llvm
+  // from getting rid of always inline functions
+  llvm::FunctionType *ft = llvm::FunctionType::get (rtype, llvm_args, false);
+  llvm_function = llvm::Function::Create (ft, llvm::Function::ExternalLinkage,
+                                          aname, module);
+  if (call_conv == jit_convention::internal)
+    llvm_function->addFnAttr (llvm::Attribute::AlwaysInline);
+}
+
+jit_function::jit_function (const jit_function& fn, jit_type *aresult,
+                            const std::vector<jit_type *>& aargs)
+  : module (fn.module), llvm_function (fn.llvm_function), mresult (aresult),
+    args (aargs), call_conv (fn.call_conv), mcan_error (fn.mcan_error)
+{
+}
+
+jit_function::jit_function (const jit_function& fn)
+  : module (fn.module), llvm_function (fn.llvm_function), mresult (fn.mresult),
+    args (fn.args), call_conv (fn.call_conv), mcan_error (fn.mcan_error)
+{}
+
+std::string
+jit_function::name (void) const
+{
+  return llvm_function->getName ();
+}
+
+llvm::BasicBlock *
+jit_function::new_block (const std::string& aname,
+                         llvm::BasicBlock *insert_before)
+{
+  return llvm::BasicBlock::Create (context, aname, llvm_function,
+                                   insert_before);
+}
+
+llvm::Value *
+jit_function::call (llvm::IRBuilderD& builder,
+                    const std::vector<jit_value *>& in_args) const
+{
+  if (! valid ())
+    throw jit_fail_exception ("Call not implemented");
+
+  assert (in_args.size () == args.size ());
+  std::vector<llvm::Value *> llvm_args (args.size ());
+  for (size_t i = 0; i < in_args.size (); ++i)
+    llvm_args[i] = in_args[i]->to_llvm ();
+
+  return call (builder, llvm_args);
+}
+
+llvm::Value *
+jit_function::call (llvm::IRBuilderD& builder,
+                    const std::vector<llvm::Value *>& in_args) const
+{
+  if (! valid ())
+    throw jit_fail_exception ("Call not implemented");
+
+  assert (in_args.size () == args.size ());
+  llvm::Function *stacksave
+    = llvm::Intrinsic::getDeclaration (module, llvm::Intrinsic::stacksave);
+  llvm::SmallVector<llvm::Value *, 10> llvm_args;
+  llvm_args.reserve (in_args.size () + sret ());
+
+  llvm::Value *sret_mem = 0;
+  llvm::Value *saved_stack = 0;
+  if (sret ())
+    {
+      saved_stack = builder.CreateCall (stacksave);
+      sret_mem = builder.CreateAlloca (mresult->packed_type (call_conv));
+      llvm_args.push_back (sret_mem);
+    }
+
+  for (size_t i = 0; i < in_args.size (); ++i)
+    {
+      llvm::Value *arg = in_args[i];
+      jit_type::convert_fn convert = args[i]->pack (call_conv);
+      if (convert)
+        arg = convert (builder, arg);
+
+      if (args[i]->pointer_arg (call_conv))
+        {
+          if (! saved_stack)
+            saved_stack = builder.CreateCall (stacksave);
+
+          arg = builder.CreateAlloca (args[i]->to_llvm ());
+          builder.CreateStore (in_args[i], arg);
+        }
+
+      llvm_args.push_back (arg);
+    }
+
+  llvm::Value *ret = builder.CreateCall (llvm_function, llvm_args);
+  if (sret_mem)
+    ret = builder.CreateLoad (sret_mem);
+
+  if (mresult)
+    {
+      jit_type::convert_fn unpack = mresult->unpack (call_conv);
+      if (unpack)
+        ret = unpack (builder, ret);
+    }
+
+  if (saved_stack)
+    {
+      llvm::Function *stackrestore
+        = llvm::Intrinsic::getDeclaration (module,
+                                           llvm::Intrinsic::stackrestore);
+      builder.CreateCall (stackrestore, saved_stack);
+    }
+
+  return ret;
+}
+
+llvm::Value *
+jit_function::argument (llvm::IRBuilderD& builder, size_t idx) const
+{
+  assert (idx < args.size ());
+
+  // FIXME: We should be treating arguments like a list, not a vector. Shouldn't
+  // matter much for now, as the number of arguments shouldn't be much bigger
+  // than 4
+  llvm::Function::arg_iterator iter = llvm_function->arg_begin ();
+  if (sret ())
+    ++iter;
+
+  for (size_t i = 0; i < idx; ++i, ++iter);
+
+  if (args[idx]->pointer_arg (call_conv))
+    return builder.CreateLoad (iter);
+
+  return iter;
+}
+
+void
+jit_function::do_return (llvm::IRBuilderD& builder, llvm::Value *rval)
+{
+  assert (! rval == ! mresult);
+
+  if (rval)
+    {
+      jit_type::convert_fn convert = mresult->pack (call_conv);
+      if (convert)
+        rval = convert (builder, rval);
+
+      if (sret ())
+        builder.CreateStore (rval, llvm_function->arg_begin ());
+      else
+        builder.CreateRet (rval);
+    }
+  else
+    builder.CreateRetVoid ();
+
+  llvm::verifyFunction (*llvm_function);
+}
+
+void
+jit_function::do_add_mapping (llvm::ExecutionEngine *engine, void *fn)
+{
+  assert (valid ());
+  engine->addGlobalMapping (llvm_function, fn);
+}
+
+std::ostream&
+operator<< (std::ostream& os, const jit_function& fn)
+{
+  llvm::Function *lfn = fn.to_llvm ();
+  os << "jit_function: cc=" << fn.call_conv;
+  llvm::raw_os_ostream llvm_out (os);
+  lfn->print (llvm_out);
+  llvm_out.flush ();
+  return os;
+}
+
+// -------------------- jit_operation --------------------
+jit_operation::~jit_operation (void)
+{
+  for (generated_map::iterator iter = generated.begin ();
+       iter != generated.end (); ++iter)
+    {
+      delete iter->first;
+      delete iter->second;
+    }
+}
+
+void
+jit_operation::add_overload (const jit_function& func,
+                            const std::vector<jit_type*>& args)
+{
+  if (args.size () >= overloads.size ())
+    overloads.resize (args.size () + 1);
+
+  Array<jit_function>& over = overloads[args.size ()];
+  dim_vector dv (over.dims ());
+  Array<octave_idx_type> idx = to_idx (args);
+  bool must_resize = false;
+
+  if (dv.length () != idx.numel ())
+    {
+      dv.resize (idx.numel ());
+      must_resize = true;
+    }
+
+  for (octave_idx_type i = 0; i < dv.length (); ++i)
+    if (dv(i) <= idx(i))
+      {
+        must_resize = true;
+        dv(i) = idx(i) + 1;
+      }
+
+  if (must_resize)
+    over.resize (dv);
+
+  over(idx) = func;
+}
+
+const jit_function&
+jit_operation::overload (const std::vector<jit_type*>& types) const
+{
+  static jit_function null_overload;
+  for (size_t i  =0; i < types.size (); ++i)
+    if (! types[i])
+      return null_overload;
+
+  if (types.size () >= overloads.size ())
+    return do_generate (types);
+
+  const Array<jit_function>& over = overloads[types.size ()];
+  dim_vector dv (over.dims ());
+  Array<octave_idx_type> idx = to_idx (types);
+  for (octave_idx_type i = 0; i < dv.length (); ++i)
+    if (idx(i) >= dv(i))
+      return do_generate (types);
+
+  const jit_function& ret = over(idx);
+  if (! ret.valid ())
+    return do_generate (types);
+
+  return ret;
+}
+
+Array<octave_idx_type>
+jit_operation::to_idx (const std::vector<jit_type*>& types) const
+{
+  octave_idx_type numel = types.size ();
+  if (numel == 1)
+    numel = 2;
+
+  Array<octave_idx_type> idx (dim_vector (1, numel));
+  for (octave_idx_type i = 0; i < static_cast<octave_idx_type> (types.size ());
+       ++i)
+    idx(i) = types[i]->type_id ();
+
+  if (types.size () == 1)
+    {
+      idx(1) = idx(0);
+      idx(0) = 0;
+    }
+
+  return idx;
+}
+
+const jit_function&
+jit_operation::do_generate (const signature_vec& types) const
+{
+  static jit_function null_overload;
+  generated_map::const_iterator find = generated.find (&types);
+  if (find != generated.end ())
+    {
+      if (find->second)
+        return *find->second;
+      else
+        return null_overload;
+    }
+
+  jit_function *ret = generate (types);
+  generated[new signature_vec (types)] = ret;
+  return ret ? *ret : null_overload;
+}
+
+jit_function *
+jit_operation::generate (const signature_vec&) const
+{
+  return 0;
+}
+
+bool
+jit_operation::signature_cmp
+::operator() (const signature_vec *lhs, const signature_vec *rhs)
+{
+  const signature_vec& l = *lhs;
+  const signature_vec& r = *rhs;
+
+  if (l.size () < r.size ())
+    return true;
+  else if (l.size () > r.size ())
+    return false;
+
+  for (size_t i = 0; i < l.size (); ++i)
+    {
+      if (l[i]->type_id () < r[i]->type_id ())
+        return true;
+      else if (l[i]->type_id () > r[i]->type_id ())
+        return false;
+    }
+
+  return false;
+}
+
+// -------------------- jit_index_operation --------------------
+jit_function *
+jit_index_operation::generate (const signature_vec& types) const
+{
+  if (types.size () > 2 && types[0] == jit_typeinfo::get_matrix ())
+    {
+      // indexing a matrix with scalars
+      jit_type *scalar = jit_typeinfo::get_scalar ();
+      for (size_t i = 1; i < types.size (); ++i)
+        if (types[i] != scalar)
+          return 0;
+
+      return generate_matrix (types);
+    }
+
+  return 0;
+}
+
+llvm::Value *
+jit_index_operation::create_arg_array (llvm::IRBuilderD& builder,
+                                       const jit_function &fn, size_t start_idx,
+                                       size_t end_idx) const
+{
+  size_t n = end_idx - start_idx;
+  llvm::Type *scalar_t = jit_typeinfo::get_scalar_llvm ();
+  llvm::ArrayType *array_t = llvm::ArrayType::get (scalar_t, n);
+  llvm::Value *array = llvm::UndefValue::get (array_t);
+  for (size_t i = start_idx; i < end_idx; ++i)
+    {
+      llvm::Value *idx = fn.argument (builder, i);
+      array = builder.CreateInsertValue (array, idx, i - start_idx);
+    }
+
+  llvm::Value *array_mem = builder.CreateAlloca (array_t);
+  builder.CreateStore (array, array_mem);
+  return builder.CreateBitCast (array_mem, scalar_t->getPointerTo ());
+}
+
+// -------------------- jit_paren_subsref --------------------
+jit_function *
+jit_paren_subsref::generate_matrix (const signature_vec& types) const
+{
+  std::stringstream ss;
+  ss << "jit_paren_subsref_matrix_scalar" << (types.size () - 1);
+
+  jit_type *scalar = jit_typeinfo::get_scalar ();
+  jit_function *fn = new jit_function (module, jit_convention::internal,
+                                       ss.str (), scalar, types);
+  fn->mark_can_error ();
+  llvm::BasicBlock *body = fn->new_block ();
+  llvm::IRBuilder<> builder (body);
+
+  llvm::Value *array = create_arg_array (builder, *fn, 1, types.size ());
+  jit_type *index = jit_typeinfo::get_index ();
+  llvm::Value *nelem = llvm::ConstantInt::get (index->to_llvm (),
+                                               types.size () - 1);
+  llvm::Value *mat = fn->argument (builder, 0);
+  llvm::Value *ret = paren_scalar.call (builder, mat, array, nelem);
+  fn->do_return (builder, ret);
+  return fn;
+}
+
+void
+jit_paren_subsref::do_initialize (void)
+{
+  std::vector<jit_type *> types (3);
+  types[0] = jit_typeinfo::get_matrix ();
+  types[1] = jit_typeinfo::get_scalar_ptr ();
+  types[2] = jit_typeinfo::get_index ();
+
+  jit_type *scalar = jit_typeinfo::get_scalar ();
+  paren_scalar = jit_function (module, jit_convention::external,
+                               "octave_jit_paren_scalar", scalar, types);
+  paren_scalar.add_mapping (engine, &octave_jit_paren_scalar);
+  paren_scalar.mark_can_error ();
+}
+
+// -------------------- jit_paren_subsasgn --------------------
+jit_function *
+jit_paren_subsasgn::generate_matrix (const signature_vec& types) const
+{
+  std::stringstream ss;
+  ss << "jit_paren_subsasgn_matrix_scalar" << (types.size () - 2);
+
+  jit_type *matrix = jit_typeinfo::get_matrix ();
+  jit_function *fn = new jit_function (module, jit_convention::internal,
+                                       ss.str (), matrix, types);
+  fn->mark_can_error ();
+  llvm::BasicBlock *body = fn->new_block ();
+  llvm::IRBuilder<> builder (body);
+
+  llvm::Value *array = create_arg_array (builder, *fn, 1, types.size () - 1);
+  jit_type *index = jit_typeinfo::get_index ();
+  llvm::Value *nelem = llvm::ConstantInt::get (index->to_llvm (),
+                                               types.size () - 2);
+
+  llvm::Value *mat = fn->argument (builder, 0);
+  llvm::Value *value = fn->argument (builder, types.size () - 1);
+  llvm::Value *ret = paren_scalar.call (builder, mat, array, nelem, value);
+  fn->do_return (builder, ret);
+  return fn;
+}
+
+void
+jit_paren_subsasgn::do_initialize (void)
+{
+  if (paren_scalar.valid ())
+    return;
+
+  jit_type *matrix = jit_typeinfo::get_matrix ();
+  std::vector<jit_type *> types (4);
+  types[0] = matrix;
+  types[1] = jit_typeinfo::get_scalar_ptr ();
+  types[2] = jit_typeinfo::get_index ();
+  types[3] = jit_typeinfo::get_scalar ();
+
+  paren_scalar = jit_function (module, jit_convention::external,
+                               "octave_jit_paren_scalar", matrix, types);
+  paren_scalar.add_mapping (engine, &octave_jit_paren_scalar_subsasgn);
+  paren_scalar.mark_can_error ();
+}
+
+// -------------------- jit_typeinfo --------------------
+void
+jit_typeinfo::initialize (llvm::Module *m, llvm::ExecutionEngine *e)
+{
+  new jit_typeinfo (m, e);
+}
+
+jit_typeinfo::jit_typeinfo (llvm::Module *m, llvm::ExecutionEngine *e)
+  : module (m), engine (e), next_id (0),
+    builder (*new llvm::IRBuilderD (context))
+{
+  instance = this;
+
+  // FIXME: We should be registering types like in octave_value_typeinfo
+  llvm::Type *any_t = llvm::StructType::create (context, "octave_base_value");
+  any_t = any_t->getPointerTo ();
+
+  llvm::Type *scalar_t = llvm::Type::getDoubleTy (context);
+  llvm::Type *bool_t = llvm::Type::getInt1Ty (context);
+  llvm::Type *string_t = llvm::Type::getInt8Ty (context);
+  string_t = string_t->getPointerTo ();
+  llvm::Type *index_t = llvm::Type::getIntNTy (context,
+                                               sizeof(octave_idx_type) * 8);
+
+  llvm::StructType *range_t = llvm::StructType::create (context, "range");
+  std::vector<llvm::Type *> range_contents (4, scalar_t);
+  range_contents[3] = index_t;
+  range_t->setBody (range_contents);
+
+  llvm::Type *refcount_t = llvm::Type::getIntNTy (context, sizeof(int) * 8);
+
+  llvm::StructType *matrix_t = llvm::StructType::create (context, "matrix");
+  llvm::Type *matrix_contents[5];
+  matrix_contents[0] = refcount_t->getPointerTo ();
+  matrix_contents[1] = scalar_t->getPointerTo ();
+  matrix_contents[2] = index_t;
+  matrix_contents[3] = index_t->getPointerTo ();
+  matrix_contents[4] = string_t;
+  matrix_t->setBody (llvm::makeArrayRef (matrix_contents, 5));
+
+  llvm::Type *complex_t = llvm::VectorType::get (scalar_t, 2);
+
+  // complex_ret is what is passed to C functions in order to get calling
+  // convention right
+  complex_ret = llvm::StructType::create (context, "complex_ret");
+  llvm::Type *complex_ret_contents[] = {scalar_t, scalar_t};
+  complex_ret->setBody (complex_ret_contents);
+
+  // create types
+  any = new_type ("any", 0, any_t);
+  matrix = new_type ("matrix", any, matrix_t);
+  complex = new_type ("complex", any, complex_t);
+  scalar = new_type ("scalar", complex, scalar_t);
+  scalar_ptr = new_type ("scalar_ptr", 0, scalar_t->getPointerTo ());
+  any_ptr = new_type ("any_ptr", 0, any_t->getPointerTo ());
+  range = new_type ("range", any, range_t);
+  string = new_type ("string", any, string_t);
+  boolean = new_type ("bool", any, bool_t);
+  index = new_type ("index", any, index_t);
+
+  create_int (8);
+  create_int (16);
+  create_int (32);
+  create_int (64);
+
+  casts.resize (next_id + 1);
+  identities.resize (next_id + 1);
+
+  // specify calling conventions
+  // FIXME: We should detect architecture and do something sane based on that
+  // here we assume x86 or x86_64
+  matrix->mark_sret ();
+  matrix->mark_pointer_arg ();
+
+  range->mark_sret ();
+  range->mark_pointer_arg ();
+
+  complex->set_pack (jit_convention::external, &jit_typeinfo::pack_complex);
+  complex->set_unpack (jit_convention::external, &jit_typeinfo::unpack_complex);
+  complex->set_packed_type (jit_convention::external, complex_ret);
+
+  if (sizeof (void *) == 4)
+    complex->mark_sret ();
+
+  paren_subsref_fn.initialize (module, engine);
+  paren_subsasgn_fn.initialize (module, engine);
+
+  // bind global variables
+  lerror_state = new llvm::GlobalVariable (*module, bool_t, false,
+                                           llvm::GlobalValue::ExternalLinkage,
+                                           0, "error_state");
+  engine->addGlobalMapping (lerror_state,
+                            reinterpret_cast<void *> (&error_state));
+
+  // generic call function
+  {
+    jit_type *int_t = intN (sizeof (octave_builtin::fcn) * 8);
+    any_call = create_function (jit_convention::external, "octave_jit_call",
+                                any, int_t, int_t, any_ptr, int_t);
+    any_call.add_mapping (engine, &octave_jit_call);
+  }
+
+  // any with anything is an any op
+  jit_function fn;
+  jit_type *binary_op_type = intN (sizeof (octave_value::binary_op) * 8);
+  llvm::Type *llvm_bo_type = binary_op_type->to_llvm ();
+  jit_function any_binary = create_function (jit_convention::external,
+                                             "octave_jit_binary_any_any",
+                                             any, binary_op_type, any, any);
+  any_binary.add_mapping (engine, &octave_jit_binary_any_any);
+  any_binary.mark_can_error ();
+  binary_ops.resize (octave_value::num_binary_ops);
+  for (size_t i = 0; i < octave_value::num_binary_ops; ++i)
+    {
+      octave_value::binary_op op = static_cast<octave_value::binary_op> (i);
+      std::string op_name = octave_value::binary_op_as_string (op);
+      binary_ops[i].stash_name ("binary" + op_name);
+    }
+
+  unary_ops.resize (octave_value::num_unary_ops);
+  for (size_t i = 0; i < octave_value::num_unary_ops; ++i)
+    {
+      octave_value::unary_op op = static_cast<octave_value::unary_op> (i);
+      std::string op_name = octave_value::unary_op_as_string (op);
+      unary_ops[i].stash_name ("unary" + op_name);
+    }
+
+  for (int op = 0; op < octave_value::num_binary_ops; ++op)
+    {
+      llvm::Twine fn_name ("octave_jit_binary_any_any_");
+      fn_name = fn_name + llvm::Twine (op);
+
+      fn = create_function (jit_convention::internal, fn_name, any, any, any);
+      fn.mark_can_error ();
+      llvm::BasicBlock *block = fn.new_block ();
+      builder.SetInsertPoint (block);
+      llvm::APInt op_int(sizeof (octave_value::binary_op) * 8, op,
+                         std::numeric_limits<octave_value::binary_op>::is_signed);
+      llvm::Value *op_as_llvm = llvm::ConstantInt::get (llvm_bo_type, op_int);
+      llvm::Value *ret = any_binary.call (builder, op_as_llvm,
+                                          fn.argument (builder, 0),
+                                          fn.argument (builder, 1));
+      fn.do_return (builder, ret);
+      binary_ops[op].add_overload (fn);
+    }
+
+  // grab any
+  fn = create_function (jit_convention::external, "octave_jit_grab_any", any,
+                        any);
+  fn.add_mapping (engine, &octave_jit_grab_any);
+  grab_fn.add_overload (fn);
+  grab_fn.stash_name ("grab");
+
+  // grab matrix
+  fn = create_function (jit_convention::external, "octave_jit_grab_matrix",
+                        matrix, matrix);
+  fn.add_mapping (engine, &octave_jit_grab_matrix);
+  grab_fn.add_overload (fn);
+
+  // release any
+  fn = create_function (jit_convention::external, "octave_jit_release_any", 0,
+                        any);
+  fn.add_mapping (engine, &octave_jit_release_any);
+  release_fn.add_overload (fn);
+  release_fn.stash_name ("release");
+
+  // release matrix
+  fn = create_function (jit_convention::external, "octave_jit_release_matrix",
+                        0, matrix);
+  fn.add_mapping (engine, &octave_jit_release_matrix);
+  release_fn.add_overload (fn);
+
+  // copy
+  copy_fn.stash_name ("copy");
+  copy_fn.add_overload (create_identity (scalar));
+
+  // now for binary scalar operations
+  add_binary_op (scalar, octave_value::op_add, llvm::Instruction::FAdd);
+  add_binary_op (scalar, octave_value::op_sub, llvm::Instruction::FSub);
+  add_binary_op (scalar, octave_value::op_mul, llvm::Instruction::FMul);
+  add_binary_op (scalar, octave_value::op_el_mul, llvm::Instruction::FMul);
+
+  add_binary_fcmp (scalar, octave_value::op_lt, llvm::CmpInst::FCMP_ULT);
+  add_binary_fcmp (scalar, octave_value::op_le, llvm::CmpInst::FCMP_ULE);
+  add_binary_fcmp (scalar, octave_value::op_eq, llvm::CmpInst::FCMP_UEQ);
+  add_binary_fcmp (scalar, octave_value::op_ge, llvm::CmpInst::FCMP_UGE);
+  add_binary_fcmp (scalar, octave_value::op_gt, llvm::CmpInst::FCMP_UGT);
+  add_binary_fcmp (scalar, octave_value::op_ne, llvm::CmpInst::FCMP_UNE);
+
+  jit_function gripe_div0 = create_function (jit_convention::external,
+                                             "gripe_divide_by_zero", 0);
+  gripe_div0.add_mapping (engine, &gripe_divide_by_zero);
+  gripe_div0.mark_can_error ();
+
+  // divide is annoying because it might error
+  fn = create_function (jit_convention::internal,
+                        "octave_jit_div_scalar_scalar", scalar, scalar, scalar);
+  fn.mark_can_error ();
+
+  llvm::BasicBlock *body = fn.new_block ();
+  builder.SetInsertPoint (body);
+  {
+    llvm::BasicBlock *warn_block = fn.new_block ("warn");
+    llvm::BasicBlock *normal_block = fn.new_block ("normal");
+
+    llvm::Value *zero = llvm::ConstantFP::get (scalar_t, 0);
+    llvm::Value *check = builder.CreateFCmpUEQ (zero, fn.argument (builder, 1));
+    builder.CreateCondBr (check, warn_block, normal_block);
+
+    builder.SetInsertPoint (warn_block);
+    gripe_div0.call (builder);
+    builder.CreateBr (normal_block);
+
+    builder.SetInsertPoint (normal_block);
+    llvm::Value *ret = builder.CreateFDiv (fn.argument (builder, 0),
+                                           fn.argument (builder, 1));
+    fn.do_return (builder, ret);
+  }
+  binary_ops[octave_value::op_div].add_overload (fn);
+  binary_ops[octave_value::op_el_div].add_overload (fn);
+
+  // ldiv is the same as div with the operators reversed
+  fn = mirror_binary (fn);
+  binary_ops[octave_value::op_ldiv].add_overload (fn);
+  binary_ops[octave_value::op_el_ldiv].add_overload (fn);
+
+  // In general, the result of scalar ^ scalar is a complex number. We might be
+  // able to improve on this if we keep track of the range of values varaibles
+  // can take on.
+  fn = create_function (jit_convention::external,
+                        "octave_jit_pow_scalar_scalar", complex, scalar,
+                        scalar);
+  fn.add_mapping (engine, &octave_jit_pow_scalar_scalar);
+  binary_ops[octave_value::op_pow].add_overload (fn);
+  binary_ops[octave_value::op_el_pow].add_overload (fn);
+
+  // now for unary scalar operations
+  // FIXME: Impelment not
+  fn = create_function (jit_convention::internal, "octave_jit_++", scalar,
+                        scalar);
+  body = fn.new_block ();
+  builder.SetInsertPoint (body);
+  {
+    llvm::Value *one = llvm::ConstantFP::get (scalar_t, 1);
+    llvm::Value *val = fn.argument (builder, 0);
+    val = builder.CreateFAdd (val, one);
+    fn.do_return (builder, val);
+  }
+  unary_ops[octave_value::op_incr].add_overload (fn);
+
+  fn = create_function (jit_convention::internal, "octave_jit_--", scalar,
+                        scalar);
+  body = fn.new_block ();
+  builder.SetInsertPoint (body);
+  {
+    llvm::Value *one = llvm::ConstantFP::get (scalar_t, 1);
+    llvm::Value *val = fn.argument (builder, 0);
+    val = builder.CreateFSub (val, one);
+    fn.do_return (builder, val);
+  }
+  unary_ops[octave_value::op_decr].add_overload (fn);
+
+  fn = create_function (jit_convention::internal, "octave_jit_uminus", scalar,
+                        scalar);
+  body = fn.new_block ();
+  builder.SetInsertPoint (body);
+  {
+    llvm::Value *mone = llvm::ConstantFP::get (scalar_t, -1);
+    llvm::Value *val = fn.argument (builder, 0);
+    val = builder.CreateFMul (val, mone);
+    fn.do_return (builder, val);
+  }
+
+  fn = create_identity (scalar);
+  unary_ops[octave_value::op_uplus].add_overload (fn);
+  unary_ops[octave_value::op_transpose].add_overload (fn);
+  unary_ops[octave_value::op_hermitian].add_overload (fn);
+
+  // now for binary complex operations
+  add_binary_op (complex, octave_value::op_add, llvm::Instruction::FAdd);
+  add_binary_op (complex, octave_value::op_sub, llvm::Instruction::FSub);
+
+  fn = create_function (jit_convention::internal,
+                        "octave_jit_*_complex_complex", complex, complex,
+                        complex);
+  body = fn.new_block ();
+  builder.SetInsertPoint (body);
+  {
+    // (x0*x1 - y0*y1, x0*y1 + y0*x1) = (x0,y0) * (x1,y1)
+    // We compute this in one vectorized multiplication, a subtraction, and an
+    // addition.
+    llvm::Value *lhs = fn.argument (builder, 0);
+    llvm::Value *rhs = fn.argument (builder, 1);
+
+    // FIXME: We need a better way of doing this, working with llvm's IR
+    // directly is sort of a pain.
+    llvm::Value *zero = builder.getInt32 (0);
+    llvm::Value *one = builder.getInt32 (1);
+    llvm::Value *two = builder.getInt32 (2);
+    llvm::Value *three = builder.getInt32 (3);
+
+    llvm::Type *vec4 = llvm::VectorType::get (scalar_t, 4);
+    llvm::Value *mlhs = llvm::UndefValue::get (vec4);
+    llvm::Value *mrhs = mlhs;
+
+    llvm::Value *temp = complex_real (lhs);
+    mlhs = builder.CreateInsertElement (mlhs, temp, zero);
+    mlhs = builder.CreateInsertElement (mlhs, temp, two);
+    temp = complex_imag (lhs);
+    mlhs = builder.CreateInsertElement (mlhs, temp, one);
+    mlhs = builder.CreateInsertElement (mlhs, temp, three);
+
+    temp = complex_real (rhs);
+    mrhs = builder.CreateInsertElement (mrhs, temp, zero);
+    mrhs = builder.CreateInsertElement (mrhs, temp, three);
+    temp = complex_imag (rhs);
+    mrhs = builder.CreateInsertElement (mrhs, temp, one);
+    mrhs = builder.CreateInsertElement (mrhs, temp, two);
+
+    llvm::Value *mres = builder.CreateFMul (mlhs, mrhs);
+    llvm::Value *tlhs = builder.CreateExtractElement (mres, zero);
+    llvm::Value *trhs = builder.CreateExtractElement (mres, one);
+    llvm::Value *ret_real = builder.CreateFSub (tlhs, trhs);
+
+    tlhs = builder.CreateExtractElement (mres, two);
+    trhs = builder.CreateExtractElement (mres, three);
+    llvm::Value *ret_imag = builder.CreateFAdd (tlhs, trhs);
+    fn.do_return (builder, complex_new (ret_real, ret_imag));
+  }
+
+  binary_ops[octave_value::op_mul].add_overload (fn);
+  binary_ops[octave_value::op_el_mul].add_overload (fn);
+
+  jit_function complex_div = create_function (jit_convention::external,
+                                              "octave_jit_complex_div",
+                                              complex, complex, complex);
+  complex_div.add_mapping (engine, &octave_jit_complex_div);
+  complex_div.mark_can_error ();
+  binary_ops[octave_value::op_div].add_overload (fn);
+  binary_ops[octave_value::op_ldiv].add_overload (fn);
+
+  fn = mirror_binary (complex_div);
+  binary_ops[octave_value::op_ldiv].add_overload (fn);
+  binary_ops[octave_value::op_el_ldiv].add_overload (fn);
+
+  fn = create_function (jit_convention::external,
+                        "octave_jit_pow_complex_complex", complex, complex,
+                        complex);
+  fn.add_mapping (engine, &octave_jit_pow_complex_complex);
+  binary_ops[octave_value::op_pow].add_overload (fn);
+  binary_ops[octave_value::op_el_pow].add_overload (fn);
+
+  fn = create_function (jit_convention::internal,
+                        "octave_jit_*_scalar_complex", complex, scalar,
+                        complex);
+  jit_function mul_scalar_complex = fn;
+  body = fn.new_block ();
+  builder.SetInsertPoint (body);
+  {
+    llvm::Value *lhs = fn.argument (builder, 0);
+    llvm::Value *tlhs = complex_new (lhs, lhs);
+    llvm::Value *rhs = fn.argument (builder, 1);
+    fn.do_return (builder, builder.CreateFMul (tlhs, rhs));
+  }
+  binary_ops[octave_value::op_mul].add_overload (fn);
+  binary_ops[octave_value::op_el_mul].add_overload (fn);
+
+
+  fn = mirror_binary (mul_scalar_complex);
+  binary_ops[octave_value::op_mul].add_overload (fn);
+  binary_ops[octave_value::op_el_mul].add_overload (fn);
+
+  fn = create_function (jit_convention::internal, "octave_jit_+_scalar_complex",
+                        complex, scalar, complex);
+  body = fn.new_block ();
+  builder.SetInsertPoint (body);
+  {
+    llvm::Value *lhs = fn.argument (builder, 0);
+    llvm::Value *rhs = fn.argument (builder, 1);
+    llvm::Value *real = builder.CreateFAdd (lhs, complex_real (rhs));
+    fn.do_return (builder, complex_real (rhs, real));
+  }
+  binary_ops[octave_value::op_add].add_overload (fn);
+
+  fn = mirror_binary (fn);
+  binary_ops[octave_value::op_add].add_overload (fn);
+
+  fn = create_function (jit_convention::internal, "octave_jit_-_complex_scalar",
+                        complex, complex, scalar);
+  body = fn.new_block ();
+  builder.SetInsertPoint (body);
+  {
+    llvm::Value *lhs = fn.argument (builder, 0);
+    llvm::Value *rhs = fn.argument (builder, 1);
+    llvm::Value *real = builder.CreateFSub (complex_real (lhs), rhs);
+    fn.do_return (builder, complex_real (lhs, real));
+  }
+  binary_ops[octave_value::op_sub].add_overload (fn);
+
+  fn = create_function (jit_convention::internal, "octave_jit_-_scalar_complex",
+                        complex, scalar, complex);
+  body = fn.new_block ();
+  builder.SetInsertPoint (body);
+  {
+    llvm::Value *lhs = fn.argument (builder, 0);
+    llvm::Value *rhs = fn.argument (builder, 1);
+    llvm::Value *real = builder.CreateFSub (lhs, complex_real (rhs));
+    fn.do_return (builder, complex_real (rhs, real));
+  }
+  binary_ops[octave_value::op_sub].add_overload (fn);
+
+  fn = create_function (jit_convention::external,
+                        "octave_jit_pow_scalar_complex", complex, scalar,
+                        complex);
+  fn.add_mapping (engine, &octave_jit_pow_scalar_complex);
+  binary_ops[octave_value::op_pow].add_overload (fn);
+  binary_ops[octave_value::op_el_pow].add_overload (fn);
+
+  fn = create_function (jit_convention::external,
+                        "octave_jit_pow_complex_scalar", complex, complex,
+                        scalar);
+  fn.add_mapping (engine, &octave_jit_pow_complex_scalar);
+  binary_ops[octave_value::op_pow].add_overload (fn);
+  binary_ops[octave_value::op_el_pow].add_overload (fn);
+
+  // now for binary index operators
+  add_binary_op (index, octave_value::op_add, llvm::Instruction::Add);
+
+  // and binary bool operators
+  add_binary_op (boolean, octave_value::op_el_or, llvm::Instruction::Or);
+  add_binary_op (boolean, octave_value::op_el_and, llvm::Instruction::And);
+
+  // now for printing functions
+  print_fn.stash_name ("print");
+  add_print (any, reinterpret_cast<void *> (&octave_jit_print_any));
+  add_print (scalar, reinterpret_cast<void *> (&octave_jit_print_scalar));
+
+  // initialize for loop
+  for_init_fn.stash_name ("for_init");
+
+  fn = create_function (jit_convention::internal, "octave_jit_for_range_init",
+                        index, range);
+  body = fn.new_block ();
+  builder.SetInsertPoint (body);
+  {
+    llvm::Value *zero = llvm::ConstantInt::get (index_t, 0);
+    fn.do_return (builder, zero);
+  }
+  for_init_fn.add_overload (fn);
+
+  // bounds check for for loop
+  for_check_fn.stash_name ("for_check");
+
+  fn = create_function (jit_convention::internal, "octave_jit_for_range_check",
+                        boolean, range, index);
+  body = fn.new_block ();
+  builder.SetInsertPoint (body);
+  {
+    llvm::Value *nelem
+      = builder.CreateExtractValue (fn.argument (builder, 0), 3);
+    llvm::Value *idx = fn.argument (builder, 1);
+    llvm::Value *ret = builder.CreateICmpULT (idx, nelem);
+    fn.do_return (builder, ret);
+  }
+  for_check_fn.add_overload (fn);
+
+  // index variabe for for loop
+  for_index_fn.stash_name ("for_index");
+
+  fn = create_function (jit_convention::internal, "octave_jit_for_range_idx",
+                        scalar, range, index);
+  body = fn.new_block ();
+  builder.SetInsertPoint (body);
+  {
+    llvm::Value *idx = fn.argument (builder, 1);
+    llvm::Value *didx = builder.CreateSIToFP (idx, scalar_t);
+    llvm::Value *rng = fn.argument (builder, 0);
+    llvm::Value *base = builder.CreateExtractValue (rng, 0);
+    llvm::Value *inc = builder.CreateExtractValue (rng, 2);
+
+    llvm::Value *ret = builder.CreateFMul (didx, inc);
+    ret = builder.CreateFAdd (base, ret);
+    fn.do_return (builder, ret);
+  }
+  for_index_fn.add_overload (fn);
+
+  // logically true
+  logically_true_fn.stash_name ("logically_true");
+
+  jit_function gripe_nantl
+    = create_function (jit_convention::external,
+                       "octave_jit_gripe_nan_to_logical_conversion", 0);
+  gripe_nantl.add_mapping (engine, &octave_jit_gripe_nan_to_logical_conversion);
+  gripe_nantl.mark_can_error ();
+
+  fn = create_function (jit_convention::internal,
+                        "octave_jit_logically_true_scalar", boolean, scalar);
+  fn.mark_can_error ();
+
+  body = fn.new_block ();
+  builder.SetInsertPoint (body);
+  {
+    llvm::BasicBlock *error_block = fn.new_block ("error");
+    llvm::BasicBlock *normal_block = fn.new_block ("normal");
+
+    llvm::Value *check = builder.CreateFCmpUNE (fn.argument (builder, 0),
+                                                fn.argument (builder, 0));
+    builder.CreateCondBr (check, error_block, normal_block);
+
+    builder.SetInsertPoint (error_block);
+    gripe_nantl.call (builder);
+    builder.CreateBr (normal_block);
+    builder.SetInsertPoint (normal_block);
+
+    llvm::Value *zero = llvm::ConstantFP::get (scalar_t, 0);
+    llvm::Value *ret = builder.CreateFCmpONE (fn.argument (builder, 0), zero);
+    fn.do_return (builder, ret);
+  }
+  logically_true_fn.add_overload (fn);
+
+  // logically_true boolean
+  fn = create_identity (boolean);
+  logically_true_fn.add_overload (fn);
+
+  // make_range
+  // FIXME: May be benificial to implement all in LLVM
+  make_range_fn.stash_name ("make_range");
+  jit_function compute_nelem
+    = create_function (jit_convention::external, "octave_jit_compute_nelem",
+                       index, scalar, scalar, scalar);
+  compute_nelem.add_mapping (engine, &octave_jit_compute_nelem);
+
+  fn = create_function (jit_convention::internal, "octave_jit_make_range",
+                        range, scalar, scalar, scalar);
+  body = fn.new_block ();
+  builder.SetInsertPoint (body);
+  {
+    llvm::Value *base = fn.argument (builder, 0);
+    llvm::Value *limit = fn.argument (builder, 1);
+    llvm::Value *inc = fn.argument (builder, 2);
+    llvm::Value *nelem = compute_nelem.call (builder, base, limit, inc);
+
+    llvm::Value *dzero = llvm::ConstantFP::get (scalar_t, 0);
+    llvm::Value *izero = llvm::ConstantInt::get (index_t, 0);
+    llvm::Value *rng = llvm::ConstantStruct::get (range_t, dzero, dzero, dzero,
+                                                  izero, NULL);
+    rng = builder.CreateInsertValue (rng, base, 0);
+    rng = builder.CreateInsertValue (rng, limit, 1);
+    rng = builder.CreateInsertValue (rng, inc, 2);
+    rng = builder.CreateInsertValue (rng, nelem, 3);
+    fn.do_return (builder, rng);
+  }
+  make_range_fn.add_overload (fn);
+
+  // paren_subsref
+  jit_type *jit_int = intN (sizeof (int) * 8);
+  llvm::Type *int_t = jit_int->to_llvm ();
+  jit_function ginvalid_index
+    = create_function (jit_convention::external, "octave_jit_ginvalid_index",
+                       0);
+  ginvalid_index.add_mapping (engine, &octave_jit_ginvalid_index);
+  jit_function gindex_range = create_function (jit_convention::external,
+                                               "octave_jit_gindex_range",
+                                               0, jit_int, jit_int, index,
+                                               index);
+  gindex_range.add_mapping (engine, &octave_jit_gindex_range);
+
+  fn = create_function (jit_convention::internal, "()subsref", scalar, matrix,
+                        scalar);
+  fn.mark_can_error ();
+
+  body = fn.new_block ();
+  builder.SetInsertPoint (body);
+  {
+    llvm::Value *one = llvm::ConstantInt::get (index_t, 1);
+    llvm::Value *ione;
+    if (index_t == int_t)
+      ione = one;
+    else
+      ione = llvm::ConstantInt::get (int_t, 1);
+
+    llvm::Value *undef = llvm::UndefValue::get (scalar_t);
+    llvm::Value *mat = fn.argument (builder, 0);
+    llvm::Value *idx = fn.argument (builder, 1);
+
+    // convert index to scalar to integer, and check index >= 1
+    llvm::Value *int_idx = builder.CreateFPToSI (idx, index_t);
+    llvm::Value *check_idx = builder.CreateSIToFP (int_idx, scalar_t);
+    llvm::Value *cond0 = builder.CreateFCmpUNE (idx, check_idx);
+    llvm::Value *cond1 = builder.CreateICmpSLT (int_idx, one);
+    llvm::Value *cond = builder.CreateOr (cond0, cond1);
+
+    llvm::BasicBlock *done = fn.new_block ("done");
+    llvm::BasicBlock *conv_error = fn.new_block ("conv_error", done);
+    llvm::BasicBlock *normal = fn.new_block ("normal", done);
+    builder.CreateCondBr (cond, conv_error, normal);
+
+    builder.SetInsertPoint (conv_error);
+    ginvalid_index.call (builder);
+    builder.CreateBr (done);
+
+    builder.SetInsertPoint (normal);
+    llvm::Value *len = builder.CreateExtractValue (mat,
+                                                   llvm::ArrayRef<unsigned> (2));
+    cond = builder.CreateICmpSGT (int_idx, len);
+
+
+    llvm::BasicBlock *bounds_error = fn.new_block ("bounds_error", done);
+    llvm::BasicBlock *success = fn.new_block ("success", done);
+    builder.CreateCondBr (cond, bounds_error, success);
+
+    builder.SetInsertPoint (bounds_error);
+    gindex_range.call (builder, ione, ione, int_idx, len);
+    builder.CreateBr (done);
+
+    builder.SetInsertPoint (success);
+    llvm::Value *data = builder.CreateExtractValue (mat,
+                                                    llvm::ArrayRef<unsigned> (1));
+    llvm::Value *gep = builder.CreateInBoundsGEP (data, int_idx);
+    llvm::Value *ret = builder.CreateLoad (gep);
+    builder.CreateBr (done);
+
+    builder.SetInsertPoint (done);
+
+    llvm::PHINode *merge = llvm::PHINode::Create (scalar_t, 3);
+    builder.Insert (merge);
+    merge->addIncoming (undef, conv_error);
+    merge->addIncoming (undef, bounds_error);
+    merge->addIncoming (ret, success);
+    fn.do_return (builder, merge);
+  }
+  paren_subsref_fn.add_overload (fn);
+
+  // paren subsasgn
+  paren_subsasgn_fn.stash_name ("()subsasgn");
+
+  jit_function resize_paren_subsasgn
+    = create_function (jit_convention::external,
+                       "octave_jit_paren_subsasgn_impl", matrix, matrix, index,
+                       scalar);
+  resize_paren_subsasgn.add_mapping (engine, &octave_jit_paren_subsasgn_impl);
+  fn = create_function (jit_convention::internal, "octave_jit_paren_subsasgn",
+                        matrix, matrix, scalar, scalar);
+  fn.mark_can_error ();
+  body = fn.new_block ();
+  builder.SetInsertPoint (body);
+  {
+    llvm::Value *one = llvm::ConstantInt::get (index_t, 1);
+
+    llvm::Value *mat = fn.argument (builder, 0);
+    llvm::Value *idx = fn.argument (builder, 1);
+    llvm::Value *value = fn.argument (builder, 2);
+
+    llvm::Value *int_idx = builder.CreateFPToSI (idx, index_t);
+    llvm::Value *check_idx = builder.CreateSIToFP (int_idx, scalar_t);
+    llvm::Value *cond0 = builder.CreateFCmpUNE (idx, check_idx);
+    llvm::Value *cond1 = builder.CreateICmpSLT (int_idx, one);
+    llvm::Value *cond = builder.CreateOr (cond0, cond1);
+
+    llvm::BasicBlock *done = fn.new_block ("done");
+
+    llvm::BasicBlock *conv_error = fn.new_block ("conv_error", done);
+    llvm::BasicBlock *normal = fn.new_block ("normal", done);
+    builder.CreateCondBr (cond, conv_error, normal);
+    builder.SetInsertPoint (conv_error);
+    ginvalid_index.call (builder);
+    builder.CreateBr (done);
+
+    builder.SetInsertPoint (normal);
+    llvm::Value *len = builder.CreateExtractValue (mat, 2);
+    cond0 = builder.CreateICmpSGT (int_idx, len);
+
+    llvm::Value *rcount = builder.CreateExtractValue (mat, 0);
+    rcount = builder.CreateLoad (rcount);
+    cond1 = builder.CreateICmpSGT (rcount, one);
+    cond = builder.CreateOr (cond0, cond1);
+
+    llvm::BasicBlock *bounds_error = fn.new_block ("bounds_error", done);
+    llvm::BasicBlock *success = fn.new_block ("success", done);
+    builder.CreateCondBr (cond, bounds_error, success);
+
+    // resize on out of bounds access
+    builder.SetInsertPoint (bounds_error);
+    llvm::Value *resize_result = resize_paren_subsasgn.call (builder, mat,
+                                                             int_idx, value);
+    builder.CreateBr (done);
+
+    builder.SetInsertPoint (success);
+    llvm::Value *data = builder.CreateExtractValue (mat,
+                                                    llvm::ArrayRef<unsigned> (1));
+    llvm::Value *gep = builder.CreateInBoundsGEP (data, int_idx);
+    builder.CreateStore (value, gep);
+    builder.CreateBr (done);
+
+    builder.SetInsertPoint (done);
+
+    llvm::PHINode *merge = llvm::PHINode::Create (matrix_t, 3);
+    builder.Insert (merge);
+    merge->addIncoming (mat, conv_error);
+    merge->addIncoming (resize_result, bounds_error);
+    merge->addIncoming (mat, success);
+    fn.do_return (builder, merge);
+  }
+  paren_subsasgn_fn.add_overload (fn);
+
+  fn = create_function (jit_convention::external,
+                        "octave_jit_paren_subsasgn_matrix_range", matrix,
+                        matrix, range, scalar);
+  fn.add_mapping (engine, &octave_jit_paren_subsasgn_matrix_range);
+  fn.mark_can_error ();
+  paren_subsasgn_fn.add_overload (fn);
+
+  end1_fn.stash_name ("end1");
+  fn = create_function (jit_convention::internal, "octave_jit_end1_matrix",
+                        scalar, matrix, index, index);
+  body = fn.new_block ();
+  builder.SetInsertPoint (body);
+  {
+    llvm::Value *mat = fn.argument (builder, 0);
+    llvm::Value *ret = builder.CreateExtractValue (mat, 2);
+    fn.do_return (builder, builder.CreateSIToFP (ret, scalar_t));
+  }
+  end1_fn.add_overload (fn);
+
+  end_fn.stash_name ("end");
+  fn = create_function (jit_convention::external, "octave_jit_end_matrix",
+                        scalar, matrix, index, index);
+  end_fn.add_overload (fn);
+
+  casts[any->type_id ()].stash_name ("(any)");
+  casts[scalar->type_id ()].stash_name ("(scalar)");
+  casts[complex->type_id ()].stash_name ("(complex)");
+  casts[matrix->type_id ()].stash_name ("(matrix)");
+  casts[any->type_id ()].stash_name ("(range)");
+
+  // cast any <- matrix
+  fn = create_function (jit_convention::external, "octave_jit_cast_any_matrix",
+                        any, matrix);
+  fn.add_mapping (engine, &octave_jit_cast_any_matrix);
+  casts[any->type_id ()].add_overload (fn);
+
+  // cast matrix <- any
+  fn = create_function (jit_convention::external, "octave_jit_cast_matrix_any",
+                        matrix, any);
+  fn.add_mapping (engine, &octave_jit_cast_matrix_any);
+  casts[matrix->type_id ()].add_overload (fn);
+
+  // cast any <- range
+  fn = create_function (jit_convention::external, "octave_jit_cast_any_range",
+                        any, range);
+  fn.add_mapping (engine, &octave_jit_cast_any_range);
+  casts[any->type_id ()].add_overload (fn);
+
+  // cast range <- any
+  fn = create_function (jit_convention::external, "octave_jit_cast_range_any",
+                        range, any);
+  fn.add_mapping (engine, &octave_jit_cast_range_any);
+  casts[range->type_id ()].add_overload (fn);
+
+  // cast any <- scalar
+  fn = create_function (jit_convention::external, "octave_jit_cast_any_scalar",
+                        any, scalar);
+  fn.add_mapping (engine, &octave_jit_cast_any_scalar);
+  casts[any->type_id ()].add_overload (fn);
+
+  // cast scalar <- any
+  fn = create_function (jit_convention::external, "octave_jit_cast_scalar_any",
+                        scalar, any);
+  fn.add_mapping (engine, &octave_jit_cast_scalar_any);
+  casts[scalar->type_id ()].add_overload (fn);
+
+  // cast any <- complex
+  fn = create_function (jit_convention::external, "octave_jit_cast_any_complex",
+                        any, complex);
+  fn.add_mapping (engine, &octave_jit_cast_any_complex);
+  casts[any->type_id ()].add_overload (fn);
+
+  // cast complex <- any
+  fn = create_function (jit_convention::external, "octave_jit_cast_complex_any",
+                        complex, any);
+  fn.add_mapping (engine, &octave_jit_cast_complex_any);
+  casts[complex->type_id ()].add_overload (fn);
+
+  // cast complex <- scalar
+  fn = create_function (jit_convention::internal,
+                        "octave_jit_cast_complex_scalar", complex, scalar);
+  body = fn.new_block ();
+  builder.SetInsertPoint (body);
+  {
+    llvm::Value *zero = llvm::ConstantFP::get (scalar_t, 0);
+    fn.do_return (builder, complex_new (fn.argument (builder, 0), zero));
+  }
+  casts[complex->type_id ()].add_overload (fn);
+
+  // cast scalar <- complex
+  fn = create_function (jit_convention::internal,
+                        "octave_jit_cast_scalar_complex", scalar, complex);
+  body = fn.new_block ();
+  builder.SetInsertPoint (body);
+  fn.do_return (builder, complex_real (fn.argument (builder, 0)));
+  casts[scalar->type_id ()].add_overload (fn);
+
+  // cast any <- any
+  fn = create_identity (any);
+  casts[any->type_id ()].add_overload (fn);
+
+  // cast scalar <- scalar
+  fn = create_identity (scalar);
+  casts[scalar->type_id ()].add_overload (fn);
+
+  // cast complex <- complex
+  fn = create_identity (complex);
+  casts[complex->type_id ()].add_overload (fn);
+
+  // -------------------- builtin functions --------------------
+  add_builtin ("#unknown_function");
+  unknown_function = builtins["#unknown_function"];
+
+  add_builtin ("sin");
+  register_intrinsic ("sin", llvm::Intrinsic::sin, scalar, scalar);
+  register_generic ("sin", matrix, matrix);
+
+  add_builtin ("cos");
+  register_intrinsic ("cos", llvm::Intrinsic::cos, scalar, scalar);
+  register_generic ("cos", matrix, matrix);
+
+  add_builtin ("exp");
+  register_intrinsic ("exp", llvm::Intrinsic::cos, scalar, scalar);
+  register_generic ("exp", matrix, matrix);
+
+  add_builtin ("balance");
+  register_generic ("balance", matrix, matrix);
+
+  add_builtin ("cond");
+  register_generic ("cond", scalar, matrix);
+
+  add_builtin ("det");
+  register_generic ("det", scalar, matrix);
+
+  add_builtin ("norm");
+  register_generic ("norm", scalar, matrix);
+
+  add_builtin ("rand");
+  register_generic ("rand", matrix, scalar);
+  register_generic ("rand", matrix, std::vector<jit_type *> (2, scalar));
+
+  add_builtin ("magic");
+  register_generic ("magic", matrix, scalar);
+  register_generic ("magic", matrix, std::vector<jit_type *> (2, scalar));
+
+  add_builtin ("eye");
+  register_generic ("eye", matrix, scalar);
+  register_generic ("eye", matrix, std::vector<jit_type *> (2, scalar));
+
+  add_builtin ("mod");
+  register_generic ("mod", scalar, std::vector<jit_type *> (2, scalar));
+
+  casts.resize (next_id + 1);
+  jit_function any_id = create_identity (any);
+  jit_function release_any = get_release (any);
+  std::vector<jit_type *> args;
+  args.resize (1);
+
+  for (std::map<std::string, jit_type *>::iterator iter = builtins.begin ();
+       iter != builtins.end (); ++iter)
+    {
+      jit_type *btype = iter->second;
+      args[0] = btype;
+
+      release_fn.add_overload (jit_function (release_any, 0, args));
+      casts[any->type_id ()].add_overload (jit_function (any_id, any, args));
+
+      args[0] = any;
+      casts[btype->type_id ()].add_overload (jit_function (any_id, btype,
+                                                           args));
+    }
+}
+
+const jit_function&
+jit_typeinfo::do_end (jit_value *value, jit_value *idx, jit_value *count)
+{
+  jit_const_index *ccount = dynamic_cast<jit_const_index *> (count);
+  if (ccount && ccount->value () == 1)
+    return end1_fn.overload (value->type (), idx->type (), count->type ());
+
+  return end_fn.overload (value->type (), idx->type (), count->type ());
+}
+
+jit_type*
+jit_typeinfo::new_type (const std::string& name, jit_type *parent,
+                        llvm::Type *llvm_type, bool skip_paren)
+{
+  jit_type *ret = new jit_type (name, parent, llvm_type, skip_paren, next_id++);
+  id_to_type.push_back (ret);
+  return ret;
+}
+
+void
+jit_typeinfo::add_print (jit_type *ty, void *fptr)
+{
+  std::stringstream name;
+  name << "octave_jit_print_" << ty->name ();
+  jit_function fn = create_function (jit_convention::external, name.str (), 0,
+                                     intN (8), ty);
+  fn.add_mapping (engine, fptr);
+  print_fn.add_overload (fn);
+}
+
+// FIXME: cp between add_binary_op, add_binary_icmp, and add_binary_fcmp
+void
+jit_typeinfo::add_binary_op (jit_type *ty, int op, int llvm_op)
+{
+  std::stringstream fname;
+  octave_value::binary_op ov_op = static_cast<octave_value::binary_op>(op);
+  fname << "octave_jit_" << octave_value::binary_op_as_string (ov_op)
+        << "_" << ty->name ();
+
+  jit_function fn = create_function (jit_convention::internal, fname.str (),
+                                        ty, ty, ty);
+  llvm::BasicBlock *block = fn.new_block ();
+  builder.SetInsertPoint (block);
+  llvm::Instruction::BinaryOps temp
+    = static_cast<llvm::Instruction::BinaryOps>(llvm_op);
+
+  llvm::Value *ret = builder.CreateBinOp (temp, fn.argument (builder, 0),
+                                          fn.argument (builder, 1));
+  fn.do_return (builder, ret);
+  binary_ops[op].add_overload (fn);
+}
+
+void
+jit_typeinfo::add_binary_icmp (jit_type *ty, int op, int llvm_op)
+{
+  std::stringstream fname;
+  octave_value::binary_op ov_op = static_cast<octave_value::binary_op>(op);
+  fname << "octave_jit" << octave_value::binary_op_as_string (ov_op)
+        << "_" << ty->name ();
+
+  jit_function fn = create_function (jit_convention::internal, fname.str (),
+                                     boolean, ty, ty);
+  llvm::BasicBlock *block = fn.new_block ();
+  builder.SetInsertPoint (block);
+  llvm::CmpInst::Predicate temp
+    = static_cast<llvm::CmpInst::Predicate>(llvm_op);
+  llvm::Value *ret = builder.CreateICmp (temp, fn.argument (builder, 0),
+                                         fn.argument (builder, 1));
+  fn.do_return (builder, ret);
+  binary_ops[op].add_overload (fn);
+}
+
+void
+jit_typeinfo::add_binary_fcmp (jit_type *ty, int op, int llvm_op)
+{
+  std::stringstream fname;
+  octave_value::binary_op ov_op = static_cast<octave_value::binary_op>(op);
+  fname << "octave_jit" << octave_value::binary_op_as_string (ov_op)
+        << "_" << ty->name ();
+
+  jit_function fn = create_function (jit_convention::internal, fname.str (),
+                                     boolean, ty, ty);
+  llvm::BasicBlock *block = fn.new_block ();
+  builder.SetInsertPoint (block);
+  llvm::CmpInst::Predicate temp
+    = static_cast<llvm::CmpInst::Predicate>(llvm_op);
+  llvm::Value *ret = builder.CreateFCmp (temp, fn.argument (builder, 0),
+                                         fn.argument (builder, 1));
+  fn.do_return (builder, ret);
+  binary_ops[op].add_overload (fn);
+}
+
+jit_function
+jit_typeinfo::create_function (jit_convention::type cc, const llvm::Twine& name,
+                               jit_type *ret,
+                               const std::vector<jit_type *>& args)
+{
+  jit_function result (module, cc, name, ret, args);
+  return result;
+}
+
+jit_function
+jit_typeinfo::create_identity (jit_type *type)
+{
+  size_t id = type->type_id ();
+  if (id >= identities.size ())
+    identities.resize (id + 1);
+
+  if (! identities[id].valid ())
+    {
+      jit_function fn = create_function (jit_convention::internal, "id", type,
+                                         type);
+      llvm::BasicBlock *body = fn.new_block ();
+      builder.SetInsertPoint (body);
+      fn.do_return (builder, fn.argument (builder, 0));
+      return identities[id] = fn;
+    }
+
+  return identities[id];
+}
+
+llvm::Value *
+jit_typeinfo::do_insert_error_check (llvm::IRBuilderD& abuilder)
+{
+  return abuilder.CreateLoad (lerror_state);
+}
+
+void
+jit_typeinfo::add_builtin (const std::string& name)
+{
+  jit_type *btype = new_type (name, any, any->to_llvm (), true);
+  builtins[name] = btype;
+
+  octave_builtin *ov_builtin = find_builtin (name);
+  if (ov_builtin)
+    ov_builtin->stash_jit (*btype);
+}
+
+void
+jit_typeinfo::register_intrinsic (const std::string& name, size_t iid,
+                                  jit_type *result,
+                                  const std::vector<jit_type *>& args)
+{
+  jit_type *builtin_type = builtins[name];
+  size_t nargs = args.size ();
+  llvm::SmallVector<llvm::Type *, 5> llvm_args (nargs);
+  for (size_t i = 0; i < nargs; ++i)
+    llvm_args[i] = args[i]->to_llvm ();
+
+  llvm::Intrinsic::ID id = static_cast<llvm::Intrinsic::ID> (iid);
+  llvm::Function *ifun = llvm::Intrinsic::getDeclaration (module, id,
+                                                          llvm_args);
+  std::stringstream fn_name;
+  fn_name << "octave_jit_" << name;
+
+  std::vector<jit_type *> args1 (nargs + 1);
+  args1[0] = builtin_type;
+  std::copy (args.begin (), args.end (), args1.begin () + 1);
+
+  // The first argument will be the Octave function, but we already know that
+  // the function call is the equivalent of the intrinsic, so we ignore it and
+  // call the intrinsic with the remaining arguments.
+  jit_function fn = create_function (jit_convention::internal, fn_name.str (),
+                                     result, args1);
+  llvm::BasicBlock *body = fn.new_block ();
+  builder.SetInsertPoint (body);
+
+  llvm::SmallVector<llvm::Value *, 5> fargs (nargs);
+  for (size_t i = 0; i < nargs; ++i)
+    fargs[i] = fn.argument (builder, i + 1);
+
+  llvm::Value *ret = builder.CreateCall (ifun, fargs);
+  fn.do_return (builder, ret);
+  paren_subsref_fn.add_overload (fn);
+}
+
+octave_builtin *
+jit_typeinfo::find_builtin (const std::string& name)
+{
+  // FIXME: Finalize what we want to store in octave_builtin, then add functions
+  // to access these values in octave_value
+  octave_value ov_builtin = symbol_table::find (name);
+  return dynamic_cast<octave_builtin *> (ov_builtin.internal_rep ());
+}
+
+void
+jit_typeinfo::register_generic (const std::string& name, jit_type *result,
+                                const std::vector<jit_type *>& args)
+{
+  octave_builtin *builtin = find_builtin (name);
+  if (! builtin)
+    return;
+
+  std::vector<jit_type *> fn_args (args.size () + 1);
+  fn_args[0] = builtins[name];
+  std::copy (args.begin (), args.end (), fn_args.begin () + 1);
+  jit_function fn = create_function (jit_convention::internal, name, result,
+                                     fn_args);
+  fn.mark_can_error ();
+  llvm::BasicBlock *block = fn.new_block ();
+  builder.SetInsertPoint (block);
+  llvm::Type *any_t = any->to_llvm ();
+  llvm::ArrayType *array_t = llvm::ArrayType::get (any_t, args.size ());
+  llvm::Value *array = llvm::UndefValue::get (array_t);
+  for (size_t i = 0; i < args.size (); ++i)
+    {
+      llvm::Value *arg = fn.argument (builder, i + 1);
+      jit_function agrab = get_grab (args[i]);
+      if (agrab.valid ())
+        arg = agrab.call (builder, arg);
+      jit_function acast = cast (any, args[i]);
+      array = builder.CreateInsertValue (array, acast.call (builder, arg), i);
+    }
+
+  llvm::Value *array_mem = builder.CreateAlloca (array_t);
+  builder.CreateStore (array, array_mem);
+  array = builder.CreateBitCast (array_mem, any_t->getPointerTo ());
+
+  jit_type *jintTy = intN (sizeof (octave_builtin::fcn) * 8);
+  llvm::Type *intTy = jintTy->to_llvm ();
+  size_t fcn_int = reinterpret_cast<size_t> (builtin->function ());
+  llvm::Value *fcn = llvm::ConstantInt::get (intTy, fcn_int);
+  llvm::Value *nargin = llvm::ConstantInt::get (intTy, args.size ());
+  size_t result_int = reinterpret_cast<size_t> (result);
+  llvm::Value *res_llvm = llvm::ConstantInt::get (intTy, result_int);
+  llvm::Value *ret = any_call.call (builder, fcn, nargin, array, res_llvm);
+
+  jit_function cast_result = cast (result, any);
+  fn.do_return (builder, cast_result.call (builder, ret));
+  paren_subsref_fn.add_overload (fn);
+}
+
+jit_function
+jit_typeinfo::mirror_binary (const jit_function& fn)
+{
+  jit_function ret = create_function (jit_convention::internal,
+                                      fn.name () + "_reverse",
+                                      fn.result (), fn.argument_type (1),
+                                      fn.argument_type (0));
+  if (fn.can_error ())
+    ret.mark_can_error ();
+
+  llvm::BasicBlock *body = ret.new_block ();
+  builder.SetInsertPoint (body);
+  llvm::Value *result = fn.call (builder, ret.argument (builder, 1),
+                                 ret.argument (builder, 0));
+  if (ret.result ())
+    ret.do_return (builder, result);
+  else
+    ret.do_return (builder);
+
+  return ret;
+}
+
+llvm::Value *
+jit_typeinfo::pack_complex (llvm::IRBuilderD& bld, llvm::Value *cplx)
+{
+  llvm::Type *complex_ret = instance->complex_ret;
+  llvm::Value *real = bld.CreateExtractElement (cplx, bld.getInt32 (0));
+  llvm::Value *imag = bld.CreateExtractElement (cplx, bld.getInt32 (1));
+  llvm::Value *ret = llvm::UndefValue::get (complex_ret);
+  ret = bld.CreateInsertValue (ret, real, 0);
+  return bld.CreateInsertValue (ret, imag, 1);
+}
+
+llvm::Value *
+jit_typeinfo::unpack_complex (llvm::IRBuilderD& bld, llvm::Value *result)
+{
+  llvm::Type *complex_t = get_complex ()->to_llvm ();
+  llvm::Value *real = bld.CreateExtractValue (result, 0);
+  llvm::Value *imag = bld.CreateExtractValue (result, 1);
+  llvm::Value *ret = llvm::UndefValue::get (complex_t);
+  ret = bld.CreateInsertElement (ret, real, bld.getInt32 (0));
+  return bld.CreateInsertElement (ret, imag, bld.getInt32 (1));
+}
+
+llvm::Value *
+jit_typeinfo::complex_real (llvm::Value *cx)
+{
+  return builder.CreateExtractElement (cx, builder.getInt32 (0));
+}
+
+llvm::Value *
+jit_typeinfo::complex_real (llvm::Value *cx, llvm::Value *real)
+{
+  return builder.CreateInsertElement (cx, real, builder.getInt32 (0));
+}
+
+llvm::Value *
+jit_typeinfo::complex_imag (llvm::Value *cx)
+{
+  return builder.CreateExtractElement (cx, builder.getInt32 (1));
+}
+
+llvm::Value *
+jit_typeinfo::complex_imag (llvm::Value *cx, llvm::Value *imag)
+{
+  return builder.CreateInsertElement (cx, imag, builder.getInt32 (1));
+}
+
+llvm::Value *
+jit_typeinfo::complex_new (llvm::Value *real, llvm::Value *imag)
+{
+  llvm::Value *ret = llvm::UndefValue::get (complex->to_llvm ());
+  ret = complex_real (ret, real);
+  return complex_imag (ret, imag);
+}
+
+void
+jit_typeinfo::create_int (size_t nbits)
+{
+  std::stringstream tname;
+  tname << "int" << nbits;
+  ints[nbits] = new_type (tname.str (), any, llvm::Type::getIntNTy (context,
+                                                                    nbits));
+}
+
+jit_type *
+jit_typeinfo::intN (size_t nbits) const
+{
+  std::map<size_t, jit_type *>::const_iterator iter = ints.find (nbits);
+  if (iter != ints.end ())
+    return iter->second;
+
+  throw jit_fail_exception ("No such integer type");
+}
+
+jit_type *
+jit_typeinfo::do_type_of (const octave_value &ov) const
+{
+  if (ov.is_function ())
+    {
+      // FIXME: This is ugly, we need to finalize how we want to to this, then
+      // have octave_value fully support the needed functionality
+      octave_builtin *builtin
+        = dynamic_cast<octave_builtin *> (ov.internal_rep ());
+      return builtin && builtin->to_jit () ? builtin->to_jit ()
+        : unknown_function;
+    }
+
+  if (ov.is_range ())
+    return get_range ();
+
+  if (ov.is_double_type ())
+    {
+      if (ov.is_real_scalar ())
+        return get_scalar ();
+
+      if (ov.is_matrix_type ())
+        return get_matrix ();
+    }
+
+  if (ov.is_complex_scalar ())
+    return get_complex ();
+
+  return get_any ();
+}
+
+#endif
new file mode 100644
--- /dev/null
+++ b/src/interp-core/jit-typeinfo.h
@@ -0,0 +1,783 @@
+/*
+
+Copyright (C) 2012 Max Brister <max@2bass.com>
+
+This file is part of Octave.
+
+Octave is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3 of the License, or (at your
+option) any later version.
+
+Octave is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with Octave; see the file COPYING.  If not, see
+<http://www.gnu.org/licenses/>.
+
+*/
+
+#if !defined (octave_jit_typeinfo_h)
+#define octave_jit_typeinfo_h 1
+
+#ifdef HAVE_LLVM
+
+#include <map>
+#include <vector>
+
+#include "Range.h"
+#include "jit-util.h"
+
+// Defines the type system used by jit and a singleton class, jit_typeinfo, to
+// manage the types.
+//
+// FIXME:
+// Operations are defined and implemented in jit_typeinfo. Eventually they
+// should be moved elsewhere. (just like with octave_typeinfo)
+
+// jit_range is compatable with the llvm range structure
+struct
+jit_range
+{
+  jit_range (const Range& from) : base (from.base ()), limit (from.limit ()),
+                                  inc (from.inc ()), nelem (from.nelem ())
+  {}
+
+  operator Range () const
+  {
+    return Range (base, limit, inc);
+  }
+
+  bool all_elements_are_ints () const;
+
+  double base;
+  double limit;
+  double inc;
+  octave_idx_type nelem;
+};
+
+std::ostream& operator<< (std::ostream& os, const jit_range& rng);
+
+// jit_array is compatable with the llvm array/matrix structures
+template <typename T, typename U>
+struct
+jit_array
+{
+  jit_array (T& from) : array (new T (from))
+  {
+    update ();
+  }
+
+  void update (void)
+  {
+    ref_count = array->jit_ref_count ();
+    slice_data = array->jit_slice_data () - 1;
+    slice_len = array->capacity ();
+    dimensions = array->jit_dimensions ();
+  }
+
+  void update (T *aarray)
+  {
+    array = aarray;
+    update ();
+  }
+
+  operator T () const
+  {
+    return *array;
+  }
+
+  int *ref_count;
+
+  U *slice_data;
+  octave_idx_type slice_len;
+  octave_idx_type *dimensions;
+
+  T *array;
+};
+
+typedef jit_array<NDArray, double> jit_matrix;
+
+std::ostream& operator<< (std::ostream& os, const jit_matrix& mat);
+
+// calling convention
+namespace
+jit_convention
+{
+  enum
+  type
+  {
+    // internal to jit
+    internal,
+
+    // an external C call
+    external,
+
+    length
+  };
+}
+
+// Used to keep track of estimated (infered) types during JIT. This is a
+// hierarchical type system which includes both concrete and abstract types.
+//
+// The types form a lattice. Currently we only allow for one parent type, but
+// eventually we may allow for multiple predecessors.
+class
+jit_type
+{
+public:
+  typedef llvm::Value *(*convert_fn) (llvm::IRBuilderD&, llvm::Value *);
+
+  jit_type (const std::string& aname, jit_type *aparent, llvm::Type *allvm_type,
+            bool askip_paren, int aid);
+
+  // a user readable type name
+  const std::string& name (void) const { return mname; }
+
+  // a unique id for the type
+  int type_id (void) const { return mid; }
+
+  // An abstract base type, may be null
+  jit_type *parent (void) const { return mparent; }
+
+  // convert to an llvm type
+  llvm::Type *to_llvm (void) const { return llvm_type; }
+
+  // how this type gets passed as a function argument
+  llvm::Type *to_llvm_arg (void) const;
+
+  size_t depth (void) const { return mdepth; }
+
+  bool skip_paren (void) const { return mskip_paren; }
+
+  // -------------------- Calling Convention information --------------------
+
+  // A function declared like: mytype foo (int arg0, int arg1);
+  // Will be converted to: void foo (mytype *retval, int arg0, int arg1)
+  // if mytype is sret. The caller is responsible for allocating space for
+  // retval. (on the stack)
+  bool sret (jit_convention::type cc) const { return msret[cc]; }
+
+  void mark_sret (jit_convention::type cc = jit_convention::external)
+  { msret[cc] = true; }
+
+  // A function like: void foo (mytype arg0)
+  // Will be converted to: void foo (mytype *arg0)
+  // Basically just pass by reference.
+  bool pointer_arg (jit_convention::type cc) const { return mpointer_arg[cc]; }
+
+  void mark_pointer_arg (jit_convention::type cc = jit_convention::external)
+  { mpointer_arg[cc] = true; }
+
+  // Convert into an equivalent form before calling. For example, complex is
+  // represented as two values llvm vector, but we need to pass it as a two
+  // valued llvm structure to C functions.
+  convert_fn pack (jit_convention::type cc) { return mpack[cc]; }
+
+  void set_pack (jit_convention::type cc, convert_fn fn) { mpack[cc] = fn; }
+
+  // The inverse operation of pack.
+  convert_fn unpack (jit_convention::type cc) { return munpack[cc]; }
+
+  void set_unpack (jit_convention::type cc, convert_fn fn)
+  { munpack[cc] = fn; }
+
+  // The resulting type after pack is called.
+  llvm::Type *packed_type (jit_convention::type cc)
+  { return mpacked_type[cc]; }
+
+  void set_packed_type (jit_convention::type cc, llvm::Type *ty)
+  { mpacked_type[cc] = ty; }
+private:
+  std::string mname;
+  jit_type *mparent;
+  llvm::Type *llvm_type;
+  int mid;
+  size_t mdepth;
+  bool mskip_paren;
+
+  bool msret[jit_convention::length];
+  bool mpointer_arg[jit_convention::length];
+
+  convert_fn mpack[jit_convention::length];
+  convert_fn munpack[jit_convention::length];
+
+  llvm::Type *mpacked_type[jit_convention::length];
+};
+
+// seperate print function to allow easy printing if type is null
+std::ostream& jit_print (std::ostream& os, jit_type *atype);
+
+class jit_value;
+
+// An abstraction for calling llvm functions with jit_values. Deals with calling
+// convention details.
+class
+jit_function
+{
+  friend std::ostream& operator<< (std::ostream& os, const jit_function& fn);
+public:
+  // create a function in an invalid state
+  jit_function ();
+
+  jit_function (llvm::Module *amodule, jit_convention::type acall_conv,
+                const llvm::Twine& aname, jit_type *aresult,
+                const std::vector<jit_type *>& aargs);
+
+  // Use an existing function, but change the argument types. The new argument
+  // types must behave the same for the current calling convention.
+  jit_function (const jit_function& fn, jit_type *aresult,
+                const std::vector<jit_type *>& aargs);
+
+  jit_function (const jit_function& fn);
+
+  template <typename T>
+  void add_mapping (llvm::ExecutionEngine *engine, T fn)
+  {
+    do_add_mapping (engine, reinterpret_cast<void *> (fn));
+  }
+
+  bool valid (void) const { return llvm_function; }
+
+  std::string name (void) const;
+
+  llvm::BasicBlock *new_block (const std::string& aname = "body",
+                               llvm::BasicBlock *insert_before = 0);
+
+  llvm::Value *call (llvm::IRBuilderD& builder,
+                     const std::vector<jit_value *>& in_args) const;
+
+  llvm::Value *call (llvm::IRBuilderD& builder,
+                     const std::vector<llvm::Value *>& in_args
+                     = std::vector<llvm::Value *> ()) const;
+
+#define JIT_PARAM_ARGS llvm::IRBuilderD& builder,
+#define JIT_PARAMS builder,
+#define JIT_CALL(N) JIT_EXPAND (llvm::Value *, call, llvm::Value *, const, N)
+
+  JIT_CALL (1)
+  JIT_CALL (2)
+  JIT_CALL (3)
+  JIT_CALL (4)
+  JIT_CALL (5)
+
+#undef JIT_CALL
+
+#define JIT_CALL(N) JIT_EXPAND (llvm::Value *, call, jit_value *, const, N)
+
+  JIT_CALL (1);
+  JIT_CALL (2);
+  JIT_CALL (3);
+
+#undef JIT_CALL
+#undef JIT_PARAMS
+#undef JIT_PARAM_ARGS
+
+  llvm::Value *argument (llvm::IRBuilderD& builder, size_t idx) const;
+
+  void do_return (llvm::IRBuilderD& builder, llvm::Value *rval = 0);
+
+  llvm::Function *to_llvm (void) const { return llvm_function; }
+
+  // If true, then the return value is passed as a pointer in the first argument
+  bool sret (void) const { return mresult && mresult->sret (call_conv); }
+
+  bool can_error (void) const { return mcan_error; }
+
+  void mark_can_error (void) { mcan_error = true; }
+
+  jit_type *result (void) const { return mresult; }
+
+  jit_type *argument_type (size_t idx) const
+  {
+    assert (idx < args.size ());
+    return args[idx];
+  }
+
+  const std::vector<jit_type *>& arguments (void) const { return args; }
+private:
+  void do_add_mapping (llvm::ExecutionEngine *engine, void *fn);
+
+  llvm::Module *module;
+  llvm::Function *llvm_function;
+  jit_type *mresult;
+  std::vector<jit_type *> args;
+  jit_convention::type call_conv;
+  bool mcan_error;
+};
+
+std::ostream& operator<< (std::ostream& os, const jit_function& fn);
+
+
+// Keeps track of information about how to implement operations (+, -, *, ect)
+// and their resulting types.
+class
+jit_operation
+{
+public:
+  // type signature vector
+  typedef std::vector<jit_type *> signature_vec;
+
+  virtual ~jit_operation (void);
+
+  void add_overload (const jit_function& func)
+  {
+    add_overload (func, func.arguments ());
+  }
+
+  void add_overload (const jit_function& func,
+                     const signature_vec& args);
+
+  const jit_function& overload (const signature_vec& types) const;
+
+  jit_type *result (const signature_vec& types) const
+  {
+    const jit_function& temp = overload (types);
+    return temp.result ();
+  }
+
+#define JIT_PARAMS
+#define JIT_PARAM_ARGS
+#define JIT_OVERLOAD(N)                                              \
+  JIT_EXPAND (const jit_function&, overload, jit_type *, const, N)   \
+  JIT_EXPAND (jit_type *, result, jit_type *, const, N)
+
+  JIT_OVERLOAD (1);
+  JIT_OVERLOAD (2);
+  JIT_OVERLOAD (3);
+
+#undef JIT_PARAMS
+#undef JIT_PARAM_ARGS
+
+  const std::string& name (void) const { return mname; }
+
+  void stash_name (const std::string& aname) { mname = aname; }
+protected:
+  virtual jit_function *generate (const signature_vec& types) const;
+private:
+  Array<octave_idx_type> to_idx (const signature_vec& types) const;
+
+  const jit_function& do_generate (const signature_vec& types) const;
+
+  struct signature_cmp
+  {
+    bool operator() (const signature_vec *lhs, const signature_vec *rhs);
+  };
+
+  typedef std::map<const signature_vec *, jit_function *, signature_cmp>
+  generated_map;
+
+  mutable generated_map generated;
+
+  std::vector<Array<jit_function> > overloads;
+
+  std::string mname;
+};
+
+class
+jit_index_operation : public jit_operation
+{
+public:
+  jit_index_operation (void) : module (0), engine (0) {}
+
+  void initialize (llvm::Module *amodule, llvm::ExecutionEngine *aengine)
+  {
+    module = amodule;
+    engine = aengine;
+    do_initialize ();
+  }
+protected:
+  virtual jit_function *generate (const signature_vec& types) const;
+
+  virtual jit_function *generate_matrix (const signature_vec& types) const = 0;
+
+  virtual void do_initialize (void) = 0;
+
+  // helper functions
+  // [start_idx, end_idx).
+  llvm::Value *create_arg_array (llvm::IRBuilderD& builder,
+                                 const jit_function &fn, size_t start_idx,
+                                 size_t end_idx) const;
+
+  llvm::Module *module;
+  llvm::ExecutionEngine *engine;
+};
+
+class
+jit_paren_subsref : public jit_index_operation
+{
+protected:
+  virtual jit_function *generate_matrix (const signature_vec& types) const;
+
+  virtual void do_initialize (void);
+private:
+  jit_function paren_scalar;
+};
+
+class
+jit_paren_subsasgn : public jit_index_operation
+{
+protected:
+  jit_function *generate_matrix (const signature_vec& types) const;
+
+  virtual void do_initialize (void);
+private:
+  jit_function paren_scalar;
+};
+
+// A singleton class which handles the construction of jit_types and
+// jit_operations.
+class
+jit_typeinfo
+{
+public:
+  static void initialize (llvm::Module *m, llvm::ExecutionEngine *e);
+
+  static jit_type *join (jit_type *lhs, jit_type *rhs)
+  {
+    return instance->do_join (lhs, rhs);
+  }
+
+  static jit_type *get_any (void) { return instance->any; }
+
+  static jit_type *get_matrix (void) { return instance->matrix; }
+
+  static jit_type *get_scalar (void) { return instance->scalar; }
+
+  static llvm::Type *get_scalar_llvm (void)
+  { return instance->scalar->to_llvm (); }
+
+  static jit_type *get_scalar_ptr (void) { return instance->scalar_ptr; }
+
+  static jit_type *get_range (void) { return instance->range; }
+
+  static jit_type *get_string (void) { return instance->string; }
+
+  static jit_type *get_bool (void) { return instance->boolean; }
+
+  static jit_type *get_index (void) { return instance->index; }
+
+  static llvm::Type *get_index_llvm (void)
+  { return instance->index->to_llvm (); }
+
+  static jit_type *get_complex (void) { return instance->complex; }
+
+  // Get the jit_type of an octave_value
+  static jit_type *type_of (const octave_value& ov)
+  {
+    return instance->do_type_of (ov);
+  }
+
+  static const jit_operation& binary_op (int op)
+  {
+    return instance->do_binary_op (op);
+  }
+
+  static const jit_operation& unary_op (int op)
+  {
+    return instance->do_unary_op (op);
+  }
+
+  static const jit_operation& grab (void) { return instance->grab_fn; }
+
+  static const jit_function& get_grab (jit_type *type)
+  {
+    return instance->grab_fn.overload (type);
+  }
+
+  static const jit_operation& release (void)
+  {
+    return instance->release_fn;
+  }
+
+  static const jit_function& get_release (jit_type *type)
+  {
+    return instance->release_fn.overload (type);
+  }
+
+  static const jit_operation& copy (void)
+  {
+    return instance->copy_fn;
+  }
+
+  static const jit_operation& print_value (void)
+  {
+    return instance->print_fn;
+  }
+
+  static const jit_operation& for_init (void)
+  {
+    return instance->for_init_fn;
+  }
+
+  static const jit_operation& for_check (void)
+  {
+    return instance->for_check_fn;
+  }
+
+  static const jit_operation& for_index (void)
+  {
+    return instance->for_index_fn;
+  }
+
+  static const jit_operation& make_range (void)
+  {
+    return instance->make_range_fn;
+  }
+
+  static const jit_operation& paren_subsref (void)
+  {
+    return instance->paren_subsref_fn;
+  }
+
+  static const jit_operation& paren_subsasgn (void)
+  {
+    return instance->paren_subsasgn_fn;
+  }
+
+  static const jit_operation& logically_true (void)
+  {
+    return instance->logically_true_fn;
+  }
+
+  static const jit_operation& cast (jit_type *result)
+  {
+    return instance->do_cast (result);
+  }
+
+  static const jit_function& cast (jit_type *to, jit_type *from)
+  {
+    return instance->do_cast (to, from);
+  }
+
+  static llvm::Value *insert_error_check (llvm::IRBuilderD& bld)
+  {
+    return instance->do_insert_error_check (bld);
+  }
+
+  static const jit_operation& end (void)
+  {
+    return instance->end_fn;
+  }
+
+  static const jit_function& end (jit_value *value, jit_value *index,
+                                  jit_value *count)
+  {
+    return instance->do_end (value, index, count);
+  }
+private:
+  jit_typeinfo (llvm::Module *m, llvm::ExecutionEngine *e);
+
+  // FIXME: Do these methods really need to be in jit_typeinfo?
+  jit_type *do_join (jit_type *lhs, jit_type *rhs)
+  {
+    // empty case
+    if (! lhs)
+      return rhs;
+
+    if (! rhs)
+      return lhs;
+
+    // check for a shared parent
+    while (lhs != rhs)
+      {
+        if (lhs->depth () > rhs->depth ())
+          lhs = lhs->parent ();
+        else if (lhs->depth () < rhs->depth ())
+          rhs = rhs->parent ();
+        else
+          {
+            // we MUST have depth > 0 as any is the base type of everything
+            do
+              {
+                lhs = lhs->parent ();
+                rhs = rhs->parent ();
+              }
+            while (lhs != rhs);
+          }
+      }
+
+    return lhs;
+  }
+
+  jit_type *do_difference (jit_type *lhs, jit_type *)
+  {
+    // FIXME: Maybe we can do something smarter?
+    return lhs;
+  }
+
+  jit_type *do_type_of (const octave_value &ov) const;
+
+  const jit_operation& do_binary_op (int op) const
+  {
+    assert (static_cast<size_t>(op) < binary_ops.size ());
+    return binary_ops[op];
+  }
+
+  const jit_operation& do_unary_op (int op) const
+  {
+    assert (static_cast<size_t> (op) < unary_ops.size ());
+    return unary_ops[op];
+  }
+
+  const jit_operation& do_cast (jit_type *to)
+  {
+    static jit_operation null_function;
+    if (! to)
+      return null_function;
+
+    size_t id = to->type_id ();
+    if (id >= casts.size ())
+      return null_function;
+    return casts[id];
+  }
+
+  const jit_function& do_cast (jit_type *to, jit_type *from)
+  {
+    return do_cast (to).overload (from);
+  }
+
+  const jit_function& do_end (jit_value *value, jit_value *index,
+                              jit_value *count);
+
+  jit_type *new_type (const std::string& name, jit_type *parent,
+                      llvm::Type *llvm_type, bool skip_paren = false);
+
+
+  void add_print (jit_type *ty, void *fptr);
+
+  void add_binary_op (jit_type *ty, int op, int llvm_op);
+
+  void add_binary_icmp (jit_type *ty, int op, int llvm_op);
+
+  void add_binary_fcmp (jit_type *ty, int op, int llvm_op);
+
+  jit_function create_function (jit_convention::type cc,
+                                const llvm::Twine& name, jit_type *ret,
+                                const std::vector<jit_type *>& args
+                                = std::vector<jit_type *> ());
+
+#define JIT_PARAM_ARGS jit_convention::type cc, const llvm::Twine& name, \
+    jit_type *ret,
+#define JIT_PARAMS cc, name, ret,
+#define CREATE_FUNCTION(N) JIT_EXPAND(jit_function, create_function,    \
+                                      jit_type *, /* empty */, N)
+
+  CREATE_FUNCTION(1);
+  CREATE_FUNCTION(2);
+  CREATE_FUNCTION(3);
+  CREATE_FUNCTION(4);
+
+#undef JIT_PARAM_ARGS
+#undef JIT_PARAMS
+#undef CREATE_FUNCTION
+
+  jit_function create_identity (jit_type *type);
+
+  llvm::Value *do_insert_error_check (llvm::IRBuilderD& bld);
+
+  void add_builtin (const std::string& name);
+
+  void register_intrinsic (const std::string& name, size_t id,
+                           jit_type *result, jit_type *arg0)
+  {
+    std::vector<jit_type *> args (1, arg0);
+    register_intrinsic (name, id, result, args);
+  }
+
+  void register_intrinsic (const std::string& name, size_t id, jit_type *result,
+                           const std::vector<jit_type *>& args);
+
+  void register_generic (const std::string& name, jit_type *result,
+                         jit_type *arg0)
+  {
+    std::vector<jit_type *> args (1, arg0);
+    register_generic (name, result, args);
+  }
+
+  void register_generic (const std::string& name, jit_type *result,
+                         const std::vector<jit_type *>& args);
+
+  octave_builtin *find_builtin (const std::string& name);
+
+  jit_function mirror_binary (const jit_function& fn);
+
+  llvm::Function *wrap_complex (llvm::Function *wrap);
+
+  static llvm::Value *pack_complex (llvm::IRBuilderD& bld,
+                                    llvm::Value *cplx);
+
+  static llvm::Value *unpack_complex (llvm::IRBuilderD& bld,
+                                      llvm::Value *result);
+
+  llvm::Value *complex_real (llvm::Value *cx);
+
+  llvm::Value *complex_real (llvm::Value *cx, llvm::Value *real);
+
+  llvm::Value *complex_imag (llvm::Value *cx);
+
+  llvm::Value *complex_imag (llvm::Value *cx, llvm::Value *imag);
+
+  llvm::Value *complex_new (llvm::Value *real, llvm::Value *imag);
+
+  void create_int (size_t nbits);
+
+  jit_type *intN (size_t nbits) const;
+
+  static jit_typeinfo *instance;
+
+  llvm::Module *module;
+  llvm::ExecutionEngine *engine;
+  int next_id;
+
+  llvm::GlobalVariable *lerror_state;
+
+  std::vector<jit_type*> id_to_type;
+  jit_type *any;
+  jit_type *matrix;
+  jit_type *scalar;
+  jit_type *scalar_ptr; // a fake type for interfacing with C++
+  jit_type *any_ptr; // a fake type for interfacing with C++
+  jit_type *range;
+  jit_type *string;
+  jit_type *boolean;
+  jit_type *index;
+  jit_type *complex;
+  jit_type *unknown_function;
+  std::map<size_t, jit_type *> ints;
+  std::map<std::string, jit_type *> builtins;
+
+  llvm::StructType *complex_ret;
+
+  std::vector<jit_operation> binary_ops;
+  std::vector<jit_operation> unary_ops;
+  jit_operation grab_fn;
+  jit_operation release_fn;
+  jit_operation copy_fn;
+  jit_operation print_fn;
+  jit_operation for_init_fn;
+  jit_operation for_check_fn;
+  jit_operation for_index_fn;
+  jit_operation logically_true_fn;
+  jit_operation make_range_fn;
+  jit_paren_subsref paren_subsref_fn;
+  jit_paren_subsasgn paren_subsasgn_fn;
+  jit_operation end1_fn;
+  jit_operation end_fn;
+
+  jit_function any_call;
+
+  // type id -> cast function TO that type
+  std::vector<jit_operation> casts;
+
+  // type id -> identity function
+  std::vector<jit_function> identities;
+
+  llvm::IRBuilderD& builder;
+};
+
+#endif
+#endif
new file mode 100644
--- /dev/null
+++ b/src/interp-core/jit-util.cc
@@ -0,0 +1,44 @@
+/*
+
+Copyright (C) 2012 Max Brister <max@2bass.com>
+
+This file is part of Octave.
+
+Octave is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3 of the License, or (at your
+option) any later version.
+
+Octave is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with Octave; see the file COPYING.  If not, see
+<http://www.gnu.org/licenses/>.
+
+*/
+
+// defines required by llvm
+#define __STDC_LIMIT_MACROS
+#define __STDC_CONSTANT_MACROS
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_LLVM
+
+#include <llvm/Value.h>
+#include <llvm/Support/raw_os_ostream.h>
+
+std::ostream&
+operator<< (std::ostream& os, const llvm::Value& v)
+{
+  llvm::raw_os_ostream llvm_out (os);
+  v.print (llvm_out);
+  return os;
+}
+
+#endif
new file mode 100644
--- /dev/null
+++ b/src/interp-core/jit-util.h
@@ -0,0 +1,203 @@
+/*
+
+Copyright (C) 2012 Max Brister <max@2bass.com>
+
+This file is part of Octave.
+
+Octave is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3 of the License, or (at your
+option) any later version.
+
+Octave is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with Octave; see the file COPYING.  If not, see
+<http://www.gnu.org/licenses/>.
+
+*/
+
+// Some utility classes and functions used throughout jit
+
+#if !defined (octave_jit_util_h)
+#define octave_jit_util_h 1
+
+#ifdef HAVE_LLVM
+
+#include <stdexcept>
+
+// we don't want to include llvm headers here, as they require
+// __STDC_LIMIT_MACROS and __STDC_CONSTANT_MACROS be defined in the entire
+// compilation unit
+namespace llvm
+{
+  class Value;
+  class Module;
+  class FunctionPassManager;
+  class PassManager;
+  class ExecutionEngine;
+  class Function;
+  class BasicBlock;
+  class LLVMContext;
+  class Type;
+  class StructType;
+  class Twine;
+  class GlobalVariable;
+  class TerminatorInst;
+  class PHINode;
+
+  class ConstantFolder;
+
+  template <bool preserveNames>
+  class IRBuilderDefaultInserter;
+
+  template <bool preserveNames, typename T, typename Inserter>
+  class IRBuilder;
+
+typedef IRBuilder<true, ConstantFolder, IRBuilderDefaultInserter<true> >
+IRBuilderD;
+}
+
+class octave_base_value;
+class octave_builtin;
+class octave_value;
+class tree;
+class tree_expression;
+
+// thrown when we should give up on JIT and interpret
+class jit_fail_exception : public std::runtime_error
+{
+public:
+  jit_fail_exception (void) : std::runtime_error ("unknown"), mknown (false) {}
+  jit_fail_exception (const std::string& reason) : std::runtime_error (reason),
+                                                   mknown (true)
+  {}
+
+  bool known (void) const { return mknown; }
+private:
+  bool mknown;
+};
+
+// llvm doesn't provide this, and it's really useful for debugging
+std::ostream& operator<< (std::ostream& os, const llvm::Value& v);
+
+template <typename HOLDER_T, typename SUB_T>
+class jit_internal_node;
+
+// jit_internal_list and jit_internal_node implement generic embedded doubly
+// linked lists. List items extend from jit_internal_list, and can be placed
+// in nodes of type jit_internal_node. We use CRTP twice.
+template <typename LIST_T, typename NODE_T>
+class
+jit_internal_list
+{
+  friend class jit_internal_node<LIST_T, NODE_T>;
+public:
+  jit_internal_list (void) : use_head (0), use_tail (0), muse_count (0) {}
+
+  virtual ~jit_internal_list (void)
+  {
+    while (use_head)
+      use_head->stash_value (0);
+  }
+
+  NODE_T *first_use (void) const { return use_head; }
+
+  size_t use_count (void) const { return muse_count; }
+private:
+  NODE_T *use_head;
+  NODE_T *use_tail;
+  size_t muse_count;
+};
+
+// a node for internal linked lists
+template <typename LIST_T, typename NODE_T>
+class
+jit_internal_node
+{
+public:
+  typedef jit_internal_list<LIST_T, NODE_T> jit_ilist;
+
+  jit_internal_node (void) : mvalue (0), mnext (0), mprev (0) {}
+
+  ~jit_internal_node (void) { remove (); }
+
+  LIST_T *value (void) const { return mvalue; }
+
+  void stash_value (LIST_T *avalue)
+  {
+    remove ();
+
+    mvalue = avalue;
+
+    if (mvalue)
+      {
+        jit_ilist *ilist = mvalue;
+        NODE_T *sthis = static_cast<NODE_T *> (this);
+        if (ilist->use_head)
+          {
+            ilist->use_tail->mnext = sthis;
+            mprev = ilist->use_tail;
+          }
+        else
+          ilist->use_head = sthis;
+
+        ilist->use_tail = sthis;
+        ++ilist->muse_count;
+      }
+  }
+
+  NODE_T *next (void) const { return mnext; }
+
+  NODE_T *prev (void) const { return mprev; }
+private:
+  void remove ()
+  {
+    if (mvalue)
+      {
+        jit_ilist *ilist = mvalue;
+        if (mprev)
+          mprev->mnext = mnext;
+        else
+          // we are the use_head
+          ilist->use_head = mnext;
+
+        if (mnext)
+          mnext->mprev = mprev;
+        else
+          // we are the use tail
+          ilist->use_tail = mprev;
+
+        mnext = mprev = 0;
+        --ilist->muse_count;
+        mvalue = 0;
+      }
+  }
+
+  LIST_T *mvalue;
+  NODE_T *mnext;
+  NODE_T *mprev;
+};
+
+// Use like: isa<jit_phi> (value)
+// basically just a short cut type typing dyanmic_cast.
+template <typename T, typename U>
+bool isa (U *value)
+{
+  return dynamic_cast<T *> (value);
+}
+
+#define JIT_ASSIGN_ARG(i) the_args[i] = arg ## i;
+#define JIT_EXPAND(ret, fname, type, isconst, N)                        \
+  ret fname (JIT_PARAM_ARGS OCT_MAKE_DECL_LIST (type, arg, N)) isconst  \
+  {                                                                     \
+    std::vector<type> the_args (N);                                     \
+    OCT_ITERATE_MACRO (JIT_ASSIGN_ARG, N);                              \
+    return fname (JIT_PARAMS the_args);                                 \
+  }
+
+#endif
+#endif
rename from src/ls-ascii-helper.cc
rename to src/interp-core/ls-ascii-helper.cc
rename from src/ls-ascii-helper.h
rename to src/interp-core/ls-ascii-helper.h
rename from src/ls-hdf5.cc
rename to src/interp-core/ls-hdf5.cc
rename from src/ls-hdf5.h
rename to src/interp-core/ls-hdf5.h
rename from src/ls-mat-ascii.cc
rename to src/interp-core/ls-mat-ascii.cc
rename from src/ls-mat-ascii.h
rename to src/interp-core/ls-mat-ascii.h
rename from src/ls-mat4.cc
rename to src/interp-core/ls-mat4.cc
rename from src/ls-mat4.h
rename to src/interp-core/ls-mat4.h
rename from src/ls-mat5.cc
rename to src/interp-core/ls-mat5.cc
--- a/src/ls-mat5.cc
+++ b/src/interp-core/ls-mat5.cc
@@ -1936,7 +1936,7 @@
           bool too_large_for_float = false;
           for (octave_idx_type i = 0; i < nel; i++)
             {
-              double tmp = val [i];
+              double tmp = val[i];
 
               if (! (xisnan (tmp) || xisinf (tmp))
                   && fabs (tmp) > FLT_MAX)
rename from src/ls-mat5.h
rename to src/interp-core/ls-mat5.h
rename from src/ls-oct-binary.cc
rename to src/interp-core/ls-oct-binary.cc
rename from src/ls-oct-binary.h
rename to src/interp-core/ls-oct-binary.h
rename from src/ls-utils.cc
rename to src/interp-core/ls-utils.cc
rename from src/ls-utils.h
rename to src/interp-core/ls-utils.h
rename from src/matherr.c
rename to src/interp-core/matherr.c
rename from src/mex.cc
rename to src/interp-core/mex.cc
--- a/src/mex.cc
+++ b/src/interp-core/mex.cc
@@ -35,9 +35,9 @@
 #include "lo-ieee.h"
 #include "oct-locbuf.h"
 
+#include "Cell.h"
 // mxArray must be declared as a class before including mexproto.h.
-class mxArray;
-#include "Cell.h"
+#include "mxarray.h"
 #include "mexproto.h"
 #include "oct-map.h"
 #include "oct-obj.h"
rename from src/mex.h
rename to src/interp-core/mex.h
rename from src/mexproto.h
rename to src/interp-core/mexproto.h
new file mode 100644
--- /dev/null
+++ b/src/interp-core/module.mk
@@ -0,0 +1,134 @@
+EXTRA_DIST += \
+  interp-core/module.mk \
+  interp-core/gl2ps.c \
+  interp-core/mxarray.in.h \
+  interp-core/oct-errno.in.cc
+
+JIT_INCLUDES = \
+  interp-core/jit-util.h \
+  interp-core/jit-typeinfo.h \
+  interp-core/jit-ir.h \
+  interp-core/pt-jit.h
+
+INTERP_CORE_INCLUDES = \
+  interp-core/Cell.h \
+  interp-core/c-file-ptr-stream.h \
+  interp-core/comment-list.h \
+  interp-core/cutils.h \
+  interp-core/defun-dld.h \
+  interp-core/defun-int.h \
+  interp-core/display.h \
+  interp-core/dynamic-ld.h \
+  interp-core/gl-render.h \
+  interp-core/gl2ps-renderer.h \
+  interp-core/gl2ps.h \
+  interp-core/gripes.h \
+  interp-core/ls-ascii-helper.h \
+  interp-core/ls-hdf5.h \
+  interp-core/ls-mat-ascii.h \
+  interp-core/ls-mat4.h \
+  interp-core/ls-mat5.h \
+  interp-core/ls-oct-binary.h \
+  interp-core/ls-utils.h \
+  interp-core/mex.h \
+  interp-core/mexproto.h \
+  interp-core/mxarray.in.h \
+  interp-core/oct-errno.h \
+  interp-core/oct-fstrm.h \
+  interp-core/oct-hdf5.h \
+  interp-core/oct-iostrm.h \
+  interp-core/oct-lvalue.h \
+  interp-core/oct-map.h \
+  interp-core/oct-obj.h \
+  interp-core/oct-prcstrm.h \
+  interp-core/oct-procbuf.h \
+  interp-core/oct-stdstrm.h \
+  interp-core/oct-stream.h \
+  interp-core/oct-strstrm.h \
+  interp-core/oct.h \
+  interp-core/procstream.h \
+  interp-core/siglist.h \
+  interp-core/sparse-xdiv.h \
+  interp-core/sparse-xpow.h \
+  interp-core/txt-eng-ft.h \
+  interp-core/txt-eng.h \
+  interp-core/unwind-prot.h \
+  interp-core/xdiv.h \
+  interp-core/xnorm.h \
+  interp-core/xpow.h \
+  interp-core/zfstream.h \
+  $(JIT_INCLUDES)
+
+JIT_SRC = \
+  interp-core/jit-util.cc \
+  interp-core/jit-typeinfo.cc \
+  interp-core/jit-ir.cc \
+  interp-core/pt-jit.cc
+
+C_INTERP_CORE_SRC = \
+  interp-core/cutils.c \
+  interp-core/matherr.c \
+  interp-core/siglist.c \
+  interp-core/xgl2ps.c
+
+INTERP_CORE_SRC = \
+  interp-core/Cell.cc \
+  interp-core/c-file-ptr-stream.cc \
+  interp-core/comment-list.cc \
+  interp-core/display.cc \
+  interp-core/dynamic-ld.cc \
+  interp-core/gl-render.cc \
+  interp-core/gl2ps-renderer.cc \
+  interp-core/gripes.cc \
+  interp-core/ls-ascii-helper.cc \
+  interp-core/ls-hdf5.cc \
+  interp-core/ls-mat-ascii.cc \
+  interp-core/ls-mat4.cc \
+  interp-core/ls-mat5.cc \
+  interp-core/ls-oct-binary.cc \
+  interp-core/ls-utils.cc \
+  interp-core/mex.cc \
+  interp-core/oct-fstrm.cc \
+  interp-core/oct-iostrm.cc \
+  interp-core/oct-lvalue.cc \
+  interp-core/oct-map.cc \
+  interp-core/oct-obj.cc \
+  interp-core/oct-prcstrm.cc \
+  interp-core/oct-procbuf.cc \
+  interp-core/oct-stream.cc \
+  interp-core/oct-strstrm.cc \
+  interp-core/procstream.cc \
+  interp-core/sparse-xdiv.cc \
+  interp-core/sparse-xpow.cc \
+  interp-core/txt-eng-ft.cc \
+  interp-core/unwind-prot.cc \
+  interp-core/xdiv.cc \
+  interp-core/xnorm.cc \
+  interp-core/xpow.cc \
+  interp-core/zfstream.cc \
+  $(JIT_SRC) \
+  $(C_INTERP_CORE_SRC)
+
+## FIXME: I don't believe this rule actually fires
+display.df display.lo: CPPFLAGS += $(X11_FLAGS)
+
+## Special rules for sources which must be built before rest of compilation.
+interp-core/oct-errno.cc: interp-core/oct-errno.in.cc Makefile
+	if test -n "$(PERL)"; then \
+	  $(srcdir)/mk-errno-list --perl "$(PERL)" < $< > $@-t; \
+	elif test -n "$(PYTHON)"; then \
+	  $(srcdir)/mk-errno-list --python "$(PYTHON)" < $< > $@-t; \
+	else \
+	  $(SED) '/@SYSDEP_ERRNO_LIST@/D' $< > $@-t; \
+	fi
+	mv $@-t $@
+
+interp-core/mxarray.h: interp-core/mxarray.in.h Makefile
+	$(SED) < $< \
+	  -e "s|%NO_EDIT_WARNING%|DO NOT EDIT!  Generated automatically from $(<F) by Make.|" \
+	  -e "s|%OCTAVE_IDX_TYPE%|${OCTAVE_IDX_TYPE}|" > $@-t
+	mv $@-t $@
+
+noinst_LTLIBRARIES += interp-core/libinterp-core.la
+
+interp_core_libinterp_core_la_SOURCES = $(INTERP_CORE_SRC)
rename from src/mxarray.in.h
rename to src/interp-core/mxarray.in.h
--- a/src/mxarray.in.h
+++ b/src/interp-core/mxarray.in.h
@@ -1,3 +1,4 @@
+// %NO_EDIT_WARNING%
 /*
 
 Copyright (C) 2001-2012 Paul Kienzle
rename from src/oct-errno.h
rename to src/interp-core/oct-errno.h
rename from src/oct-errno.in.cc
rename to src/interp-core/oct-errno.in.cc
--- a/src/oct-errno.in.cc
+++ b/src/interp-core/oct-errno.in.cc
@@ -1,4 +1,4 @@
-// oct-errno.cc.in
+// DO NOT EDIT!  Generated automatically from oct-errno.in.cc by configure
 /*
 
 Copyright (C) 2005-2012 John W. Eaton
rename from src/oct-fstrm.cc
rename to src/interp-core/oct-fstrm.cc
rename from src/oct-fstrm.h
rename to src/interp-core/oct-fstrm.h
rename from src/oct-hdf5.h
rename to src/interp-core/oct-hdf5.h
rename from src/oct-iostrm.cc
rename to src/interp-core/oct-iostrm.cc
rename from src/oct-iostrm.h
rename to src/interp-core/oct-iostrm.h
rename from src/oct-lvalue.cc
rename to src/interp-core/oct-lvalue.cc
rename from src/oct-lvalue.h
rename to src/interp-core/oct-lvalue.h
rename from src/oct-map.cc
rename to src/interp-core/oct-map.cc
rename from src/oct-map.h
rename to src/interp-core/oct-map.h
rename from src/oct-obj.cc
rename to src/interp-core/oct-obj.cc
rename from src/oct-obj.h
rename to src/interp-core/oct-obj.h
rename from src/oct-prcstrm.cc
rename to src/interp-core/oct-prcstrm.cc
rename from src/oct-prcstrm.h
rename to src/interp-core/oct-prcstrm.h
rename from src/oct-procbuf.cc
rename to src/interp-core/oct-procbuf.cc
rename from src/oct-procbuf.h
rename to src/interp-core/oct-procbuf.h
rename from src/oct-stdstrm.h
rename to src/interp-core/oct-stdstrm.h
rename from src/oct-stream.cc
rename to src/interp-core/oct-stream.cc
rename from src/oct-stream.h
rename to src/interp-core/oct-stream.h
rename from src/oct-strstrm.cc
rename to src/interp-core/oct-strstrm.cc
rename from src/oct-strstrm.h
rename to src/interp-core/oct-strstrm.h
rename from src/oct.h
rename to src/interp-core/oct.h
rename from src/procstream.cc
rename to src/interp-core/procstream.cc
rename from src/procstream.h
rename to src/interp-core/procstream.h
new file mode 100644
--- /dev/null
+++ b/src/interp-core/pt-jit.cc
@@ -0,0 +1,1995 @@
+/*
+
+Copyright (C) 2012 Max Brister <max@2bass.com>
+
+This file is part of Octave.
+
+Octave is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3 of the License, or (at your
+option) any later version.
+
+Octave is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with Octave; see the file COPYING.  If not, see
+<http://www.gnu.org/licenses/>.
+
+*/
+
+#define __STDC_LIMIT_MACROS
+#define __STDC_CONSTANT_MACROS
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_LLVM
+
+#include "pt-jit.h"
+
+#include <llvm/Analysis/CallGraph.h>
+#include <llvm/Analysis/Passes.h>
+#include <llvm/Analysis/Verifier.h>
+#include <llvm/LLVMContext.h>
+#include <llvm/ExecutionEngine/ExecutionEngine.h>
+#include <llvm/ExecutionEngine/JIT.h>
+#include <llvm/Module.h>
+#include <llvm/PassManager.h>
+#include <llvm/Support/IRBuilder.h>
+#include <llvm/Support/raw_os_ostream.h>
+#include <llvm/Support/TargetSelect.h>
+#include <llvm/Target/TargetData.h>
+#include <llvm/Transforms/IPO.h>
+#include <llvm/Transforms/Scalar.h>
+
+#ifdef OCTAVE_JIT_DEBUG
+#include <llvm/Bitcode/ReaderWriter.h>
+#endif
+
+#include "symtab.h"
+#include "pt-all.h"
+
+static llvm::IRBuilder<> builder (llvm::getGlobalContext ());
+
+static llvm::LLVMContext& context = llvm::getGlobalContext ();
+
+// -------------------- jit_convert --------------------
+jit_convert::jit_convert (llvm::Module *module, tree &tee,
+                          jit_type *for_bounds)
+  : iterator_count (0), for_bounds_count (0), short_count (0), breaking (false)
+{
+  jit_instruction::reset_ids ();
+
+  entry_block = factory.create<jit_block> ("body");
+  final_block = factory.create<jit_block> ("final");
+  blocks.push_back (entry_block);
+  entry_block->mark_alive ();
+  block = entry_block;
+
+  if (for_bounds)
+    create_variable (next_for_bounds (false), for_bounds);
+
+  visit (tee);
+
+  // FIXME: Remove if we no longer only compile loops
+  assert (! breaking);
+  assert (breaks.empty ());
+  assert (continues.empty ());
+
+  block->append (factory.create<jit_branch> (final_block));
+  blocks.push_back (final_block);
+
+  for (vmap_t::iterator iter = vmap.begin (); iter != vmap.end (); ++iter)
+    {
+      jit_variable *var = iter->second;
+      const std::string& name = var->name ();
+      if (name.size () && name[0] != '#')
+        final_block->append (factory.create<jit_store_argument> (var));
+    }
+
+  construct_ssa ();
+
+  // initialize the worklist to instructions derived from constants
+  const std::list<jit_value *>& constants = factory.constants ();
+  for (std::list<jit_value *>::const_iterator iter = constants.begin ();
+       iter != constants.end (); ++iter)
+    append_users (*iter);
+
+  // the entry block terminator may be a regular branch statement
+  if (entry_block->terminator ())
+    push_worklist (entry_block->terminator ());
+
+  // FIXME: Describe algorithm here
+  while (worklist.size ())
+    {
+      jit_instruction *next = worklist.front ();
+      worklist.pop_front ();
+      next->stash_in_worklist (false);
+
+      if (next->infer ())
+        {
+          // terminators need to be handles specially
+          if (jit_terminator *term = dynamic_cast<jit_terminator *> (next))
+            append_users_term (term);
+          else
+            append_users (next);
+        }
+    }
+
+  remove_dead ();
+  final_block->label ();
+  place_releases ();
+  simplify_phi ();
+
+#ifdef OCTAVE_JIT_DEBUG
+  final_block->label ();
+  std::cout << "-------------------- Compiling tree --------------------\n";
+  std::cout << tee.str_print_code () << std::endl;
+  print_blocks ("octave jit ir");
+#endif
+
+  // for now just init arguments from entry, later we will have to do something
+  // more interesting
+  for (jit_block::iterator iter = entry_block->begin ();
+       iter != entry_block->end (); ++iter)
+    if (jit_extract_argument *extract
+        = dynamic_cast<jit_extract_argument *> (*iter))
+      arguments.push_back (std::make_pair (extract->name (), true));
+
+  jit_convert_llvm to_llvm (*this);
+  function = to_llvm.convert (module, arguments, blocks, constants);
+
+#ifdef OCTAVE_JIT_DEBUG
+  std::cout << "-------------------- llvm ir --------------------";
+  llvm::raw_os_ostream llvm_cout (std::cout);
+  function->print (llvm_cout);
+  std::cout << std::endl;
+  llvm::verifyFunction (*function);
+#endif
+}
+
+void
+jit_convert::visit_anon_fcn_handle (tree_anon_fcn_handle&)
+{
+  throw jit_fail_exception ();
+}
+
+void
+jit_convert::visit_argument_list (tree_argument_list&)
+{
+  throw jit_fail_exception ();
+}
+
+void
+jit_convert::visit_binary_expression (tree_binary_expression& be)
+{
+  if (be.op_type () >= octave_value::num_binary_ops)
+    {
+      tree_boolean_expression *boole;
+      boole = dynamic_cast<tree_boolean_expression *> (&be);
+      assert (boole);
+      bool is_and = boole->op_type () == tree_boolean_expression::bool_and;
+
+      std::string short_name = next_shortcircut_result ();
+      jit_variable *short_result = factory.create<jit_variable> (short_name);
+      vmap[short_name] = short_result;
+
+      jit_block *done = factory.create<jit_block> (block->name ());
+      tree_expression *lhs = be.lhs ();
+      jit_value *lhsv = visit (lhs);
+      lhsv = create_checked (&jit_typeinfo::logically_true, lhsv);
+
+      jit_block *short_early = factory.create<jit_block> ("short_early");
+      blocks.push_back (short_early);
+
+      jit_block *short_cont = factory.create<jit_block> ("short_cont");
+
+      if (is_and)
+        block->append (factory.create<jit_cond_branch> (lhsv, short_cont, short_early));
+      else
+        block->append (factory.create<jit_cond_branch> (lhsv, short_early, short_cont));
+
+      block = short_early;
+
+      jit_value *early_result = factory.create<jit_const_bool> (! is_and);
+      block->append (factory.create<jit_assign> (short_result, early_result));
+      block->append (factory.create<jit_branch> (done));
+
+      blocks.push_back (short_cont);
+      block = short_cont;
+
+      tree_expression *rhs = be.rhs ();
+      jit_value *rhsv = visit (rhs);
+      rhsv = create_checked (&jit_typeinfo::logically_true, rhsv);
+      block->append (factory.create<jit_assign> (short_result, rhsv));
+      block->append (factory.create<jit_branch> (done));
+
+      blocks.push_back (done);
+      block = done;
+      result = short_result;
+    }
+  else
+    {
+      tree_expression *lhs = be.lhs ();
+      jit_value *lhsv = visit (lhs);
+
+      tree_expression *rhs = be.rhs ();
+      jit_value *rhsv = visit (rhs);
+
+      const jit_operation& fn = jit_typeinfo::binary_op (be.op_type ());
+      result = create_checked (fn, lhsv, rhsv);
+    }
+}
+
+void
+jit_convert::visit_break_command (tree_break_command&)
+{
+  breaks.push_back (block);
+  breaking = true;
+}
+
+void
+jit_convert::visit_colon_expression (tree_colon_expression& expr)
+{
+  // in the futher we need to add support for classes and deal with rvalues
+  jit_value *base = visit (expr.base ());
+  jit_value *limit = visit (expr.limit ());
+  jit_value *increment;
+  tree_expression *tinc = expr.increment ();
+
+  if (tinc)
+    increment = visit (tinc);
+  else
+    increment = factory.create<jit_const_scalar> (1);
+
+  result = block->append (factory.create<jit_call> (jit_typeinfo::make_range, base,
+                                            limit, increment));
+}
+
+void
+jit_convert::visit_continue_command (tree_continue_command&)
+{
+  continues.push_back (block);
+  breaking = true;
+}
+
+void
+jit_convert::visit_global_command (tree_global_command&)
+{
+  throw jit_fail_exception ();
+}
+
+void
+jit_convert::visit_persistent_command (tree_persistent_command&)
+{
+  throw jit_fail_exception ();
+}
+
+void
+jit_convert::visit_decl_elt (tree_decl_elt&)
+{
+  throw jit_fail_exception ();
+}
+
+void
+jit_convert::visit_decl_init_list (tree_decl_init_list&)
+{
+  throw jit_fail_exception ();
+}
+
+void
+jit_convert::visit_simple_for_command (tree_simple_for_command& cmd)
+{
+  // Note we do an initial check to see if the loop will run atleast once.
+  // This allows us to get better type inference bounds on variables defined
+  // and used only inside the for loop (e.g. the index variable)
+
+  // If we are a nested for loop we need to store the previous breaks
+  assert (! breaking);
+  unwind_protect prot;
+  prot.protect_var (breaks);
+  prot.protect_var (continues);
+  prot.protect_var (breaking);
+  breaks.clear ();
+  continues.clear ();
+
+  // we need a variable for our iterator, because it is used in multiple blocks
+  std::string iter_name = next_iterator ();
+  jit_variable *iterator = factory.create<jit_variable> (iter_name);
+  factory.create<jit_variable> (iter_name);
+  vmap[iter_name] = iterator;
+
+  jit_block *body = factory.create<jit_block> ("for_body");
+  blocks.push_back (body);
+
+  jit_block *tail = factory.create<jit_block> ("for_tail");
+
+  // do control expression, iter init, and condition check in prev_block (block)
+  // if we are the top level for loop, the bounds is an input argument.
+  jit_value *control = find_variable (next_for_bounds ());
+  if (! control)
+    control = visit (cmd.control_expr ());
+  jit_call *init_iter = factory.create<jit_call> (jit_typeinfo::for_init,
+                                                  control);
+  block->append (init_iter);
+  block->append (factory.create<jit_assign> (iterator, init_iter));
+
+  jit_call *check = factory.create<jit_call> (jit_typeinfo::for_check, control,
+                                              iterator);
+  block->append (check);
+  block->append (factory.create<jit_cond_branch> (check, body, tail));
+  block = body;
+
+  // compute the syntactical iterator
+  jit_call *idx_rhs = factory.create<jit_call> (jit_typeinfo::for_index,
+                                                control, iterator);
+  block->append (idx_rhs);
+  do_assign (cmd.left_hand_side (), idx_rhs);
+
+  // do loop
+  tree_statement_list *pt_body = cmd.body ();
+  pt_body->accept (*this);
+
+  if (breaking && continues.empty ())
+    {
+      // WTF are you doing user? Every branch was a continue, why did you have
+      // a loop??? Users are silly people...
+      finish_breaks (tail, breaks);
+      blocks.push_back (tail);
+      block = tail;
+      return;
+    }
+
+  // check our condition, continues jump to this block
+  jit_block *check_block = factory.create<jit_block> ("for_check");
+  blocks.push_back (check_block);
+
+  if (! breaking)
+    block->append (factory.create<jit_branch> (check_block));
+  finish_breaks (check_block, continues);
+
+  block = check_block;
+  const jit_operation& add_fn = jit_typeinfo::binary_op (octave_value::op_add);
+  jit_value *one = factory.create<jit_const_index> (1);
+  jit_call *iter_inc = factory.create<jit_call> (add_fn, iterator, one);
+  block->append (iter_inc);
+  block->append (factory.create<jit_assign> (iterator, iter_inc));
+  check = block->append (factory.create<jit_call> (jit_typeinfo::for_check, control,
+                                           iterator));
+  block->append (factory.create<jit_cond_branch> (check, body, tail));
+
+  // breaks will go to our tail
+  blocks.push_back (tail);
+  finish_breaks (tail, breaks);
+  block = tail;
+}
+
+void
+jit_convert::visit_complex_for_command (tree_complex_for_command&)
+{
+  throw jit_fail_exception ();
+}
+
+void
+jit_convert::visit_octave_user_script (octave_user_script&)
+{
+  throw jit_fail_exception ();
+}
+
+void
+jit_convert::visit_octave_user_function (octave_user_function&)
+{
+  throw jit_fail_exception ();
+}
+
+void
+jit_convert::visit_octave_user_function_header (octave_user_function&)
+{
+  throw jit_fail_exception ();
+}
+
+void
+jit_convert::visit_octave_user_function_trailer (octave_user_function&)
+{
+  throw jit_fail_exception ();
+}
+
+void
+jit_convert::visit_function_def (tree_function_def&)
+{
+  throw jit_fail_exception ();
+}
+
+void
+jit_convert::visit_identifier (tree_identifier& ti)
+{
+  if (ti.has_magic_end ())
+    {
+      if (!end_context.size ())
+        throw jit_fail_exception ("Illegal end");
+      result = block->append (factory.create<jit_magic_end> (end_context));
+    }
+  else
+    result = get_variable (ti.name ());
+}
+
+void
+jit_convert::visit_if_clause (tree_if_clause&)
+{
+  throw jit_fail_exception ();
+}
+
+void
+jit_convert::visit_if_command (tree_if_command& cmd)
+{
+  tree_if_command_list *lst = cmd.cmd_list ();
+  assert (lst); // jwe: Can this be null?
+  lst->accept (*this);
+}
+
+void
+jit_convert::visit_if_command_list (tree_if_command_list& lst)
+{
+  tree_if_clause *last = lst.back ();
+  size_t last_else = static_cast<size_t> (last->is_else_clause ());
+
+  // entry_blocks represents the block you need to enter in order to execute
+  // the condition check for the ith clause. For the else, it is simple the
+  // else body. If there is no else body, then it is padded with the tail
+  std::vector<jit_block *> entry_blocks (lst.size () + 1 - last_else);
+  std::vector<jit_block *> branch_blocks (lst.size (), 0); // final blocks
+  entry_blocks[0] = block;
+
+  // we need to construct blocks first, because they have jumps to eachother
+  tree_if_command_list::iterator iter = lst.begin ();
+  ++iter;
+  for (size_t i = 1; iter != lst.end (); ++iter, ++i)
+    {
+      tree_if_clause *tic = *iter;
+      if (tic->is_else_clause ())
+        entry_blocks[i] = factory.create<jit_block> ("else");
+      else
+        entry_blocks[i] = factory.create<jit_block> ("ifelse_cond");
+    }
+
+  jit_block *tail = factory.create<jit_block> ("if_tail");
+  if (! last_else)
+    entry_blocks[entry_blocks.size () - 1] = tail;
+
+  size_t num_incomming = 0; // number of incomming blocks to our tail
+  iter = lst.begin ();
+  for (size_t i = 0; iter != lst.end (); ++iter, ++i)
+    {
+      tree_if_clause *tic = *iter;
+      block = entry_blocks[i];
+      assert (block);
+
+      if (i) // the first block is prev_block, so it has already been added
+        blocks.push_back (entry_blocks[i]);
+
+      if (! tic->is_else_clause ())
+        {
+          tree_expression *expr = tic->condition ();
+          jit_value *cond = visit (expr);
+          jit_call *check = create_checked (&jit_typeinfo::logically_true,
+                                            cond);
+          jit_block *body = factory.create<jit_block> (i == 0 ? "if_body"
+                                                       : "ifelse_body");
+          blocks.push_back (body);
+
+          jit_instruction *br = factory.create<jit_cond_branch> (check, body,
+                                                        entry_blocks[i + 1]);
+          block->append (br);
+          block = body;
+        }
+
+      tree_statement_list *stmt_lst = tic->commands ();
+      assert (stmt_lst); // jwe: Can this be null?
+      stmt_lst->accept (*this);
+
+      if (breaking)
+        breaking = false;
+      else
+        {
+          ++num_incomming;
+          block->append (factory.create<jit_branch> (tail));
+        }
+    }
+
+  if (num_incomming || ! last_else)
+    {
+      blocks.push_back (tail);
+      block = tail;
+    }
+  else
+    // every branch broke, so we don't have a tail
+    breaking = true;
+}
+
+void
+jit_convert::visit_index_expression (tree_index_expression& exp)
+{
+  result = resolve (jit_typeinfo::paren_subsref (), exp);
+}
+
+void
+jit_convert::visit_matrix (tree_matrix&)
+{
+  throw jit_fail_exception ();
+}
+
+void
+jit_convert::visit_cell (tree_cell&)
+{
+  throw jit_fail_exception ();
+}
+
+void
+jit_convert::visit_multi_assignment (tree_multi_assignment&)
+{
+  throw jit_fail_exception ();
+}
+
+void
+jit_convert::visit_no_op_command (tree_no_op_command&)
+{
+  throw jit_fail_exception ();
+}
+
+void
+jit_convert::visit_constant (tree_constant& tc)
+{
+  octave_value v = tc.rvalue1 ();
+  if (v.is_real_scalar () && v.is_double_type ())
+    {
+      double dv = v.double_value ();
+      result = factory.create<jit_const_scalar> (dv);
+    }
+  else if (v.is_range ())
+    {
+      Range rv = v.range_value ();
+      result = factory.create<jit_const_range> (rv);
+    }
+  else if (v.is_complex_scalar ())
+    {
+      Complex cv = v.complex_value ();
+      result = factory.create<jit_const_complex> (cv);
+    }
+  else
+    throw jit_fail_exception ("Unknown constant");
+}
+
+void
+jit_convert::visit_fcn_handle (tree_fcn_handle&)
+{
+  throw jit_fail_exception ();
+}
+
+void
+jit_convert::visit_parameter_list (tree_parameter_list&)
+{
+  throw jit_fail_exception ();
+}
+
+void
+jit_convert::visit_postfix_expression (tree_postfix_expression& tpe)
+{
+  octave_value::unary_op etype = tpe.op_type ();
+  tree_expression *operand = tpe.operand ();
+  jit_value *operandv = visit (operand);
+
+  const jit_operation& fn = jit_typeinfo::unary_op (etype);
+  result = create_checked (fn, operandv);
+
+  if (etype == octave_value::op_incr || etype == octave_value::op_decr)
+    {
+      jit_value *ret = create_checked (&jit_typeinfo::copy, operandv);
+      do_assign (operand, result);
+      result = ret;
+    }
+}
+
+void
+jit_convert::visit_prefix_expression (tree_prefix_expression& tpe)
+{
+  octave_value::unary_op etype = tpe.op_type ();
+  tree_expression *operand = tpe.operand ();
+  const jit_operation& fn = jit_typeinfo::unary_op (etype);
+  result = create_checked (fn, visit (operand));
+
+  if (etype == octave_value::op_incr || etype == octave_value::op_decr)
+    do_assign (operand, result);
+}
+
+void
+jit_convert::visit_return_command (tree_return_command&)
+{
+  throw jit_fail_exception ();
+}
+
+void
+jit_convert::visit_return_list (tree_return_list&)
+{
+  throw jit_fail_exception ();
+}
+
+void
+jit_convert::visit_simple_assignment (tree_simple_assignment& tsa)
+{
+  tree_expression *rhs = tsa.right_hand_side ();
+  jit_value *rhsv = visit (rhs);
+  octave_value::assign_op op = tsa.op_type ();
+
+  if (op != octave_value::op_asn_eq)
+    {
+      // do the equivlent binary operation, then assign. This is always correct,
+      // but isn't always optimal.
+      tree_expression *lhs = tsa.left_hand_side ();
+      jit_value *lhsv = visit (lhs);
+      octave_value::binary_op bop = octave_value::assign_op_to_binary_op (op);
+      const jit_operation& fn = jit_typeinfo::binary_op (bop);
+      rhsv = create_checked (fn, lhsv, rhsv);
+    }
+
+  result = do_assign (tsa.left_hand_side (), rhsv);
+}
+
+void
+jit_convert::visit_statement (tree_statement& stmt)
+{
+  tree_command *cmd = stmt.command ();
+  tree_expression *expr = stmt.expression ();
+
+  if (cmd)
+    visit (cmd);
+  else
+    {
+      // stolen from tree_evaluator::visit_statement
+      bool do_bind_ans = false;
+
+      if (expr->is_identifier ())
+        {
+          tree_identifier *id = dynamic_cast<tree_identifier *> (expr);
+
+          do_bind_ans = (! id->is_variable ());
+        }
+      else
+        do_bind_ans = (! expr->is_assignment_expression ());
+
+      jit_value *expr_result = visit (expr);
+
+      if (do_bind_ans)
+        do_assign ("ans", expr_result, expr->print_result ());
+      else if (expr->is_identifier () && expr->print_result ())
+        {
+          // FIXME: ugly hack, we need to come up with a way to pass
+          // nargout to visit_identifier
+          const jit_operation& fn = jit_typeinfo::print_value ();
+          jit_const_string *name = factory.create<jit_const_string> (expr->name ());
+          block->append (factory.create<jit_call> (fn, name, expr_result));
+        }
+    }
+}
+
+void
+jit_convert::visit_statement_list (tree_statement_list& lst)
+{
+  for (tree_statement_list::iterator iter = lst.begin (); iter != lst.end();
+       ++iter)
+    {
+      tree_statement *elt = *iter;
+      // jwe: Can this ever be null?
+      assert (elt);
+      elt->accept (*this);
+
+      if (breaking)
+        break;
+    }
+}
+
+void
+jit_convert::visit_switch_case (tree_switch_case&)
+{
+  throw jit_fail_exception ();
+}
+
+void
+jit_convert::visit_switch_case_list (tree_switch_case_list&)
+{
+  throw jit_fail_exception ();
+}
+
+void
+jit_convert::visit_switch_command (tree_switch_command&)
+{
+  throw jit_fail_exception ();
+}
+
+void
+jit_convert::visit_try_catch_command (tree_try_catch_command&)
+{
+  throw jit_fail_exception ();
+}
+
+void
+jit_convert::visit_unwind_protect_command (tree_unwind_protect_command&)
+{
+  throw jit_fail_exception ();
+}
+
+void
+jit_convert::visit_while_command (tree_while_command& wc)
+{
+  assert (! breaking);
+  unwind_protect prot;
+  prot.protect_var (breaks);
+  prot.protect_var (continues);
+  prot.protect_var (breaking);
+  breaks.clear ();
+  continues.clear ();
+
+  jit_block *cond_check = factory.create<jit_block> ("while_cond_check");
+  block->append (factory.create<jit_branch> (cond_check));
+  blocks.push_back (cond_check);
+  block = cond_check;
+
+  tree_expression *expr = wc.condition ();
+  assert (expr && "While expression can not be null");
+  jit_value *check = visit (expr);
+  check = create_checked (&jit_typeinfo::logically_true, check);
+
+  jit_block *body = factory.create<jit_block> ("while_body");
+  blocks.push_back (body);
+
+  jit_block *tail = factory.create<jit_block> ("while_tail");
+  block->append (factory.create<jit_cond_branch> (check, body, tail));
+  block = body;
+
+  tree_statement_list *loop_body = wc.body ();
+  if (loop_body)
+    loop_body->accept (*this);
+
+  finish_breaks (tail, breaks);
+  finish_breaks (cond_check, continues);
+
+  if (! breaking)
+    block->append (factory.create<jit_branch> (cond_check));
+
+  blocks.push_back (tail);
+  block = tail;
+}
+
+void
+jit_convert::visit_do_until_command (tree_do_until_command&)
+{
+  throw jit_fail_exception ();
+}
+
+jit_call *
+jit_convert::create_checked_impl (jit_call *ret)
+{
+  block->append (ret);
+
+  jit_block *normal = factory.create<jit_block> (block->name ());
+  jit_error_check *check = factory.create<jit_error_check> (ret, normal,
+                                                            final_block);
+  block->append (check);
+  blocks.push_back (normal);
+  block = normal;
+
+  return ret;
+}
+
+jit_variable *
+jit_convert::find_variable (const std::string& vname) const
+{
+  vmap_t::const_iterator iter;
+  iter = vmap.find (vname);
+  return iter != vmap.end () ? iter->second : 0;
+}
+
+jit_variable *
+jit_convert::get_variable (const std::string& vname)
+{
+  jit_variable *ret = find_variable (vname);
+  if (ret)
+    return ret;
+
+  octave_value val = symbol_table::find (vname);
+  jit_type *type = jit_typeinfo::type_of (val);
+  return create_variable (vname, type);
+}
+
+jit_variable *
+jit_convert::create_variable (const std::string& vname, jit_type *type)
+{
+  jit_variable *var = factory.create<jit_variable> (vname);
+  jit_extract_argument *extract;
+  extract = factory.create<jit_extract_argument> (type, var);
+  entry_block->prepend (extract);
+  return vmap[vname] = var;
+}
+
+std::string
+jit_convert::next_name (const char *prefix, size_t& count, bool inc)
+{
+  std::stringstream ss;
+  ss << prefix << count;
+  if (inc)
+    ++count;
+  return ss.str ();
+}
+
+jit_instruction *
+jit_convert::resolve (const jit_operation& fres, tree_index_expression& exp,
+                      jit_value *extra_arg)
+{
+  std::string type = exp.type_tags ();
+  if (! (type.size () == 1 && type[0] == '('))
+    throw jit_fail_exception ("Unsupported index operation");
+
+  std::list<tree_argument_list *> args = exp.arg_lists ();
+  if (args.size () != 1)
+    throw jit_fail_exception ("Bad number of arguments in tree_index_expression");
+
+  tree_argument_list *arg_list = args.front ();
+  if (! arg_list)
+    throw jit_fail_exception ("null argument list");
+
+  if (arg_list->size () < 1)
+    throw jit_fail_exception ("Empty arg_list");
+
+  tree_expression *tree_object = exp.expression ();
+  jit_value *object = visit (tree_object);
+
+  size_t narg = arg_list->size ();
+  tree_argument_list::iterator iter = arg_list->begin ();
+  bool have_extra = extra_arg;
+  std::vector<jit_value *> call_args (narg + 1 + have_extra);
+  call_args[0] = object;
+
+  for (size_t idx = 0; iter != arg_list->end (); ++idx, ++iter)
+    {
+      unwind_protect prot;
+      prot.add_method (&end_context,
+                       &std::vector<jit_magic_end::context>::pop_back);
+
+      jit_magic_end::context ctx (factory, object, idx, narg);
+      end_context.push_back (ctx);
+      call_args[idx + 1] = visit (*iter);
+    }
+
+  if (extra_arg)
+    call_args[call_args.size () - 1] = extra_arg;
+
+  return create_checked (fres, call_args);
+}
+
+jit_value *
+jit_convert::do_assign (tree_expression *exp, jit_value *rhs, bool artificial)
+{
+  if (! exp)
+    throw jit_fail_exception ("NULL lhs in assign");
+
+  if (isa<tree_identifier> (exp))
+    return do_assign (exp->name (), rhs, exp->print_result (), artificial);
+  else if (tree_index_expression *idx
+           = dynamic_cast<tree_index_expression *> (exp))
+    {
+      jit_value *new_object = resolve (jit_typeinfo::paren_subsasgn (), *idx,
+                                       rhs);
+      do_assign (idx->expression (), new_object, true);
+
+      // FIXME: Will not work for values that must be release/grabed
+      return rhs;
+    }
+  else
+    throw jit_fail_exception ("Unsupported assignment");
+}
+
+jit_value *
+jit_convert::do_assign (const std::string& lhs, jit_value *rhs,
+                        bool print, bool artificial)
+{
+  jit_variable *var = get_variable (lhs);
+  jit_assign *assign = block->append (factory.create<jit_assign> (var, rhs));
+
+  if (artificial)
+    assign->mark_artificial ();
+
+  if (print)
+    {
+      const jit_operation& print_fn = jit_typeinfo::print_value ();
+      jit_const_string *name = factory.create<jit_const_string> (lhs);
+      block->append (factory.create<jit_call> (print_fn, name, var));
+    }
+
+  return var;
+}
+
+jit_value *
+jit_convert::visit (tree& tee)
+{
+  unwind_protect prot;
+  prot.protect_var (result);
+
+  tee.accept (*this);
+  return result;
+}
+
+void
+jit_convert::append_users_term (jit_terminator *term)
+{
+  for (size_t i = 0; i < term->successor_count (); ++i)
+    {
+      if (term->alive (i))
+        {
+          jit_block *succ = term->successor (i);
+          for (jit_block::iterator iter = succ->begin (); iter != succ->end ()
+                 && isa<jit_phi> (*iter); ++iter)
+            push_worklist (*iter);
+
+          jit_terminator *sterm = succ->terminator ();
+          if (sterm)
+            push_worklist (sterm);
+        }
+    }
+}
+
+void
+jit_convert::construct_ssa (void)
+{
+  final_block->label ();
+  final_block->compute_idom (entry_block);
+  entry_block->compute_df ();
+  entry_block->create_dom_tree ();
+
+  // insert phi nodes where needed, this is done on a per variable basis
+  for (vmap_t::iterator iter = vmap.begin (); iter != vmap.end (); ++iter)
+    {
+      jit_block::df_set visited, added_phi;
+      std::list<jit_block *> ssa_worklist;
+      iter->second->use_blocks (visited);
+      ssa_worklist.insert (ssa_worklist.begin (), visited.begin (),
+                           visited.end ());
+
+      while (ssa_worklist.size ())
+        {
+          jit_block *b = ssa_worklist.front ();
+          ssa_worklist.pop_front ();
+
+          for (jit_block::df_iterator diter = b->df_begin ();
+               diter != b->df_end (); ++diter)
+            {
+              jit_block *dblock = *diter;
+              if (! added_phi.count (dblock))
+                {
+                  jit_phi *phi = factory.create<jit_phi> (iter->second,
+                                                  dblock->use_count ());
+                  dblock->prepend (phi);
+                  added_phi.insert (dblock);
+                }
+
+              if (! visited.count (dblock))
+                {
+                  ssa_worklist.push_back (dblock);
+                  visited.insert (dblock);
+                }
+            }
+        }
+    }
+
+  do_construct_ssa (*entry_block, entry_block->visit_count ());
+}
+
+void
+jit_convert::do_construct_ssa (jit_block& ablock, size_t avisit_count)
+{
+  if (ablock.visited (avisit_count))
+    return;
+
+  // replace variables with their current SSA value
+  for (jit_block::iterator iter = ablock.begin (); iter != ablock.end (); ++iter)
+    {
+      jit_instruction *instr = *iter;
+      instr->construct_ssa ();
+      instr->push_variable ();
+    }
+
+  // finish phi nodes of successors
+  for (size_t i = 0; i < ablock.successor_count (); ++i)
+    {
+      jit_block *finish = ablock.successor (i);
+
+      for (jit_block::iterator iter = finish->begin (); iter != finish->end ()
+             && isa<jit_phi> (*iter);)
+        {
+          jit_phi *phi = static_cast<jit_phi *> (*iter);
+          jit_variable *var = phi->dest ();
+          if (var->has_top ())
+            {
+              phi->add_incomming (&ablock, var->top ());
+              ++iter;
+            }
+          else
+            {
+              // temporaries may have extranious phi nodes which can be removed
+              assert (! phi->use_count ());
+              assert (var->name ().size () && var->name ()[0] == '#');
+              iter = finish->remove (iter);
+            }
+        }
+    }
+
+  for (size_t i = 0; i < ablock.dom_successor_count (); ++i)
+    do_construct_ssa (*ablock.dom_successor (i), avisit_count);
+
+  ablock.pop_all ();
+}
+
+void
+jit_convert::remove_dead ()
+{
+  block_list::iterator biter;
+  for (biter = blocks.begin (); biter != blocks.end (); ++biter)
+    {
+      jit_block *b = *biter;
+      if (b->alive ())
+        {
+          for (jit_block::iterator iter = b->begin (); iter != b->end ()
+                 && isa<jit_phi> (*iter);)
+            {
+              jit_phi *phi = static_cast<jit_phi *> (*iter);
+              if (phi->prune ())
+                iter = b->remove (iter);
+              else
+                ++iter;
+            }
+        }
+    }
+
+  for (biter = blocks.begin (); biter != blocks.end ();)
+    {
+      jit_block *b = *biter;
+      if (b->alive ())
+        {
+          // FIXME: A special case for jit_error_check, if we generalize to
+          // we will need to change!
+          jit_terminator *term = b->terminator ();
+          if (term && term->successor_count () == 2 && ! term->alive (0))
+            {
+              jit_block *succ = term->successor (1);
+              term->remove ();
+              jit_branch *abreak = factory.create<jit_branch> (succ);
+              b->append (abreak);
+              abreak->infer ();
+            }
+
+          ++biter;
+        }
+      else
+        {
+          jit_terminator *term = b->terminator ();
+          if (term)
+            term->remove ();
+          biter = blocks.erase (biter);
+        }
+    }
+}
+
+void
+jit_convert::place_releases (void)
+{
+  std::set<jit_value *> temporaries;
+  for (block_list::iterator iter = blocks.begin (); iter != blocks.end ();
+       ++iter)
+    {
+      jit_block& ablock = **iter;
+      if (ablock.id () != jit_block::NO_ID)
+        {
+          release_temp (ablock, temporaries);
+          release_dead_phi (ablock);
+        }
+    }
+}
+
+void
+jit_convert::release_temp (jit_block& ablock, std::set<jit_value *>& temp)
+{
+  for (jit_block::iterator iter = ablock.begin (); iter != ablock.end ();
+       ++iter)
+    {
+      jit_instruction *instr = *iter;
+
+      // check for temporaries that require release and live across
+      // multiple blocks
+      if (instr->needs_release ())
+        {
+          jit_block *fu_block = instr->first_use_block ();
+          if (fu_block && fu_block != &ablock && instr->needs_release ())
+            temp.insert (instr);
+        }
+
+      if (isa<jit_call> (instr))
+        {
+          // place releases for temporary arguments
+          for (size_t i = 0; i < instr->argument_count (); ++i)
+            {
+              jit_value *arg = instr->argument (i);
+              if (! arg->needs_release ())
+                continue;
+
+              jit_call *release
+                = factory.create<jit_call> (&jit_typeinfo::release, arg);
+              release->infer ();
+              ablock.insert_after (iter, release);
+              ++iter;
+              temp.erase (arg);
+            }
+        }
+    }
+
+  if (! temp.size () || ! isa<jit_error_check> (ablock.terminator ()))
+    return;
+
+  // FIXME: If we support try/catch or unwind_protect final_block may not be the
+  // destination
+  jit_block *split = ablock.maybe_split (factory, blocks, final_block);
+  jit_terminator *term = split->terminator ();
+  for (std::set<jit_value *>::const_iterator iter = temp.begin ();
+       iter != temp.end (); ++iter)
+    {
+      jit_value *value = *iter;
+      jit_call *release
+        = factory.create<jit_call> (&jit_typeinfo::release, value);
+      split->insert_before (term, release);
+      release->infer ();
+    }
+}
+
+void
+jit_convert::release_dead_phi (jit_block& ablock)
+{
+  jit_block::iterator iter = ablock.begin ();
+  while (iter != ablock.end () && isa<jit_phi> (*iter))
+    {
+      jit_phi *phi = static_cast<jit_phi *> (*iter);
+      ++iter;
+
+      jit_use *use = phi->first_use ();
+      if (phi->use_count () == 1 && isa<jit_assign> (use->user ()))
+        {
+          // instead of releasing on assign, release on all incomming branches,
+          // this can get rid of casts inside loops
+          for (size_t i = 0; i < phi->argument_count (); ++i)
+            {
+              jit_value *arg = phi->argument (i);
+              if (! arg->needs_release ())
+                continue;
+
+              jit_block *inc = phi->incomming (i);
+              jit_block *split = inc->maybe_split (factory, blocks, ablock);
+              jit_terminator *term = split->terminator ();
+              jit_call *release
+                = factory.create<jit_call> (jit_typeinfo::release, arg);
+              release->infer ();
+              split->insert_before (term, release);
+            }
+
+          phi->replace_with (0);
+          phi->remove ();
+        }
+    }
+}
+
+void
+jit_convert::simplify_phi (void)
+{
+  for (block_list::iterator biter = blocks.begin (); biter != blocks.end ();
+       ++biter)
+    {
+      jit_block &ablock = **biter;
+      for (jit_block::iterator iter = ablock.begin (); iter != ablock.end ()
+             && isa<jit_phi> (*iter); ++iter)
+        simplify_phi (*static_cast<jit_phi *> (*iter));
+    }
+}
+
+void
+jit_convert::simplify_phi (jit_phi& phi)
+{
+  jit_block& pblock = *phi.parent ();
+  const jit_operation& cast_fn = jit_typeinfo::cast (phi.type ());
+  jit_variable *dest = phi.dest ();
+  for (size_t i = 0; i < phi.argument_count (); ++i)
+    {
+      jit_value *arg = phi.argument (i);
+      if (arg->type () != phi.type ())
+        {
+          jit_block *pred = phi.incomming (i);
+          jit_block *split = pred->maybe_split (factory, blocks, pblock);
+          jit_terminator *term = split->terminator ();
+          jit_instruction *cast = factory.create<jit_call> (cast_fn, arg);
+          jit_assign *assign = factory.create<jit_assign> (dest, cast);
+
+          split->insert_before (term, cast);
+          split->insert_before (term, assign);
+          cast->infer ();
+          assign->infer ();
+          phi.stash_argument (i, assign);
+        }
+    }
+}
+
+void
+jit_convert::finish_breaks (jit_block *dest, const block_list& lst)
+{
+  for (block_list::const_iterator iter = lst.begin (); iter != lst.end ();
+       ++iter)
+    {
+      jit_block *b = *iter;
+      b->append (factory.create<jit_branch> (dest));
+    }
+}
+
+// -------------------- jit_convert::convert_llvm --------------------
+llvm::Function *
+jit_convert_llvm::convert (llvm::Module *module,
+                           const std::vector<std::pair<std::string, bool> >&
+                           args,
+                           const jit_block_list& blocks,
+                           const std::list<jit_value *>& constants)
+{
+  jit_type *any = jit_typeinfo::get_any ();
+
+  // argument is an array of octave_base_value*, or octave_base_value**
+  llvm::Type *arg_type = any->to_llvm (); // this is octave_base_value*
+  arg_type = arg_type->getPointerTo ();
+  llvm::FunctionType *ft = llvm::FunctionType::get (llvm::Type::getVoidTy (context),
+                                                    arg_type, false);
+  function = llvm::Function::Create (ft, llvm::Function::ExternalLinkage,
+                                     "foobar", module);
+
+  try
+    {
+      prelude = llvm::BasicBlock::Create (context, "prelude", function);
+      builder.SetInsertPoint (prelude);
+
+      llvm::Value *arg = function->arg_begin ();
+      for (size_t i = 0; i < args.size (); ++i)
+        {
+          llvm::Value *loaded_arg = builder.CreateConstInBoundsGEP1_32 (arg, i);
+          arguments[args[i].first] = loaded_arg;
+        }
+
+      std::list<jit_block *>::const_iterator biter;
+      for (biter = blocks.begin (); biter != blocks.end (); ++biter)
+        {
+          jit_block *jblock = *biter;
+          llvm::BasicBlock *block = llvm::BasicBlock::Create (context,
+                                                              jblock->name (),
+                                                              function);
+          jblock->stash_llvm (block);
+        }
+
+      jit_block *first = *blocks.begin ();
+      builder.CreateBr (first->to_llvm ());
+
+      // constants aren't in the IR, we visit those first
+      for (std::list<jit_value *>::const_iterator iter = constants.begin ();
+           iter != constants.end (); ++iter)
+        if (! isa<jit_instruction> (*iter))
+          visit (*iter);
+
+      // convert all instructions
+      for (biter = blocks.begin (); biter != blocks.end (); ++biter)
+        visit (*biter);
+
+      // now finish phi nodes
+      for (biter = blocks.begin (); biter != blocks.end (); ++biter)
+        {
+          jit_block& block = **biter;
+          for (jit_block::iterator piter = block.begin ();
+               piter != block.end () && isa<jit_phi> (*piter); ++piter)
+            {
+              jit_instruction *phi = *piter;
+              finish_phi (static_cast<jit_phi *> (phi));
+            }
+        }
+
+      jit_block *last = blocks.back ();
+      builder.SetInsertPoint (last->to_llvm ());
+      builder.CreateRetVoid ();
+    } catch (const jit_fail_exception& e)
+    {
+      function->eraseFromParent ();
+      throw;
+    }
+
+  return function;
+}
+
+void
+jit_convert_llvm::finish_phi (jit_phi *phi)
+{
+  llvm::PHINode *llvm_phi = phi->to_llvm ();
+  for (size_t i = 0; i < phi->argument_count (); ++i)
+    {
+      llvm::BasicBlock *pred = phi->incomming_llvm (i);
+      llvm_phi->addIncoming (phi->argument_llvm (i), pred);
+    }
+}
+
+void
+jit_convert_llvm::visit (jit_const_string& cs)
+{
+  cs.stash_llvm (builder.CreateGlobalStringPtr (cs.value ()));
+}
+
+void
+jit_convert_llvm::visit (jit_const_bool& cb)
+{
+  cb.stash_llvm (llvm::ConstantInt::get (cb.type_llvm (), cb.value ()));
+}
+
+void
+jit_convert_llvm::visit (jit_const_scalar& cs)
+{
+  cs.stash_llvm (llvm::ConstantFP::get (cs.type_llvm (), cs.value ()));
+}
+
+void
+jit_convert_llvm::visit (jit_const_complex& cc)
+{
+  llvm::Type *scalar_t = jit_typeinfo::get_scalar_llvm ();
+  llvm::Constant *values[2];
+  Complex value = cc.value ();
+  values[0] = llvm::ConstantFP::get (scalar_t, value.real ());
+  values[1] = llvm::ConstantFP::get (scalar_t, value.imag ());
+  cc.stash_llvm (llvm::ConstantVector::get (values));
+}
+
+void jit_convert_llvm::visit (jit_const_index& ci)
+{
+  ci.stash_llvm (llvm::ConstantInt::get (ci.type_llvm (), ci.value ()));
+}
+
+void
+jit_convert_llvm::visit (jit_const_range& cr)
+{
+  llvm::StructType *stype = llvm::cast<llvm::StructType>(cr.type_llvm ());
+  llvm::Type *scalar_t = jit_typeinfo::get_scalar_llvm ();
+  llvm::Type *idx = jit_typeinfo::get_index_llvm ();
+  const jit_range& rng = cr.value ();
+
+  llvm::Constant *constants[4];
+  constants[0] = llvm::ConstantFP::get (scalar_t, rng.base);
+  constants[1] = llvm::ConstantFP::get (scalar_t, rng.limit);
+  constants[2] = llvm::ConstantFP::get (scalar_t, rng.inc);
+  constants[3] = llvm::ConstantInt::get (idx, rng.nelem);
+
+  llvm::Value *as_llvm;
+  as_llvm = llvm::ConstantStruct::get (stype,
+                                       llvm::makeArrayRef (constants, 4));
+  cr.stash_llvm (as_llvm);
+}
+
+void
+jit_convert_llvm::visit (jit_block& b)
+{
+  llvm::BasicBlock *block = b.to_llvm ();
+  builder.SetInsertPoint (block);
+  for (jit_block::iterator iter = b.begin (); iter != b.end (); ++iter)
+    visit (*iter);
+}
+
+void
+jit_convert_llvm::visit (jit_branch& b)
+{
+  b.stash_llvm (builder.CreateBr (b.successor_llvm ()));
+}
+
+void
+jit_convert_llvm::visit (jit_cond_branch& cb)
+{
+  llvm::Value *cond = cb.cond_llvm ();
+  llvm::Value *br;
+  br = builder.CreateCondBr (cond, cb.successor_llvm (0),
+                             cb.successor_llvm (1));
+  cb.stash_llvm (br);
+}
+
+void
+jit_convert_llvm::visit (jit_call& call)
+{
+  const jit_function& ol = call.overload ();
+
+  std::vector<jit_value *> args (call.arguments ().size ());
+  for (size_t i = 0; i < args.size (); ++i)
+    args[i] = call.argument (i);
+
+  llvm::Value *ret = ol.call (builder, args);
+  call.stash_llvm (ret);
+}
+
+void
+jit_convert_llvm::visit (jit_extract_argument& extract)
+{
+  llvm::Value *arg = arguments[extract.name ()];
+  assert (arg);
+  arg = builder.CreateLoad (arg);
+
+  const jit_function& ol = extract.overload ();
+  extract.stash_llvm (ol.call (builder, arg));
+}
+
+void
+jit_convert_llvm::visit (jit_store_argument& store)
+{
+  const jit_function& ol = store.overload ();
+  llvm::Value *arg_value = ol.call (builder, store.result ());
+  llvm::Value *arg = arguments[store.name ()];
+  store.stash_llvm (builder.CreateStore (arg_value, arg));
+}
+
+void
+jit_convert_llvm::visit (jit_phi& phi)
+{
+  // we might not have converted all incoming branches, so we don't
+  // set incomming branches now
+  llvm::PHINode *node = llvm::PHINode::Create (phi.type_llvm (),
+                                               phi.argument_count ());
+  builder.Insert (node);
+  phi.stash_llvm (node);
+}
+
+void
+jit_convert_llvm::visit (jit_variable&)
+{
+  throw jit_fail_exception ("ERROR: SSA construction should remove all variables");
+}
+
+void
+jit_convert_llvm::visit (jit_error_check& check)
+{
+  llvm::Value *cond = jit_typeinfo::insert_error_check (builder);
+  llvm::Value *br = builder.CreateCondBr (cond, check.successor_llvm (0),
+                                          check.successor_llvm (1));
+  check.stash_llvm (br);
+}
+
+void
+jit_convert_llvm::visit (jit_assign& assign)
+{
+  jit_value *new_value = assign.src ();
+  assign.stash_llvm (new_value->to_llvm ());
+
+  if (assign.artificial ())
+    return;
+
+  if (isa<jit_assign_base> (new_value))
+    {
+      const jit_function& ol =  jit_typeinfo::get_grab (new_value->type ());
+      if (ol.valid ())
+        assign.stash_llvm (ol.call (builder, new_value));
+    }
+
+  jit_value *overwrite = assign.overwrite ();
+  if (isa<jit_assign_base> (overwrite))
+    {
+      const jit_function& ol = jit_typeinfo::get_release (overwrite->type ());
+      if (ol.valid ())
+        ol.call (builder, overwrite);
+    }
+}
+
+void
+jit_convert_llvm::visit (jit_argument&)
+{}
+
+void
+jit_convert_llvm::visit (jit_magic_end& me)
+{
+  const jit_function& ol = me.overload ();
+
+  jit_magic_end::context ctx = me.resolve_context ();
+  llvm::Value *ret = ol.call (builder, ctx.value, ctx.index, ctx.count);
+  me.stash_llvm (ret);
+}
+
+// -------------------- tree_jit --------------------
+
+tree_jit::tree_jit (void) : module (0), engine (0)
+{
+}
+
+tree_jit::~tree_jit (void)
+{}
+
+bool
+tree_jit::execute (tree_simple_for_command& cmd, const octave_value& bounds)
+{
+  const size_t MIN_TRIP_COUNT = 1000;
+
+  size_t tc = trip_count (bounds);
+  if (! tc || ! initialize ())
+    return false;
+
+  jit_info::vmap extra_vars;
+  extra_vars["#for_bounds0"] = &bounds;
+
+  jit_info *info = cmd.get_info ();
+  if (! info || ! info->match (extra_vars))
+    {
+      if (tc < MIN_TRIP_COUNT)
+        return false;
+
+      delete info;
+      info = new jit_info (*this, cmd, bounds);
+      cmd.stash_info (info);
+    }
+
+  return info->execute (extra_vars);
+}
+
+bool
+tree_jit::execute (tree_while_command& cmd)
+{
+  if (! initialize ())
+    return false;
+
+  jit_info *info = cmd.get_info ();
+  if (! info || ! info->match ())
+    {
+      delete info;
+      info = new jit_info (*this, cmd);
+      cmd.stash_info (info);
+    }
+
+  return info->execute ();
+}
+
+bool
+tree_jit::initialize (void)
+{
+  if (engine)
+    return true;
+
+  if (! module)
+    {
+      llvm::InitializeNativeTarget ();
+      module = new llvm::Module ("octave", context);
+    }
+
+  // sometimes this fails pre main
+  engine = llvm::ExecutionEngine::createJIT (module);
+
+  if (! engine)
+    return false;
+
+  module_pass_manager = new llvm::PassManager ();
+  module_pass_manager->add (llvm::createAlwaysInlinerPass ());
+
+  pass_manager = new llvm::FunctionPassManager (module);
+  pass_manager->add (new llvm::TargetData(*engine->getTargetData ()));
+  pass_manager->add (llvm::createCFGSimplificationPass ());
+  pass_manager->add (llvm::createBasicAliasAnalysisPass ());
+  pass_manager->add (llvm::createPromoteMemoryToRegisterPass ());
+  pass_manager->add (llvm::createInstructionCombiningPass ());
+  pass_manager->add (llvm::createReassociatePass ());
+  pass_manager->add (llvm::createGVNPass ());
+  pass_manager->add (llvm::createCFGSimplificationPass ());
+  pass_manager->doInitialization ();
+
+  jit_typeinfo::initialize (module, engine);
+
+  return true;
+}
+
+size_t
+tree_jit::trip_count (const octave_value& bounds) const
+{
+  if (bounds.is_range ())
+    {
+      Range rng = bounds.range_value ();
+      return rng.nelem ();
+    }
+
+  // unsupported type
+  return 0;
+}
+
+
+void
+tree_jit::optimize (llvm::Function *fn)
+{
+  module_pass_manager->run (*module);
+  pass_manager->run (*fn);
+
+#ifdef OCTAVE_JIT_DEBUG
+  std::string error;
+  llvm::raw_fd_ostream fout ("test.bc", error,
+                             llvm::raw_fd_ostream::F_Binary);
+  llvm::WriteBitcodeToFile (module, fout);
+#endif
+}
+
+// -------------------- jit_info --------------------
+jit_info::jit_info (tree_jit& tjit, tree& tee)
+  : engine (tjit.get_engine ()), function (0), llvm_function (0)
+{
+  try
+    {
+      jit_convert conv (tjit.get_module (), tee);
+      initialize (tjit, conv);
+    }
+  catch (const jit_fail_exception& e)
+    {
+#ifdef OCTAVE_JIT_DEBUG
+      if (e.known ())
+        std::cout << "jit fail: " << e.what () << std::endl;
+#endif
+    }
+}
+
+jit_info::jit_info (tree_jit& tjit, tree& tee, const octave_value& for_bounds)
+  : engine (tjit.get_engine ()), function (0), llvm_function (0)
+{
+  try
+    {
+      jit_convert conv (tjit.get_module (), tee,
+                        jit_typeinfo::type_of (for_bounds));
+      initialize (tjit, conv);
+    }
+  catch (const jit_fail_exception& e)
+    {
+#ifdef OCTAVE_JIT_DEBUG
+      if (e.known ())
+        std::cout << "jit fail: " << e.what () << std::endl;
+#endif
+    }
+}
+
+jit_info::~jit_info (void)
+{
+  if (llvm_function)
+    llvm_function->eraseFromParent ();
+}
+
+bool
+jit_info::execute (const vmap& extra_vars) const
+{
+  if (! function)
+    return false;
+
+  std::vector<octave_base_value *> real_arguments (arguments.size ());
+  for (size_t i = 0; i < arguments.size (); ++i)
+    {
+      if (arguments[i].second)
+        {
+          octave_value current = find (extra_vars, arguments[i].first);
+          octave_base_value *obv = current.internal_rep ();
+          obv->grab ();
+          real_arguments[i] = obv;
+        }
+    }
+
+  function (&real_arguments[0]);
+
+  for (size_t i = 0; i < arguments.size (); ++i)
+    {
+      const std::string& name = arguments[i].first;
+
+      // do not store for loop bounds temporary
+      if (name.size () && name[0] != '#')
+        symbol_table::varref (arguments[i].first) = real_arguments[i];
+    }
+
+  return true;
+}
+
+bool
+jit_info::match (const vmap& extra_vars) const
+{
+  if (! function)
+    return true;
+
+  for (size_t i = 0; i < bounds.size (); ++i)
+    {
+      const std::string& arg_name = bounds[i].second;
+      octave_value value = find (extra_vars, arg_name);
+      jit_type *type = jit_typeinfo::type_of (value);
+
+      // FIXME: Check for a parent relationship
+      if (type != bounds[i].first)
+        return false;
+    }
+
+  return true;
+}
+
+void
+jit_info::initialize (tree_jit& tjit, jit_convert& conv)
+{
+  llvm_function = conv.get_function ();
+  arguments = conv.get_arguments ();
+  bounds = conv.get_bounds ();
+
+  if (llvm_function)
+    {
+      tjit.optimize (llvm_function);
+
+#ifdef OCTAVE_JIT_DEBUG
+      std::cout << "-------------------- optimized llvm ir "
+                << "--------------------\n";
+      llvm::raw_os_ostream llvm_cout (std::cout);
+      llvm_function->print (llvm_cout);
+      llvm_cout.flush ();
+      std::cout << std::endl;
+#endif
+
+      void *void_fn = engine->getPointerToFunction (llvm_function);
+      function = reinterpret_cast<jited_function> (void_fn);
+    }
+}
+
+octave_value
+jit_info::find (const vmap& extra_vars, const std::string& vname) const
+{
+  vmap::const_iterator iter = extra_vars.find (vname);
+  return iter == extra_vars.end () ? symbol_table::varval (vname)
+    : *iter->second;
+}
+
+#endif
+
+
+/*
+Test some simple cases that compile.
+
+%!test
+%! inc = 1e-5;
+%! result = 0;
+%! for ii = 0:inc:1
+%!   result = result + inc * (1/3 * ii * ii);
+%! endfor
+%! assert (abs (result - 1/9) < 1e-5);
+
+%!test
+%! inc = 1e-5;
+%! result = 0;
+%! for ii = 0:inc:1
+%!   # the ^ operator's result is complex
+%!   result = result + inc * (1/3 * ii ^ 2);
+%! endfor
+%! assert (abs (result - 1/9) < 1e-5);
+
+%!test
+%! nr = 1001;
+%! mat = zeros (1, nr);
+%! for i = 1:nr
+%!   mat(i) = i;
+%! endfor
+%! assert (mat == 1:nr);
+
+%!test
+%! nr = 1001;
+%! mat = 1:nr;
+%! mat(end) = 0; # force mat to a matrix
+%! total = 0;
+%! for i = 1:nr
+%!   total = mat(i) + total;
+%! endfor
+%! assert (sum (mat) == total);
+
+%!test
+%! nr = 1001;
+%! mat = [3 1 5];
+%! try
+%!   for i = 1:nr
+%!     if i > 500
+%!       result = mat(100);
+%!     else
+%!       result = i;
+%!     endif
+%!   endfor
+%! catch
+%! end
+%! assert (result == 500);
+
+%!function result = gen_test (n)
+%!  result = double (rand (1, n) > .01);
+%!endfunction
+
+%!function z = vectorized (A, K)
+%!  temp = ones (1, K);
+%!  z = conv (A, temp);
+%!  z = z > K-1;
+%!  z = conv (z, temp);
+%!  z = z(K:end-K+1);
+%!  z = z >= 1;
+%!endfunction
+
+%!function z = loopy (A, K)
+%!  z = A;
+%!  n = numel (A);
+%!  counter = 0;
+%!  for ii=1:n
+%!    if z(ii)
+%!      counter = counter + 1;
+%!    else
+%!      if counter > 0 && counter < K
+%!        z(ii-counter:ii-1) = 0;
+%!      endif
+%!      counter = 0;
+%!    endif
+%!  endfor
+%!
+%!  if counter > 0 && counter < K
+%!    z(end-counter+1:end) = 0;
+%!  endif
+%!endfunction
+
+%!test
+%! test_set = gen_test (10000);
+%! assert (all (vectorized (test_set, 3) == loopy (test_set, 3)));
+
+%!test
+%! niter = 1001;
+%! i = 0;
+%! while (i < niter)
+%!   i = i + 1;
+%! endwhile
+%! assert (i == niter);
+
+%!test
+%! niter = 1001;
+%! result = 0;
+%! m = [5 10];
+%! for i=1:niter
+%!   result = result + m(end);
+%! endfor
+%! assert (result == m(end) * niter);
+
+%!test
+%! ndim = 100;
+%! result = 0;
+%! m = zeros (ndim);
+%! m(:) = 1:ndim^2;
+%! i = 1;
+%! while (i <= ndim)
+%!   for j = 1:ndim
+%!     result = result + m(i, j);
+%!    endfor
+%!   i = i + 1;
+%! endwhile
+%! assert (result == sum (sum (m)));
+
+%!test
+%! ndim = 100;
+%! m = zeros (ndim);
+%! i = 1;
+%! while (i <= ndim)
+%!   for j = 1:ndim
+%!     m(i, j) = (j - 1) * ndim + i;
+%!   endfor
+%!   i = i + 1;
+%! endwhile
+%! m2 = zeros (ndim);
+%! m2(:) = 1:(ndim^2);
+%! assert (all (m == m2));
+
+%!test
+%! ndim = 2;
+%! m = zeros (ndim, ndim, ndim, ndim);
+%! result = 0;
+%! i0 = 1;
+%! while (i0 <= ndim)
+%!   for i1 = 1:ndim
+%!     for i2 = 1:ndim
+%!       for i3 = 1:ndim
+%!         m(i0, i1, i2, i3) = 1;
+%!         m(i0, i1, i2, i3, 1, 1, 1, 1, 1, 1) = 1;
+%!         result = result + m(i0, i1, i2, i3);
+%!       endfor
+%!     endfor
+%!   endfor
+%!   i0 = i0 + 1;
+%! endwhile
+%! expected = ones (ndim, ndim, ndim, ndim);
+%! assert (all (m == expected));
+%! assert (result == sum (expected (:)));
+
+%!function test_divide ()
+%! state = warning ("query", "Octave:divide-by-zero").state;
+%! unwind_protect
+%!   warning ("error", "Octave:divide-by-zero");
+%!   for i=1:1e5
+%!     a = 1;
+%!     a / 0;
+%!   endfor
+%! unwind_protect_cleanup
+%!   warning (state, "Octave:divide-by-zero");
+%! end_unwind_protect
+%!endfunction
+
+%!error <division by zero> test_divide ()
+
+%!test
+%! while 1
+%!   a = 0;
+%!   result = a / 1;
+%!   break;
+%! endwhile
+%! assert (result, 0);
+
+%!test
+%! m = zeros (2, 1001);
+%! for i=1:1001
+%!   m(end, i) = i;
+%!   m(end - 1, end - i + 1) = i;
+%! endfor
+%! m2 = zeros (2, 1001);
+%! m2(1, :) = fliplr (1:1001);
+%! m2(2, :) = 1:1001;
+%! assert (m, m2);
+
+%!test
+%! m = [1 2 3];
+%! for i=1:1001
+%!   m = sin (m);
+%!   break;
+%! endfor
+%! assert (m == sin ([1  2 3]));
+
+%!test
+%! i = 0;
+%! while i < 10
+%!   i += 1;
+%! endwhile
+%! assert (i == 10);
+
+%!test
+%! i = 0;
+%! while i < 10
+%!   a = ++i;
+%! endwhile
+%! assert (i == 10);
+%! assert (a == 10);
+%!test
+%! i = 0;
+%! while i < 10
+%!   a = i++;
+%! endwhile
+%! assert (i == 10);
+%! assert (a == 9);
+
+%!test
+%! num = 2;
+%! a = zeros (1, num);
+%! i = 1;
+%! while i <= num
+%!   a(i) = norm (eye (i));
+%!   ++i;
+%! endwhile
+%! assert (a, ones (1, num));
+
+%!function test_compute_idom ()
+%! while (li <= length (l1) && si <= length (s1))
+%!   if (l1 (li) < s1 (si))
+%!     if (li == si)
+%!       break;
+%!     endif;
+%!     li++;
+%!   else
+%!     si++;
+%!   endif;
+%! endwhile
+
+%!error test_compute_idom ()
+
+*/
new file mode 100644
--- /dev/null
+++ b/src/interp-core/pt-jit.h
@@ -0,0 +1,391 @@
+/*
+
+Copyright (C) 2012 Max Brister <max@2bass.com>
+
+This file is part of Octave.
+
+Octave is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3 of the License, or (at your
+option) any later version.
+
+Octave is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with Octave; see the file COPYING.  If not, see
+<http://www.gnu.org/licenses/>.
+
+*/
+
+#if !defined (octave_tree_jit_h)
+#define octave_tree_jit_h 1
+
+#ifdef HAVE_LLVM
+
+#include "jit-ir.h"
+
+#include "pt-walk.h"
+
+// Convert from the parse tree (AST) to the low level Octave IR.
+class
+jit_convert : public tree_walker
+{
+public:
+  typedef std::pair<jit_type *, std::string> type_bound;
+  typedef std::vector<type_bound> type_bound_vector;
+
+  jit_convert (llvm::Module *module, tree &tee, jit_type *for_bounds = 0);
+
+  llvm::Function *get_function (void) const { return function; }
+
+  const std::vector<std::pair<std::string, bool> >& get_arguments(void) const
+  { return arguments; }
+
+  const type_bound_vector& get_bounds (void) const { return bounds; }
+
+  void visit_anon_fcn_handle (tree_anon_fcn_handle&);
+
+  void visit_argument_list (tree_argument_list&);
+
+  void visit_binary_expression (tree_binary_expression&);
+
+  void visit_break_command (tree_break_command&);
+
+  void visit_colon_expression (tree_colon_expression&);
+
+  void visit_continue_command (tree_continue_command&);
+
+  void visit_global_command (tree_global_command&);
+
+  void visit_persistent_command (tree_persistent_command&);
+
+  void visit_decl_elt (tree_decl_elt&);
+
+  void visit_decl_init_list (tree_decl_init_list&);
+
+  void visit_simple_for_command (tree_simple_for_command&);
+
+  void visit_complex_for_command (tree_complex_for_command&);
+
+  void visit_octave_user_script (octave_user_script&);
+
+  void visit_octave_user_function (octave_user_function&);
+
+  void visit_octave_user_function_header (octave_user_function&);
+
+  void visit_octave_user_function_trailer (octave_user_function&);
+
+  void visit_function_def (tree_function_def&);
+
+  void visit_identifier (tree_identifier&);
+
+  void visit_if_clause (tree_if_clause&);
+
+  void visit_if_command (tree_if_command&);
+
+  void visit_if_command_list (tree_if_command_list&);
+
+  void visit_index_expression (tree_index_expression&);
+
+  void visit_matrix (tree_matrix&);
+
+  void visit_cell (tree_cell&);
+
+  void visit_multi_assignment (tree_multi_assignment&);
+
+  void visit_no_op_command (tree_no_op_command&);
+
+  void visit_constant (tree_constant&);
+
+  void visit_fcn_handle (tree_fcn_handle&);
+
+  void visit_parameter_list (tree_parameter_list&);
+
+  void visit_postfix_expression (tree_postfix_expression&);
+
+  void visit_prefix_expression (tree_prefix_expression&);
+
+  void visit_return_command (tree_return_command&);
+
+  void visit_return_list (tree_return_list&);
+
+  void visit_simple_assignment (tree_simple_assignment&);
+
+  void visit_statement (tree_statement&);
+
+  void visit_statement_list (tree_statement_list&);
+
+  void visit_switch_case (tree_switch_case&);
+
+  void visit_switch_case_list (tree_switch_case_list&);
+
+  void visit_switch_command (tree_switch_command&);
+
+  void visit_try_catch_command (tree_try_catch_command&);
+
+  void visit_unwind_protect_command (tree_unwind_protect_command&);
+
+  void visit_while_command (tree_while_command&);
+
+  void visit_do_until_command (tree_do_until_command&);
+
+#define JIT_CREATE_CHECKED(N)                                           \
+  template <OCT_MAKE_DECL_LIST (typename, ARG, N)>                      \
+  jit_call *create_checked (OCT_MAKE_LIST (DECL_ARG, N))                \
+  {                                                                     \
+    jit_call *ret = factory.create<jit_call> (OCT_MAKE_ARG_LIST (arg, N)); \
+    return create_checked_impl (ret);                                   \
+  }
+
+  JIT_CREATE_CHECKED (1)
+  JIT_CREATE_CHECKED (2)
+  JIT_CREATE_CHECKED (3)
+  JIT_CREATE_CHECKED (4)
+
+#undef JIT_CREATE_CHECKED
+#undef DECL_ARG
+private:
+  std::vector<std::pair<std::string, bool> > arguments;
+  type_bound_vector bounds;
+
+  jit_factory factory;
+
+  // used instead of return values from visit_* functions
+  jit_value *result;
+
+  jit_block *entry_block;
+
+  jit_block *final_block;
+
+  jit_block *block;
+
+  llvm::Function *function;
+
+  jit_block_list blocks;
+
+  std::list<jit_instruction *> worklist;
+
+  std::vector<jit_magic_end::context> end_context;
+
+  size_t iterator_count;
+  size_t for_bounds_count;
+  size_t short_count;
+
+  typedef std::map<std::string, jit_variable *> vmap_t;
+  vmap_t vmap;
+
+  jit_call *create_checked_impl (jit_call *ret);
+
+  // get an existing vairable. If the variable does not exist, it will not be
+  // created
+  jit_variable *find_variable (const std::string& vname) const;
+
+  // get a variable, create it if it does not exist. The type will default to
+  // the variable's current type in the symbol table.
+  jit_variable *get_variable (const std::string& vname);
+
+  // create a variable of the given name and given type. Will also insert an
+  // extract statement
+  jit_variable *create_variable (const std::string& vname, jit_type *type);
+
+  // The name of the next for loop iterator. If inc is false, then the iterator
+  // counter will not be incremented.
+  std::string next_iterator (bool inc = true)
+  { return next_name ("#iter", iterator_count, inc); }
+
+  std::string next_for_bounds (bool inc = true)
+  { return next_name ("#for_bounds", for_bounds_count, inc); }
+
+  std::string next_shortcircut_result (bool inc = true)
+  { return next_name ("#shortcircut_result", short_count, inc); }
+
+  std::string next_name (const char *prefix, size_t& count, bool inc);
+
+  jit_instruction *resolve (const jit_operation& fres,
+                            tree_index_expression& exp,
+                            jit_value *extra_arg = 0);
+
+  jit_value *do_assign (tree_expression *exp, jit_value *rhs,
+                        bool artificial = false);
+
+  jit_value *do_assign (const std::string& lhs, jit_value *rhs, bool print,
+                        bool artificial = false);
+
+  jit_value *visit (tree *tee) { return visit (*tee); }
+
+  jit_value *visit (tree& tee);
+
+  void push_worklist (jit_instruction *instr)
+  {
+    if (! instr->in_worklist ())
+      {
+        instr->stash_in_worklist (true);
+        worklist.push_back (instr);
+      }
+  }
+
+  void append_users (jit_value *v)
+  {
+    for (jit_use *use = v->first_use (); use; use = use->next ())
+      push_worklist (use->user ());
+  }
+
+  void append_users_term (jit_terminator *term);
+
+  void construct_ssa (void);
+
+  void do_construct_ssa (jit_block& block, size_t avisit_count);
+
+  void remove_dead ();
+
+  void place_releases (void);
+
+  void release_temp (jit_block& ablock, std::set<jit_value *>& temp);
+
+  void release_dead_phi (jit_block& ablock);
+
+  void simplify_phi (void);
+
+  void simplify_phi (jit_phi& phi);
+
+  void print_blocks (const std::string& header)
+  {
+    std::cout << "-------------------- " << header << " --------------------\n";
+    for (std::list<jit_block *>::iterator iter = blocks.begin ();
+         iter != blocks.end (); ++iter)
+      {
+        assert (*iter);
+        (*iter)->print (std::cout, 0);
+      }
+    std::cout << std::endl;
+  }
+
+  void print_dom (void)
+  {
+    std::cout << "-------------------- dom info --------------------\n";
+    for (std::list<jit_block *>::iterator iter = blocks.begin ();
+         iter != blocks.end (); ++iter)
+      {
+        assert (*iter);
+        (*iter)->print_dom (std::cout);
+      }
+    std::cout << std::endl;
+  }
+
+  bool breaking; // true if we are breaking OR continuing
+
+  typedef std::list<jit_block *> block_list;
+  block_list breaks;
+  block_list continues;
+
+  void finish_breaks (jit_block *dest, const block_list& lst);
+};
+
+// Convert from the low level Octave IR to LLVM
+class
+jit_convert_llvm : public jit_ir_walker
+{
+public:
+  jit_convert_llvm (jit_convert& jc) : jthis (jc) {}
+
+  llvm::Function *convert (llvm::Module *module,
+                           const std::vector<std::pair<std::string, bool> >&
+                           args,
+                           const jit_block_list& blocks,
+                           const std::list<jit_value *>& constants);
+
+#define JIT_METH(clname)                        \
+  virtual void visit (jit_ ## clname&);
+
+  JIT_VISIT_IR_CLASSES;
+
+#undef JIT_METH
+private:
+  // name -> llvm argument
+  std::map<std::string, llvm::Value *> arguments;
+
+  void finish_phi (jit_phi *phi);
+
+  void visit (jit_value *jvalue)
+  {
+    return visit (*jvalue);
+  }
+
+  void visit (jit_value &jvalue)
+  {
+    jvalue.accept (*this);
+  }
+private:
+  jit_convert &jthis;
+  llvm::Function *function;
+  llvm::BasicBlock *prelude;
+};
+
+class jit_info;
+
+class
+tree_jit
+{
+public:
+  tree_jit (void);
+
+  ~tree_jit (void);
+
+  bool execute (tree_simple_for_command& cmd, const octave_value& bounds);
+
+  bool execute (tree_while_command& cmd);
+
+  llvm::ExecutionEngine *get_engine (void) const { return engine; }
+
+  llvm::Module *get_module (void) const { return module; }
+
+  void optimize (llvm::Function *fn);
+ private:
+  bool initialize (void);
+
+  size_t trip_count (const octave_value& bounds) const;
+
+  llvm::Module *module;
+  llvm::PassManager *module_pass_manager;
+  llvm::FunctionPassManager *pass_manager;
+  llvm::ExecutionEngine *engine;
+};
+
+class
+jit_info
+{
+public:
+  // we use a pointer here so we don't have to include ov.h
+  typedef std::map<std::string, const octave_value *> vmap;
+
+  jit_info (tree_jit& tjit, tree& tee);
+
+  jit_info (tree_jit& tjit, tree& tee, const octave_value& for_bounds);
+
+  ~jit_info (void);
+
+  bool execute (const vmap& extra_vars = vmap ()) const;
+
+  bool match (const vmap& extra_vars = vmap ()) const;
+private:
+  typedef jit_convert::type_bound type_bound;
+  typedef jit_convert::type_bound_vector type_bound_vector;
+  typedef void (*jited_function)(octave_base_value**);
+
+  void initialize (tree_jit& tjit, jit_convert& conv);
+
+  octave_value find (const vmap& extra_vars, const std::string& vname) const;
+
+  llvm::ExecutionEngine *engine;
+  jited_function function;
+  llvm::Function *llvm_function;
+
+  std::vector<std::pair<std::string, bool> > arguments;
+  type_bound_vector bounds;
+};
+
+#endif
+#endif
rename from src/siglist.c
rename to src/interp-core/siglist.c
rename from src/siglist.h
rename to src/interp-core/siglist.h
rename from src/sparse-xdiv.cc
rename to src/interp-core/sparse-xdiv.cc
rename from src/sparse-xdiv.h
rename to src/interp-core/sparse-xdiv.h
rename from src/sparse-xpow.cc
rename to src/interp-core/sparse-xpow.cc
rename from src/sparse-xpow.h
rename to src/interp-core/sparse-xpow.h
rename from src/txt-eng-ft.cc
rename to src/interp-core/txt-eng-ft.cc
rename from src/txt-eng-ft.h
rename to src/interp-core/txt-eng-ft.h
rename from src/txt-eng.h
rename to src/interp-core/txt-eng.h
rename from src/unwind-prot.cc
rename to src/interp-core/unwind-prot.cc
rename from src/unwind-prot.h
rename to src/interp-core/unwind-prot.h
rename from src/xdiv.cc
rename to src/interp-core/xdiv.cc
rename from src/xdiv.h
rename to src/interp-core/xdiv.h
rename from src/xgl2ps.c
rename to src/interp-core/xgl2ps.c
rename from src/xnorm.cc
rename to src/interp-core/xnorm.cc
rename from src/xnorm.h
rename to src/interp-core/xnorm.h
rename from src/xpow.cc
rename to src/interp-core/xpow.cc
rename from src/xpow.h
rename to src/interp-core/xpow.h
rename from src/zfstream.cc
rename to src/interp-core/zfstream.cc
--- a/src/zfstream.cc
+++ b/src/interp-core/zfstream.cc
@@ -403,7 +403,7 @@
     if (buffer_size > 0)
     {
       // Allocate internal buffer
-      buffer = new char_type[buffer_size];
+      buffer = new char_type [buffer_size];
       // Get area starts empty and will be expanded by underflow as need arises
       this->setg (buffer, buffer, buffer);
       // Setup entire internal buffer as put area.
@@ -416,7 +416,7 @@
     {
       // Even in "unbuffered" case, (small?) get buffer is still required
       buffer_size = SMALLBUFSIZE;
-      buffer = new char_type[buffer_size];
+      buffer = new char_type [buffer_size];
       this->setg (buffer, buffer, buffer);
       // "Unbuffered" means no put buffer
       this->setp (0, 0);
rename from src/zfstream.h
rename to src/interp-core/zfstream.h
rename from src/data.cc
rename to src/interpfcn/data.cc
--- a/src/data.cc
+++ b/src/interpfcn/data.cc
@@ -3,6 +3,7 @@
 Copyright (C) 1994-2012 John W. Eaton
 Copyright (C) 2009 Jaroslav Hajek
 Copyright (C) 2009-2010 VZLU Prague
+Copyright (C) 2012 Carlo de Falco
 
 This file is part of Octave.
 
@@ -37,6 +38,7 @@
 #include <ctime>
 
 #include <string>
+#include <base64.h>
 
 #include "lo-ieee.h"
 #include "lo-math.h"
@@ -214,6 +216,7 @@
 Compute atan (@var{y} / @var{x}) for corresponding elements of @var{y}\n\
 and @var{x}.  Signal an error if @var{y} and @var{x} do not match in size\n\
 and orientation.\n\
+@seealso{tan, tand, tanh, atanh}\n\
 @end deftypefn")
 {
   octave_value retval;
@@ -2370,6 +2373,7 @@
 Return the \"length\" of the object @var{a}.  For matrix objects, the\n\
 length is the number of rows or columns, whichever is greater (this\n\
 odd definition is used for compatibility with @sc{matlab}).\n\
+@seealso{size}\n\
 @end deftypefn")
 {
   octave_value retval;
@@ -2395,6 +2399,7 @@
     @result{} 3\n\
 @end group\n\
 @end example\n\
+@seealso{size}\n\
 @end deftypefn")
 {
   octave_value retval;
@@ -2488,7 +2493,7 @@
 \n\
 @noindent\n\
 returns the number of columns in the given matrix.\n\
-@seealso{numel}\n\
+@seealso{numel, ndims, length, rows, columns}\n\
 @end deftypefn")
 {
   octave_value_list retval;
@@ -2551,7 +2556,7 @@
 Return true if the dimensions of all arguments agree.\n\
 Trailing singleton dimensions are ignored.\n\
 Called with a single or no argument, size_equal returns true.\n\
-@seealso{size, numel}\n\
+@seealso{size, numel, ndims}\n\
 @end deftypefn")
 {
   octave_value retval;
@@ -2583,7 +2588,7 @@
    "-*- texinfo -*-\n\
 @deftypefn {Built-in Function} {@var{scalar} =} nnz (@var{a})\n\
 Return the number of non zero elements in @var{a}.\n\
-@seealso{sparse}\n\
+@seealso{sparse, nzmax}\n\
 @end deftypefn")
 {
   octave_value retval;
@@ -2604,7 +2609,7 @@
 for sparse objects.  There are some cases of user created sparse objects\n\
 where the value returned by @dfn{nzmax} will not be the same as @dfn{nnz},\n\
 but in general they will give the same result.\n\
-@seealso{sparse, spalloc}\n\
+@seealso{nnz, spalloc, sparse}\n\
 @end deftypefn")
 {
   octave_value retval;
@@ -2882,7 +2887,7 @@
 \n\
 @noindent\n\
 but it uses less memory and avoids calling @code{conj} if @var{x} is real.\n\
-@seealso{sum}\n\
+@seealso{sum, prod}\n\
 @end deftypefn")
 {
   DATA_REDUCTION (sumsq);
@@ -2963,7 +2968,7 @@
   "-*- texinfo -*-\n\
 @deftypefn {Built-in Function} {} iscomplex (@var{x})\n\
 Return true if @var{x} is a complex-valued numeric object.\n\
-@seealso{isreal, isnumeric}\n\
+@seealso{isreal, isnumeric, islogical, ischar, isfloat, isa}\n\
 @end deftypefn")
 {
   octave_value retval;
@@ -3013,7 +3018,7 @@
   @result{} [ 1 + 3i   2 + 4i ]\n\
 @end group\n\
 @end example\n\
-@seealso{real, imag, iscomplex}\n\
+@seealso{real, imag, iscomplex, abs, arg}\n\
 @end deftypefn")
 {
   octave_value retval;
@@ -3292,7 +3297,7 @@
 Return true if @var{x} is a non-complex matrix or scalar.\n\
 For compatibility with @sc{matlab}, this includes logical and character\n\
 matrices.\n\
-@seealso{iscomplex, isnumeric}\n\
+@seealso{iscomplex, isnumeric, isa}\n\
 @end deftypefn")
 {
   octave_value retval;
@@ -3310,7 +3315,7 @@
 @deftypefn {Built-in Function} {} isempty (@var{a})\n\
 Return true if @var{a} is an empty matrix (any one of its dimensions is\n\
 zero).  Otherwise, return false.\n\
-@seealso{isnull}\n\
+@seealso{isnull, isa}\n\
 @end deftypefn")
 {
   octave_value retval = false;
@@ -3329,7 +3334,7 @@
 Return true if @var{x} is a numeric object, i.e., an integer, real, or\n\
 complex array.  Logical and character arrays are not considered to be\n\
 numeric.\n\
-@seealso{isinteger, isfloat, isreal, iscomplex, islogical, ischar, iscell, isstruct}\n\
+@seealso{isinteger, isfloat, isreal, iscomplex, islogical, ischar, iscell, isstruct, isa}\n\
 @end deftypefn")
 {
   octave_value retval;
@@ -3365,7 +3370,7 @@
 Scalars (1x1 matrices) and vectors (@nospell{1xN} or @nospell{Nx1} matrices)\n\
 are subsets of the more general N-dimensional matrix and @code{ismatrix}\n\
 will return true for these objects as well.\n\
-@seealso{isscalar, isvector, iscell, isstruct, issparse}\n\
+@seealso{isscalar, isvector, iscell, isstruct, issparse, isa}\n\
 @end deftypefn")
 {
   octave_value retval = false;
@@ -3947,7 +3952,7 @@
 arguments specify additional matrix dimensions.\n\
 The optional argument @var{class} specifies the return type and may be\n\
 either \"double\" or \"single\".\n\
-@seealso{isinf}\n\
+@seealso{isinf, NaN}\n\
 @end deftypefn")
 {
   return fill_matrix (args, lo_ieee_inf_value (),
@@ -4006,7 +4011,7 @@
 arguments specify additional matrix dimensions.\n\
 The optional argument @var{class} specifies the return type and may be\n\
 either \"double\" or \"single\".\n\
-@seealso{isnan}\n\
+@seealso{isnan, Inf}\n\
 @end deftypefn")
 {
   return fill_matrix (args, lo_ieee_nan_value (),
@@ -4055,6 +4060,7 @@
 arguments specify additional matrix dimensions.\n\
 The optional argument @var{class} specifies the return type and may be\n\
 either \"double\" or \"single\".\n\
+@seealso{log, exp, pi, I}\n\
 @end deftypefn")
 {
 #if defined (M_E)
@@ -4095,6 +4101,7 @@
 arguments specify additional matrix dimensions.\n\
 The optional argument @var{class} specifies the return type and may be\n\
 either \"double\" or \"single\".\n\
+@seealso{realmax, realmin, intmax, bitmax}\n\
 @end deftypefn")
 {
   int nargin = args.length ();
@@ -4210,6 +4217,7 @@
 arguments specify additional matrix dimensions.\n\
 The optional argument @var{class} specifies the return type and may be\n\
 either \"double\" or \"single\".\n\
+@seealso{e, I}\n\
 @end deftypefn")
 {
 #if defined (M_PI)
@@ -4248,7 +4256,7 @@
 arguments specify additional matrix dimensions.\n\
 The optional argument @var{class} specifies the return type and may be\n\
 either \"double\" or \"single\".\n\
-@seealso{realmin, intmax, bitmax}\n\
+@seealso{realmin, intmax, bitmax, eps}\n\
 @end deftypefn")
 {
   return fill_matrix (args, DBL_MAX, FLT_MAX, "realmax");
@@ -4281,7 +4289,7 @@
 arguments specify additional matrix dimensions.\n\
 The optional argument @var{class} specifies the return type and may be\n\
 either \"double\" or \"single\".\n\
-@seealso{realmax, intmin}\n\
+@seealso{realmax, intmin, eps}\n\
 @end deftypefn")
 {
   return fill_matrix (args, DBL_MIN, FLT_MIN, "realmin");
@@ -4307,7 +4315,8 @@
 @ifnottex\n\
 @code{sqrt (-1)}.\n\
 @end ifnottex\n\
- I, and its equivalents i, J, and j, are functions so any of the names may\n\
+\n\
+I, and its equivalents i, j, and J, are functions so any of the names may\n\
 be reused for other purposes (such as i for a counter variable).\n\
 \n\
 When called with no arguments, return a scalar with the value @math{i}.  When\n\
@@ -4317,6 +4326,7 @@
 arguments specify additional matrix dimensions.\n\
 The optional argument @var{class} specifies the return type and may be\n\
 either \"double\" or \"single\".\n\
+@seealso{e, pi, log, exp}\n\
 @end deftypefn")
 {
   return fill_matrix (args, Complex (0.0, 1.0), "I");
@@ -4549,7 +4559,7 @@
 Calling @code{eye} with no arguments is equivalent to calling it\n\
 with an argument of 1.  Any negative dimensions are treated as zero. \n\
 These odd definitions are for compatibility with @sc{matlab}.\n\
-@seealso{speye}\n\
+@seealso{speye, ones, zeros}\n\
 @end deftypefn")
 {
   octave_value retval;
@@ -4679,6 +4689,7 @@
 \n\
 For compatibility with @sc{matlab}, return the second argument (@var{limit})\n\
 if fewer than two values are requested.\n\
+@seealso{logspace}\n\
 @end deftypefn")
 {
   octave_value retval;
@@ -4786,7 +4797,7 @@
 An object can be resized to more dimensions than it has;\n\
 in such case the missing dimensions are assumed to be 1.\n\
 Resizing an object to fewer dimensions is not possible.\n\
-@seealso{reshape, postpad}\n\
+@seealso{reshape, postpad, prepad, cat}\n\
 @end deftypefn")
 {
   octave_value retval;
@@ -4861,7 +4872,7 @@
 A single dimension of the return matrix may be left unspecified and Octave\n\
 will determine its size automatically.  An empty matrix ([]) is used to flag\n\
 the unspecified dimension.\n\
-@seealso{resize}\n\
+@seealso{resize, vec, postpad, cat, squeeze}\n\
 @end deftypefn")
 {
   octave_value retval;
@@ -4979,7 +4990,7 @@
 @code{@var{x}(:)}.  If @var{dim} is supplied, the dimensions of @var{v}\n\
 are set to @var{dim} with all elements along the last dimension.\n\
 This is equivalent to @code{shiftdim (@var{x}(:), 1-@var{dim})}.\n\
-@seealso{vech}\n\
+@seealso{vech, resize, cat}\n\
 @end deftypefn")
 {
   octave_value retval;
@@ -5042,6 +5053,7 @@
 Remove singleton dimensions from @var{x} and return the result.\n\
 Note that for compatibility with @sc{matlab}, all objects have\n\
 a minimum of two dimensions and row vectors are left unchanged.\n\
+@seealso{reshape}\n\
 @end deftypefn")
 {
   octave_value retval;
@@ -5056,7 +5068,7 @@
 
 DEFUN (full, args, ,
     "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {@var{FM} =} full (@var{SM})\n\
+@deftypefn {Built-in Function} {@var{FM} =} full (@var{SM})\n\
 Return a full storage matrix from a sparse, diagonal, permutation matrix\n\
 or a range.\n\
 @seealso{sparse}\n\
@@ -5281,6 +5293,7 @@
   "-*- texinfo -*-\n\
 @deftypefn {Built-in Function} {} uplus (@var{x})\n\
 This function and @w{@xcode{+ x}} are equivalent.\n\
+@seealso{uminus, plus, minus}\n\
 @end deftypefn")
 {
   return unary_op_defun_body (octave_value::op_uplus, args);
@@ -5290,6 +5303,7 @@
   "-*- texinfo -*-\n\
 @deftypefn {Built-in Function} {} uminus (@var{x})\n\
 This function and @w{@xcode{- x}} are equivalent.\n\
+@seealso{uplus, minus}\n\
 @end deftypefn")
 {
   return unary_op_defun_body (octave_value::op_uminus, args);
@@ -5413,7 +5427,7 @@
 @end example\n\
 \n\
 At least one argument is required.\n\
-@seealso{minus}\n\
+@seealso{minus, uplus}\n\
 @end deftypefn")
 {
   return binary_assoc_op_defun_body (octave_value::op_add,
@@ -5424,7 +5438,7 @@
   "-*- texinfo -*-\n\
 @deftypefn {Built-in Function} {} minus (@var{x}, @var{y})\n\
 This function and @w{@xcode{x - y}} are equivalent.\n\
-@seealso{plus}\n\
+@seealso{plus, uminus}\n\
 @end deftypefn")
 {
   return binary_op_defun_body (octave_value::op_sub, args);
@@ -5444,7 +5458,7 @@
 @end example\n\
 \n\
 At least one argument is required.\n\
-@seealso{times}\n\
+@seealso{times, plus, minus, rdivide, mrdivide, mldivide, mpower}\n\
 @end deftypefn")
 {
   return binary_assoc_op_defun_body (octave_value::op_mul,
@@ -5456,7 +5470,7 @@
 @deftypefn {Built-in Function} {} mrdivide (@var{x}, @var{y})\n\
 Return the matrix right division of @var{x} and @var{y}.\n\
 This function and @w{@xcode{x / y}} are equivalent.\n\
-@seealso{mldivide, rdivide}\n\
+@seealso{mldivide, rdivide, plus, minus}\n\
 @end deftypefn")
 {
   return binary_op_defun_body (octave_value::op_div, args);
@@ -5467,7 +5481,7 @@
 @deftypefn {Built-in Function} {} mpower (@var{x}, @var{y})\n\
 Return the matrix power operation of @var{x} raised to the @var{y} power.\n\
 This function and @w{@xcode{x ^ y}} are equivalent.\n\
-@seealso{power}\n\
+@seealso{power, mtimes, plus, minus}\n\
 @end deftypefn")
 {
   return binary_op_defun_body (octave_value::op_pow, args);
@@ -5478,7 +5492,7 @@
 @deftypefn {Built-in Function} {} mldivide (@var{x}, @var{y})\n\
 Return the matrix left division of @var{x} and @var{y}.\n\
 This function and @w{@xcode{x @xbackslashchar{} y}} are equivalent.\n\
-@seealso{mrdivide, ldivide}\n\
+@seealso{mrdivide, ldivide, rdivide}\n\
 @end deftypefn")
 {
   return binary_op_defun_body (octave_value::op_ldiv, args);
@@ -5488,6 +5502,7 @@
   "-*- texinfo -*-\n\
 @deftypefn {Built-in Function} {} lt (@var{x}, @var{y})\n\
 This function is equivalent to @w{@code{x < y}}.\n\
+@seealso{le, eq, ge, gt, ne}\n\
 @end deftypefn")
 {
   return binary_op_defun_body (octave_value::op_lt, args);
@@ -5497,6 +5512,7 @@
   "-*- texinfo -*-\n\
 @deftypefn {Built-in Function} {} le (@var{x}, @var{y})\n\
 This function is equivalent to @w{@code{x <= y}}.\n\
+@seealso{eq, ge, gt, ne, lt}\n\
 @end deftypefn")
 {
   return binary_op_defun_body (octave_value::op_le, args);
@@ -5507,7 +5523,7 @@
 @deftypefn {Built-in Function} {} eq (@var{x}, @var{y})\n\
 Return true if the two inputs are equal.\n\
 This function is equivalent to @w{@code{x == y}}.\n\
-@seealso{ne, isequal}\n\
+@seealso{ne, isequal, le, ge, gt, ne, lt}\n\
 @end deftypefn")
 {
   return binary_op_defun_body (octave_value::op_eq, args);
@@ -5517,6 +5533,7 @@
   "-*- texinfo -*-\n\
 @deftypefn {Built-in Function} {} ge (@var{x}, @var{y})\n\
 This function is equivalent to @w{@code{x >= y}}.\n\
+@seealso{le, eq, gt, ne, lt}\n\
 @end deftypefn")
 {
   return binary_op_defun_body (octave_value::op_ge, args);
@@ -5526,6 +5543,7 @@
   "-*- texinfo -*-\n\
 @deftypefn {Built-in Function} {} gt (@var{x}, @var{y})\n\
 This function is equivalent to @w{@code{x > y}}.\n\
+@seealso{le, eq, ge, ne, lt}\n\
 @end deftypefn")
 {
   return binary_op_defun_body (octave_value::op_gt, args);
@@ -5536,7 +5554,7 @@
 @deftypefn {Built-in Function} {} ne (@var{x}, @var{y})\n\
 Return true if the two inputs are not equal.\n\
 This function is equivalent to @w{@code{x != y}}.\n\
-@seealso{eq, isequal}\n\
+@seealso{eq, isequal, le, ge, lt}\n\
 @end deftypefn")
 {
   return binary_op_defun_body (octave_value::op_ne, args);
@@ -5556,7 +5574,7 @@
 @end example\n\
 \n\
 At least one argument is required.\n\
-@seealso{mtimes}\n\
+@seealso{mtimes, rdivide}\n\
 @end deftypefn")
 {
   return binary_assoc_op_defun_body (octave_value::op_el_mul,
@@ -5568,7 +5586,7 @@
 @deftypefn {Built-in Function} {} rdivide (@var{x}, @var{y})\n\
 Return the element-by-element right division of @var{x} and @var{y}.\n\
 This function and @w{@xcode{x ./ y}} are equivalent.\n\
-@seealso{ldivide, mrdivide}\n\
+@seealso{ldivide, mrdivide, times, plus}\n\
 @end deftypefn")
 {
   return binary_op_defun_body (octave_value::op_el_div, args);
@@ -5595,7 +5613,7 @@
 @deftypefn {Built-in Function} {} ldivide (@var{x}, @var{y})\n\
 Return the element-by-element left division of @var{x} and @var{y}.\n\
 This function and @w{@xcode{x .@xbackslashchar{} y}} are equivalent.\n\
-@seealso{rdivide, mldivide}\n\
+@seealso{rdivide, mldivide, times, plus}\n\
 @end deftypefn")
 {
   return binary_op_defun_body (octave_value::op_el_ldiv, args);
@@ -5686,6 +5704,7 @@
 @code{toc} functions report the actual wall clock time that elapsed\n\
 between the calls.  This may include time spent processing other jobs or\n\
 doing nothing at all.\n\
+@seealso{toc, cputime}\n\
 @end deftypefn")
 {
   octave_value retval;
@@ -5718,7 +5737,7 @@
 @deftypefn  {Built-in Function} {} toc ()\n\
 @deftypefnx {Built-in Function} {} toc (@var{id})\n\
 @deftypefnx {Built-in Function} {@var{val} =} toc (@dots{})\n\
-See tic.\n\
+@seealso{tic, cputime}\n\
 @end deftypefn")
 {
   octave_value retval;
@@ -5790,6 +5809,7 @@
 Note that because Octave used some CPU time to start, it is reasonable\n\
 to check to see if @code{cputime} works by checking to see if the total\n\
 CPU time used is nonzero.\n\
+@seealso{tic, toc}\n\
 @end deftypefn")
 {
   octave_value_list retval;
@@ -5847,10 +5867,10 @@
 
 DEFUN (sort, args, nargout,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {[@var{s}, @var{i}] =} sort (@var{x})\n\
-@deftypefnx {Loadable Function} {[@var{s}, @var{i}] =} sort (@var{x}, @var{dim})\n\
-@deftypefnx {Loadable Function} {[@var{s}, @var{i}] =} sort (@var{x}, @var{mode})\n\
-@deftypefnx {Loadable Function} {[@var{s}, @var{i}] =} sort (@var{x}, @var{dim}, @var{mode})\n\
+@deftypefn  {Built-in Function} {[@var{s}, @var{i}] =} sort (@var{x})\n\
+@deftypefnx {Built-in Function} {[@var{s}, @var{i}] =} sort (@var{x}, @var{dim})\n\
+@deftypefnx {Built-in Function} {[@var{s}, @var{i}] =} sort (@var{x}, @var{mode})\n\
+@deftypefnx {Built-in Function} {[@var{s}, @var{i}] =} sort (@var{x}, @var{dim}, @var{mode})\n\
 Return a copy of @var{x} with the elements arranged in increasing\n\
 order.  For matrices, @code{sort} orders the elements within columns\n\
 \n\
@@ -5910,6 +5930,7 @@
 \n\
 The algorithm used in @code{sort} is optimized for the sorting of partially\n\
 ordered lists.\n\
+@seealso{sortrows, issorted}\n\
 @end deftypefn")
 {
   octave_value_list retval;
@@ -6799,7 +6820,7 @@
 \n\
 @var{mask} can also be arbitrary numeric type, in which case\n\
 it is first converted to logical.\n\
-@seealso{logical}\n\
+@seealso{logical, diff}\n\
 @end deftypefn")
 {
   int nargin = args.length ();
@@ -7027,6 +7048,7 @@
 @var{k}-th order differences are calculated along this dimension.\n\
 In the case where @var{k} exceeds @code{size (@var{x}, @var{dim})}\n\
 an empty matrix is returned.\n\
+@seealso{sort, merge}\n\
 @end deftypefn")
 {
   int nargin = args.length ();
@@ -7137,7 +7159,7 @@
 endfor\n\
 @end group\n\
 @end example\n\
-@seealso{repmat}\n\
+@seealso{repmat, cat}\n\
 @end deftypefn")
 {
   octave_value retval;
@@ -7207,3 +7229,198 @@
 
   return retval;
 }
+
+bool do_base64_encode (const char * inc, const size_t inlen, char *& out)
+{  
+  bool ret = false;
+  size_t outlen = base64_encode_alloc (inc, inlen, &out);
+  
+  if (! out && outlen == 0 && inlen != 0)
+    error ("base64_encode: input array too large");
+  else if (! out)
+    error ("base64_encode: memory allocation error");
+  else
+    ret = true;
+
+  return ret;
+}
+
+DEFUN (base64_encode, args, , "-*- texinfo -*-\n\
+@deftypefn {Built-in Function} {@var{s} =} base64_encode (@var{x})\n\
+Encode a double matrix or array @var{x} into the base64 format string\n\
+@var{s}.\n\
+\n\
+@seealso{base64_decode}\n\
+@end deftypefn")
+{
+  octave_value_list retval;
+  int nargin = args.length ();
+
+  if (nargin != 1)
+    print_usage ();
+  else 
+    {
+      if (! args(0).is_numeric_type ()) 
+        error ("base64_encode: encoding is supported only for numeric arrays");
+      else if (args(0).is_complex_type () 
+          || args(0).is_sparse_type ())
+        error ("base64_encode: encoding complex or sparse data is not supported");
+      else if (args(0).is_integer_type ())
+        {
+#define MAKE_INT_BRANCH(X)                                              \
+          if (args(0).is_ ## X ## _type ())                             \
+            {                                                           \
+              const X##NDArray in = args(0).  X## _array_value ();      \
+              size_t inlen =                                            \
+                in.numel () * sizeof (X## _t) / sizeof (char);          \
+              const char* inc =                                         \
+                reinterpret_cast<const char*> (in.data ());             \
+              char* out;                                                \
+              if (! error_state                                         \
+                  && do_base64_encode (inc, inlen, out))                \
+                retval(0) = octave_value (out);                         \
+            }
+                                          
+          MAKE_INT_BRANCH(int8)
+          else MAKE_INT_BRANCH(int16)
+          else MAKE_INT_BRANCH(int32)
+          else MAKE_INT_BRANCH(int64)
+          else MAKE_INT_BRANCH(uint8)
+          else MAKE_INT_BRANCH(uint16)
+          else MAKE_INT_BRANCH(uint32)
+          else MAKE_INT_BRANCH(uint64)
+#undef MAKE_INT_BRANCH
+
+          else
+            panic_impossible ();
+        }
+      else if (args(0).is_single_type ())
+        {
+          const Array<float> in = args(0).float_array_value ();
+          size_t inlen;
+          inlen = in.numel () * sizeof (float) / sizeof (char); 
+          const char*  inc;
+          inc = reinterpret_cast<const char*> (in.data ());  
+          char* out;
+          if (! error_state 
+              && do_base64_encode (inc, inlen, out))
+            retval(0) = octave_value (out);
+        }                 
+      else
+        {
+          const Array<double> in = args(0).array_value ();
+          size_t inlen;
+          inlen = in.numel () * sizeof (double) / sizeof (char); 
+          const char*  inc;
+          inc = reinterpret_cast<const char*> (in.data ());   
+          char* out;
+          if (! error_state 
+              && do_base64_encode (inc, inlen, out))
+            retval(0) = octave_value (out);
+        }
+    }  
+  return retval;
+}
+
+/*
+%!assert (base64_encode (single (pi)), "2w9JQA==")
+%!assert (base64_encode (uint8 ([0 0 0])), "AAAA")
+%!assert (base64_encode (uint16 ([0 0 0])), "AAAAAAAA")
+%!assert (base64_encode (uint32 ([0 0 0])), "AAAAAAAAAAAAAAAA")
+%!assert (base64_encode (uint64 ([0 0 0])), "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")
+%!assert (base64_encode (uint8 ([255 255 255])), "////")
+
+%!error base64_encode ()
+%!error base64_encode (1,2)
+%!error base64_encode ("A string")
+%!error base64_encode ({"A cell array"})
+%!error base64_encode (struct ())
+*/
+
+DEFUN (base64_decode, args, , "-*- texinfo -*-\n\
+@deftypefn  {Built-in Function} {@var{x} =} base64_decode (@var{s})\n\
+@deftypefnx {Built-in Function} {@var{x} =} base64_decode (@var{s}, @var{dims})\n\
+Decode the double matrix or array @var{x} from the base64 format string\n\
+@var{s}.  The optional input parameter @var{dims} should be a vector\n\
+containing the dimensions of the decoded array.\n\
+@seealso{base64_encode}\n\
+@end deftypefn")
+{
+  octave_value_list retval;
+
+  int nargin = args.length ();
+
+  if (nargin < 1 || nargin > 2)
+    print_usage ();
+  else
+    {
+      dim_vector new_dims;
+      Array<double> res;
+
+      if (nargin > 1)
+        {
+          const Array<octave_idx_type> new_size =
+            args(1).octave_idx_type_vector_value ();
+          if (! error_state)
+            {
+              new_dims = dim_vector::alloc (new_size.length ());
+              for (octave_idx_type i = 0; i < new_size.length (); i++)
+                new_dims(i) = new_size(i);
+            }
+        }
+
+      const std::string in = args(0).string_value ();
+
+      if (! error_state)
+        {
+          const char *inc = &(in[0]);
+          char *out;
+          size_t inlen = in.length (), outlen;
+
+          bool ok = base64_decode_alloc (inc, inlen, &out, &outlen);
+
+          if (! ok)
+            error ("base64_decode: input was not valid base64");
+          else if (! out)
+            error ("base64_decode: memory allocation error");
+          else
+            {
+              if ((outlen % (sizeof (double) / sizeof (char))) != 0)
+                error ("base64_decode: incorrect input size");
+              else
+                {
+                  octave_idx_type l;
+                  l = (outlen * sizeof (char)) / sizeof (double);
+                  res.resize1 (l);
+                  double *dout = reinterpret_cast<double*> (out);
+                  std::copy (dout, dout + l, res.fortran_vec ());
+
+                  if (nargin > 1)
+                    retval(0) = octave_value (res).reshape (new_dims);
+                  else
+                    retval(0) = octave_value (res);
+                }
+            }
+        }
+    }
+
+  return retval; 
+}
+
+/*
+%!assert (base64_decode (base64_encode (pi)), pi)
+%!
+%!test 
+%! in   = randn (10);
+%! outv = base64_decode (base64_encode (in));
+%! outm = base64_decode (base64_encode (in), size (in)); 
+%! assert (outv, in(:).');
+%! assert (outm, in);
+
+%!error base64_decode ()
+%!error base64_decode (1,2,3)
+%!error base64_decode (1, "this is not a valid set of dimensions")
+%!error <input was not valid base64> base64_decode (1)
+%!error <input was not valid base64> base64_decode ("AQ=")
+%!error <incorrect input size> base64_decode ("AQ==")
+*/
rename from src/data.h
rename to src/interpfcn/data.h
rename from src/debug.cc
rename to src/interpfcn/debug.cc
--- a/src/debug.cc
+++ b/src/interpfcn/debug.cc
@@ -504,8 +504,8 @@
 
 DEFUN (dbstop, args, ,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {@var{rline} =} dbstop (\"@var{func}\")\n\
-@deftypefnx {Loadable Function} {@var{rline} =} dbstop (\"@var{func}\", @var{line}, @dots{})\n\
+@deftypefn  {Built-in Function} {@var{rline} =} dbstop (\"@var{func}\")\n\
+@deftypefnx {Built-in Function} {@var{rline} =} dbstop (\"@var{func}\", @var{line}, @dots{})\n\
 Set a breakpoint in function @var{func}.\n\
 \n\
 Arguments are\n\
@@ -548,8 +548,8 @@
 
 DEFUN (dbclear, args, ,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {} dbclear (\"@var{func}\")\n\
-@deftypefnx {Loadable Function} {} dbclear (\"@var{func}\", @var{line}, @dots{})\n\
+@deftypefn  {Built-in Function} {} dbclear (\"@var{func}\")\n\
+@deftypefnx {Built-in Function} {} dbclear (\"@var{func}\", @var{line}, @dots{})\n\
 Delete a breakpoint in the function @var{func}.\n\
 \n\
 Arguments are\n\
@@ -585,9 +585,9 @@
 
 DEFUN (dbstatus, args, nargout,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {} dbstatus ()\n\
-@deftypefnx {Loadable Function} {@var{brk_list} =} dbstatus ()\n\
-@deftypefnx {Loadable Function} {@var{brk_list} =} dbstatus (\"@var{func}\")\n\
+@deftypefn  {Built-in Function} {} dbstatus ()\n\
+@deftypefnx {Built-in Function} {@var{brk_list} =} dbstatus ()\n\
+@deftypefnx {Built-in Function} {@var{brk_list} =} dbstatus (\"@var{func}\")\n\
 Report the location of active breakpoints.\n\
 \n\
 When called with no input or output arguments, print the list of\n\
@@ -701,7 +701,7 @@
 
 DEFUN (dbwhere, , ,
   "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {} dbwhere ()\n\
+@deftypefn {Built-in Function} {} dbwhere ()\n\
 In debugging mode, report the current file and line number where\n\
 execution is stopped.\n\
 @seealso{dbstatus, dbcont, dbstep, dbup}\n\
@@ -794,13 +794,13 @@
 
 DEFUN (dbtype, args, ,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {} dbtype ()\n\
-@deftypefnx {Loadable Function} {} dbtype (\"startl:endl\")\n\
-@deftypefnx {Loadable Function} {} dbtype (\"startl:end\")\n\
-@deftypefnx {Loadable Function} {} dbtype (\"@var{func}\")\n\
-@deftypefnx {Loadable Function} {} dbtype (\"@var{func}\", \"startl\")\n\
-@deftypefnx {Loadable Function} {} dbtype (\"@var{func}\", \"startl:endl\")\n\
-@deftypefnx {Loadable Function} {} dbtype (\"@var{func}\", \"startl:end\")\n\
+@deftypefn  {Built-in Function} {} dbtype ()\n\
+@deftypefnx {Built-in Function} {} dbtype (\"startl:endl\")\n\
+@deftypefnx {Built-in Function} {} dbtype (\"startl:end\")\n\
+@deftypefnx {Built-in Function} {} dbtype (\"@var{func}\")\n\
+@deftypefnx {Built-in Function} {} dbtype (\"@var{func}\", \"startl\")\n\
+@deftypefnx {Built-in Function} {} dbtype (\"@var{func}\", \"startl:endl\")\n\
+@deftypefnx {Built-in Function} {} dbtype (\"@var{func}\", \"startl:end\")\n\
 When in debugging mode and called with no arguments, list the script file\n\
 being debugged with line numbers.  An optional range specification,\n\
 specified as a string, can be used to list only a portion of the file.\n\
@@ -1022,9 +1022,9 @@
 
 DEFUN (dbstack, args, nargout,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {} dbstack ()\n\
-@deftypefnx {Loadable Function} {} dbstack (@var{n})\n\
-@deftypefnx {Loadable Function} {[@var{stack}, @var{idx}] =} dbstack (@dots{})\n\
+@deftypefn  {Built-in Function} {} dbstack ()\n\
+@deftypefnx {Built-in Function} {} dbstack (@var{n})\n\
+@deftypefnx {Built-in Function} {[@var{stack}, @var{idx}] =} dbstack (@dots{})\n\
 Display or return current debugging function stack information.\n\
 With optional argument @var{n}, omit the @var{n} innermost stack frames.\n\
 \n\
@@ -1090,8 +1090,8 @@
 
 DEFUN (dbup, args, ,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {} dbup\n\
-@deftypefnx {Loadable Function} {} dbup (@var{n})\n\
+@deftypefn  {Built-in Function} {} dbup\n\
+@deftypefnx {Built-in Function} {} dbup (@var{n})\n\
 In debugging mode, move up the execution stack @var{n} frames.\n\
 If @var{n} is omitted, move up one frame.\n\
 @seealso{dbstack, dbdown}\n\
@@ -1106,8 +1106,8 @@
 
 DEFUN (dbdown, args, ,
   "-*- texinfo -*-\n\
-@deftypefn  {Loadable Function} {} dbdown\n\
-@deftypefnx {Loadable Function} {} dbdown (@var{n})\n\
+@deftypefn  {Built-in Function} {} dbdown\n\
+@deftypefnx {Built-in Function} {} dbdown (@var{n})\n\
 In debugging mode, move down the execution stack @var{n} frames.\n\
 If @var{n} is omitted, move down one frame.\n\
 @seealso{dbstack, dbup}\n\
@@ -1252,7 +1252,7 @@
 
 DEFUN (isdebugmode, args, ,
   "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {} isdebugmode ()\n\
+@deftypefn {Built-in Function} {} isdebugmode ()\n\
 Return true if in debugging mode, otherwise false.\n\
 @seealso{dbwhere, dbstack, dbstatus}\n\
 @end deftypefn")
rename from src/debug.h
rename to src/interpfcn/debug.h
rename from src/defaults.cc
rename to src/interpfcn/defaults.cc
--- a/src/defaults.cc
+++ b/src/interpfcn/defaults.cc
@@ -74,6 +74,8 @@
 std::string Vlocal_api_fcn_file_dir;
 std::string Vlocal_fcn_file_dir;
 
+std::string Voct_etc_dir;
+
 std::string Voct_file_dir;
 std::string Vfcn_file_dir;
 
@@ -214,6 +216,12 @@
 }
 
 static void
+set_default_oct_etc_dir (void)
+{
+  Voct_etc_dir = subst_octave_home (OCTAVE_OCTETCDIR);
+}
+
+static void
 set_default_oct_file_dir (void)
 {
   Voct_file_dir = subst_octave_home (OCTAVE_OCTFILEDIR);
@@ -390,6 +398,8 @@
   set_default_local_api_fcn_file_dir ();
   set_default_local_fcn_file_dir ();
 
+  set_default_oct_etc_dir ();
+
   set_default_fcn_file_dir ();
   set_default_oct_file_dir ();
 
rename from src/defaults.in.h
rename to src/interpfcn/defaults.in.h
--- a/src/defaults.in.h
+++ b/src/interpfcn/defaults.in.h
@@ -1,4 +1,4 @@
-// defaults.h.in
+// %NO_EDIT_WARNING%
 /*
 
 Copyright (C) 1993-2012 John W. Eaton
@@ -194,6 +194,8 @@
 extern std::string Vlocal_api_fcn_file_dir;
 extern std::string Vlocal_fcn_file_dir;
 
+extern std::string Voct_etc_dir;
+
 extern std::string Voct_file_dir;
 extern std::string Vfcn_file_dir;
 
rename from src/defun.cc
rename to src/interpfcn/defun.cc
--- a/src/defun.cc
+++ b/src/interpfcn/defun.cc
@@ -80,10 +80,10 @@
 
 void
 install_builtin_function (octave_builtin::fcn f, const std::string& name,
-                          const std::string& doc,
+                          const std::string& file, const std::string& doc,
                           bool /* can_hide_function -- not yet implemented */)
 {
-  octave_value fcn (new octave_builtin (f, name, doc));
+  octave_value fcn (new octave_builtin (f, name, file, doc));
 
   symbol_table::install_built_in_function (name, fcn);
 }
rename from src/defun.h
rename to src/interpfcn/defun.h
rename from src/dirfns.cc
rename to src/interpfcn/dirfns.cc
rename from src/dirfns.h
rename to src/interpfcn/dirfns.h
--- a/src/dirfns.h
+++ b/src/interpfcn/dirfns.h
@@ -29,11 +29,6 @@
 
 #include "oct-time.h"
 
-extern std::string polite_directory_format (const std::string&);
-extern std::string base_pathname (const std::string&);
-extern std::string make_absolute (const std::string&, const std::string&);
-extern std::string get_working_directory (const std::string&);
-
 // The time we last time we changed directories.
 extern octave_time Vlast_chdir_time;
 
rename from src/error.cc
rename to src/interpfcn/error.cc
--- a/src/error.cc
+++ b/src/interpfcn/error.cc
@@ -1068,6 +1068,14 @@
 error: nargin != 1\n\
 @end group\n\
 @end example\n\
+\n\
+Implementation Note: For compatibility with @sc{matlab}, escape\n\
+sequences (e.g., \"\\n\" => newline) are processed in @var{template}\n\
+regardless of whether @var{template} has been defined within single quotes\n\
+as long as there are two or more input arguments.\n\
+Use a second backslash to stop interpolation of the escape sequence (e.g.,\n\
+\"\\\\n\") or use the @code{regexptranslate} function.\n\
+@seealso{warning, lasterror}\n\
 @end deftypefn")
 {
   octave_value retval;
@@ -1167,7 +1175,14 @@
 warning (\"error\");\n\
 @end group\n\
 @end example\n\
-@seealso{warning_ids}\n\
+\n\
+Implementation Note: For compatibility with @sc{matlab}, escape\n\
+sequences (e.g., \"\\n\" => newline) are processed in @var{template}\n\
+regardless of whether @var{template} has been defined within single quotes\n\
+as long as there are two or more input arguments.\n\
+Use a second backslash to stop interpolation of the escape sequence (e.g.,\n\
+\"\\\\n\") or use the @code{regexptranslate} function.\n\
+@seealso{warning_ids, lastwarn, error}\n\
 @end deftypefn")
 {
   octave_value retval;
@@ -1553,7 +1568,7 @@
 \n\
 If @code{lasterror} is called with the argument \"reset\", all fields are\n\
 set to their default values.\n\
-@seealso{lasterr}\n\
+@seealso{lasterr, error, lastwarn}\n\
 @end deftypefn")
 {
   octave_value retval;
@@ -1678,7 +1693,7 @@
 return the last error message and message identifier.  With one\n\
 argument, set the last error message to @var{msg}.  With two arguments,\n\
 also set the last message identifier.\n\
-@seealso{lasterror}\n\
+@seealso{lasterror, error, lastwarn}\n\
 @end deftypefn")
 {
   octave_value_list retval;
@@ -1722,10 +1737,14 @@
 
 DEFUN (lastwarn, args, nargout,
   "-*- texinfo -*-\n\
-@deftypefn {Built-in Function} {[@var{msg}, @var{msgid}] =} lastwarn (@var{msg}, @var{msgid})\n\
-Without any arguments, return the last warning message.  With one\n\
+@deftypefn  {Built-in Function} {[@var{msg}, @var{msgid}] =} lastwarn ()\n\
+@deftypefnx {Built-in Function} {} lastwarn (@var{msg})\n\
+@deftypefnx {Built-in Function} {} lastwarn (@var{msg}, @var{msgid})\n\
+Query or set the last warning message.  When called without input arguments,\n\
+return the last warning message and message identifier.  With one\n\
 argument, set the last warning message to @var{msg}.  With two arguments,\n\
 also set the last message identifier.\n\
+@seealso{warning, lasterror, lasterr}\n\
 @end deftypefn")
 {
   octave_value_list retval;
rename from src/error.h
rename to src/interpfcn/error.h
rename from src/file-io.cc
rename to src/interpfcn/file-io.cc
rename from src/file-io.h
rename to src/interpfcn/file-io.h
rename from src/graphics.cc
rename to src/interpfcn/graphics.cc
--- a/src/graphics.cc
+++ b/src/interpfcn/graphics.cc
@@ -1201,10 +1201,14 @@
   // check value type
   if (type_constraints.size () > 0)
     {
-      for (std::list<std::string>::const_iterator it = type_constraints.begin ();
-           ! xok && it != type_constraints.end (); ++it)
-        if ((*it) == v.class_name ())
-          xok = true;
+      if(type_constraints.find (v.class_name()) != type_constraints.end())
+        xok = true;
+
+      // check if complex is allowed (it's also of class "double", so
+      // checking that alone is not enough to ensure real type)
+      if (type_constraints.find ("real") != type_constraints.end ()
+          && v.is_complex_type ())
+        xok = false;
     }
   else
     xok = v.is_numeric_type ();
@@ -6833,9 +6837,9 @@
 
   v(1) += delta_el;
 
-  if(v(1) > 90)
+  if (v(1) > 90)
     v(1) = 90;
-  if(v(1) < -90)
+  if (v(1) < -90)
     v(1) = -90;
 
   v(0) = fmod (v(0) - delta_az + 720,360);
rename from src/graphics.in.h
rename to src/interpfcn/graphics.in.h
--- a/src/graphics.in.h
+++ b/src/interpfcn/graphics.in.h
@@ -1413,7 +1413,7 @@
   octave_value get (void) const { return data; }
 
   void add_constraint (const std::string& type)
-    { type_constraints.push_back (type); }
+    { type_constraints.insert (type); }
 
   void add_constraint (const dim_vector& dims)
     { size_constraints.push_back (dims); }
@@ -1486,7 +1486,7 @@
   double xmax;
   double xminp;
   double xmaxp;
-  std::list<std::string> type_constraints;
+  std::set<std::string> type_constraints;
   std::list<dim_vector> size_constraints;
 };
 
@@ -4432,6 +4432,7 @@
         cdata.add_constraint ("uint8");
         cdata.add_constraint ("uint16");
         cdata.add_constraint ("int16");
+        cdata.add_constraint ("real");
         cdata.add_constraint (dim_vector (-1, -1));
         cdata.add_constraint (dim_vector (-1, -1, 3));
       }
rename from src/help.cc
rename to src/interpfcn/help.cc
--- a/src/help.cc
+++ b/src/interpfcn/help.cc
@@ -762,7 +762,7 @@
   string_vector retval (lst.size ());
   int j = 0;
   for (map_iter iter = lst.begin (); iter != lst.end (); iter ++)
-    retval [j++] = iter->first;
+    retval[j++] = iter->first;
   return retval;
 }
 
@@ -954,7 +954,7 @@
 }
 
 DEFUN (get_help_text, args, , "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {[@var{text}, @var{format}] =} get_help_text (@var{name})\n\
+@deftypefn {Built-in Function} {[@var{text}, @var{format}] =} get_help_text (@var{name})\n\
 Return the raw help text of function @var{name}.\n\
 \n\
 The raw help text is returned in @var{text} and the format in @var{format}\n\
@@ -1023,7 +1023,7 @@
 
 DEFUN (get_help_text_from_file, args, ,
   "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {[@var{text}, @var{format}] =} get_help_text_from_file (@var{fname})\n\
+@deftypefn {Built-in Function} {[@var{text}, @var{format}] =} get_help_text_from_file (@var{fname})\n\
 Return the raw help text from the file @var{fname}.\n\
 \n\
 The raw help text is returned in @var{text} and the format in @var{format}\n\
@@ -1118,7 +1118,10 @@
                   if (fcn->is_user_function ())
                     type = "command-line function";
                   else
-                    type = "built-in function";
+                    {
+                      file = fcn->src_file_name ();
+                      type = "built-in function";
+                    }
                 }
               else
                 type = val.is_user_script ()
@@ -1215,11 +1218,11 @@
     {
       const int dir_len = dir.size ();
       const int filename_len = filename.size ();
-      const int max_allowed_seps = file_ops::is_dir_sep (dir [dir_len-1]) ? 0 : 1;
+      const int max_allowed_seps = file_ops::is_dir_sep (dir[dir_len-1]) ? 0 : 1;
 
       int num_seps = 0;
       for (int i = dir_len; i < filename_len; i++)
-        if (file_ops::is_dir_sep (filename [i]))
+        if (file_ops::is_dir_sep (filename[i]))
           num_seps ++;
 
       return (num_seps <= max_allowed_seps);
rename from src/help.h
rename to src/interpfcn/help.h
rename from src/input.cc
rename to src/interpfcn/input.cc
--- a/src/input.cc
+++ b/src/interpfcn/input.cc
@@ -1379,7 +1379,7 @@
 This can be useful for coloring the prompt.  For example,\n\
 \n\
 @example\n\
-PS1 (\"\\\\[\\\\033[01;31m\\\\]\\\\s:\\\\#> \\\\[\\\\033[0m\\]\")\n\
+PS1 (\"\\\\[\\\\033[01;31m\\\\]\\\\s:\\\\#> \\\\[\\\\033[0m\\\\]\")\n\
 @end example\n\
 \n\
 @noindent\n\
rename from src/input.h
rename to src/interpfcn/input.h
rename from src/load-path.cc
rename to src/interpfcn/load-path.cc
--- a/src/load-path.cc
+++ b/src/interpfcn/load-path.cc
@@ -523,36 +523,9 @@
 }
 
 void
-load_path::do_clear (std::set<std::string>& new_elts)
+load_path::do_clear (void)
 {
-  bool warn_default_path_clobbered = false;
-  for (dir_info_list_iterator i = dir_info_list.begin ();
-       i != dir_info_list.end ();
-       /* conditionally advance iterator in loop body */)
-    {
-      //Don't remove it if it's gonna be added again, but remove it from
-      //list of items to add, to avoid duplicates later on
-      std::set<std::string>::iterator j = new_elts.find (i->dir_name);
-      if (j != new_elts.end ())
-        {
-          new_elts.erase (j);
-          i++;
-        }
-      else
-        {
-          //Warn if removing a default directory and not immediately adding
-          //it back again
-          if (i->is_init)
-            warn_default_path_clobbered = true;
-          i = dir_info_list.erase (i);
-        }
-    }
-
-  if (warn_default_path_clobbered)
-    warning_with_id ("Octave:remove-init-dir",
-                     "default load path altered.  Some built-in functions may "
-                     "not be found.  Try restoredefaultpath() to recover it.");
-
+  dir_info_list.clear ();
   fcn_map.clear ();
   private_fcn_map.clear ();
   method_map.clear ();
@@ -594,8 +567,27 @@
 void
 load_path::do_set (const std::string& p, bool warn, bool is_init)
 {
-  std::list<std::string> elts_l = split_path (p);
-  std::set<std::string> elts(elts_l.begin (), elts_l.end ());
+  // Use a list when we need to preserve order.
+  std::list<std::string> elts = split_path (p);
+
+  // Use a set when we need to search and order is not important.
+  std::set<std::string> elts_set (elts.begin (), elts.end ());
+
+  if (is_init)
+    init_dirs = elts_set;
+  else
+    {
+      for (std::set<std::string>::const_iterator it = init_dirs.begin ();
+           it != init_dirs.end (); it++)
+        {
+          if (elts_set.find (*it) == elts_set.end ())
+            {
+              warning_with_id ("Octave:remove-init-dir",
+                               "default load path altered.  Some built-in functions may not be found.  Try restoredefaultpath() to recover it.");
+              break;
+            }
+        }
+    }
 
   // Temporarily disable add hook.
 
@@ -604,12 +596,11 @@
 
   add_hook = 0;
 
-  do_clear (elts);
-
-  for (std::set<std::string>::const_iterator i = elts.begin ();
-       i != elts.end ();
-       i++)
-    do_append (*i, warn, is_init);
+  do_clear ();
+
+  for (std::list<std::string>::const_iterator i = elts.begin ();
+       i != elts.end (); i++)
+    do_append (*i, warn);
 
   // Restore add hook and execute for all newly added directories.
   frame.run_top ();
@@ -627,10 +618,10 @@
 }
 
 void
-load_path::do_append (const std::string& dir, bool warn, bool is_init)
+load_path::do_append (const std::string& dir, bool warn)
 {
   if (! dir.empty ())
-    do_add (dir, true, warn, is_init);
+    do_add (dir, true, warn);
 }
 
 void
@@ -659,8 +650,7 @@
 }
 
 void
-load_path::do_add (const std::string& dir_arg, bool at_end, bool warn,
-                   bool is_init)
+load_path::do_add (const std::string& dir_arg, bool at_end, bool warn)
 {
   size_t len = dir_arg.length ();
 
@@ -685,7 +675,6 @@
           if (fs.is_dir ())
             {
               dir_info di (dir);
-              di.is_init = is_init;
 
               if (! error_state)
                 {
@@ -1798,7 +1787,11 @@
                   // way we look for old.dir_name in sys_path to avoid
                   // partial matches?
 
-                  if (sys_path.find (old.dir_name) != std::string::npos
+                  // Don't warn about Contents.m files since we expect
+                  // more than one to exist in the load path.
+
+                  if (fname != "Contents.m"
+                      && sys_path.find (old.dir_name) != std::string::npos
                       && in_path_list (sys_path, old.dir_name))
                     {
                       std::string fcn_path = file_ops::concat (dir_name, fname);
rename from src/load-path.h
rename to src/interpfcn/load-path.h
--- a/src/load-path.h
+++ b/src/interpfcn/load-path.h
@@ -39,7 +39,8 @@
 protected:
 
   load_path (void)
-    : dir_info_list (), fcn_map (), private_fcn_map (), method_map () { }
+    : dir_info_list (), fcn_map (), private_fcn_map (), method_map (),
+      init_dirs () { }
 
 public:
 
@@ -56,10 +57,7 @@
   static void clear (void)
   {
     if (instance_ok ())
-      {
-        std::set<std::string> no_new_elts;
-        instance->do_clear (no_new_elts);
-      }
+      instance->do_clear ();
   }
 
   static void set (const std::string& p, bool warn = false)
@@ -297,13 +295,13 @@
     // constructor for any other purpose.
     dir_info (void)
       : dir_name (), abs_dir_name (), is_relative (false),
-        is_init (false), dir_mtime (), dir_time_last_checked (),
+        dir_mtime (), dir_time_last_checked (),
         all_files (), fcn_files (), private_file_map (), method_file_map ()
       { }
 
     dir_info (const std::string& d)
       : dir_name (d), abs_dir_name (), is_relative (false),
-        is_init (false), dir_mtime (), dir_time_last_checked (),
+        dir_mtime (), dir_time_last_checked (),
         all_files (), fcn_files (), private_file_map (), method_file_map ()
     {
       initialize ();
@@ -312,7 +310,6 @@
     dir_info (const dir_info& di)
       : dir_name (di.dir_name), abs_dir_name (di.abs_dir_name),
         is_relative (di.is_relative),
-        is_init (di.is_init),
         dir_mtime (di.dir_mtime),
         dir_time_last_checked (di.dir_time_last_checked),
         all_files (di.all_files), fcn_files (di.fcn_files),
@@ -328,7 +325,6 @@
           dir_name = di.dir_name;
           abs_dir_name = di.abs_dir_name;
           is_relative = di.is_relative;
-          is_init = di.is_init;
           dir_mtime = di.dir_mtime;
           dir_time_last_checked = di.dir_time_last_checked;
           all_files = di.all_files;
@@ -345,7 +341,6 @@
     std::string dir_name;
     std::string abs_dir_name;
     bool is_relative;
-    bool is_init; //Was this directory set by init? Warn when clearing it.
     octave_time dir_mtime;
     octave_time dir_time_last_checked;
     string_vector all_files;
@@ -447,6 +442,8 @@
 
   mutable method_map_type method_map;
 
+  mutable std::set<std::string> init_dirs;
+
   static load_path *instance;
 
   static void cleanup_instance (void) { delete instance; instance = 0; }
@@ -477,16 +474,15 @@
 
   void do_initialize (bool set_initial_path);
 
-  void do_clear (std::set<std::string>& new_elts);
+  void do_clear (void);
 
-  void do_set (const std::string& p, bool warn, bool is_init=false);
+  void do_set (const std::string& p, bool warn, bool is_init = false);
 
-  void do_append (const std::string& dir, bool warn, bool is_init=false);
+  void do_append (const std::string& dir, bool warn);
 
   void do_prepend (const std::string& dir, bool warn);
 
-  void do_add (const std::string& dir, bool at_end, bool warn,
-               bool is_init=false);
+  void do_add (const std::string& dir, bool at_end, bool warn);
 
   void remove_fcn_map (const std::string& dir, const string_vector& fcn_files);
 
rename from src/load-save.cc
rename to src/interpfcn/load-save.cc
--- a/src/load-save.cc
+++ b/src/interpfcn/load-save.cc
@@ -91,7 +91,7 @@
 #include "zfstream.h"
 #endif
 
-// Write octave-core file if Octave crashes or is killed by a signal.
+// Write octave-workspace file if Octave crashes or is killed by a signal.
 static bool Vcrash_dumps_octave_core = true;
 
 // The maximum amount of memory (in kilobytes) that we will attempt to
@@ -99,7 +99,7 @@
 static double Voctave_core_file_limit = -1.0;
 
 // The name of the Octave core file.
-static std::string Voctave_core_file_name = "octave-core";
+static std::string Voctave_core_file_name = "octave-workspace";
 
 // The default output format.  May be one of "binary", "text",
 // "mat-binary", or "hdf5".
@@ -1751,7 +1751,7 @@
 @deftypefnx {Built-in Function} {@var{old_val} =} crash_dumps_octave_core (@var{new_val})\n\
 @deftypefnx {Built-in Function} {} crash_dumps_octave_core (@var{new_val}, \"local\")\n\
 Query or set the internal variable that controls whether Octave tries\n\
-to save all current variables to the file \"octave-core\" if it\n\
+to save all current variables to the file \"octave-workspace\" if it\n\
 crashes or receives a hangup, terminate or similar signal.\n\
 \n\
 When called from inside a function with the \"local\" option, the variable is\n\
@@ -1812,7 +1812,7 @@
 @deftypefnx {Built-in Function} {} octave_core_file_name (@var{new_val}, \"local\")\n\
 Query or set the internal variable that specifies the name of the file\n\
 used for saving data from the top-level workspace if Octave aborts.\n\
-The default value is @code{\"octave-core\"}\n\
+The default value is @code{\"octave-workspace\"}\n\
 \n\
 When called from inside a function with the \"local\" option, the variable is\n\
 changed locally for the function and any subroutines it calls.  The original\n\
rename from src/load-save.h
rename to src/interpfcn/load-save.h
rename from src/ls-oct-ascii.cc
rename to src/interpfcn/ls-oct-ascii.cc
rename from src/ls-oct-ascii.h
rename to src/interpfcn/ls-oct-ascii.h
new file mode 100644
--- /dev/null
+++ b/src/interpfcn/module.mk
@@ -0,0 +1,77 @@
+EXTRA_DIST += \
+  interpfcn/module.mk \
+  interpfcn/defaults.in.h \
+  interpfcn/graphics.in.h
+
+INTERPFCN_INCLUDES = \
+  interpfcn/data.h \
+  interpfcn/debug.h \
+  interpfcn/defun.h \
+  interpfcn/dirfns.h \
+  interpfcn/error.h \
+  interpfcn/file-io.h \
+  interpfcn/help.h \
+  interpfcn/input.h \
+  interpfcn/load-path.h \
+  interpfcn/load-save.h \
+  interpfcn/ls-oct-ascii.h \
+  interpfcn/oct-hist.h \
+  interpfcn/pager.h \
+  interpfcn/pr-output.h \
+  interpfcn/profiler.h \
+  interpfcn/sighandlers.h \
+  interpfcn/symtab.h \
+  interpfcn/sysdep.h \
+  interpfcn/toplev.h \
+  interpfcn/utils.h \
+  interpfcn/variables.h
+
+INTERPFCN_SRC = \
+  interpfcn/data.cc \
+  interpfcn/debug.cc \
+  interpfcn/defaults.cc \
+  interpfcn/defun.cc \
+  interpfcn/dirfns.cc \
+  interpfcn/error.cc \
+  interpfcn/file-io.cc \
+  interpfcn/graphics.cc \
+  interpfcn/help.cc \
+  interpfcn/input.cc \
+  interpfcn/load-path.cc \
+  interpfcn/load-save.cc \
+  interpfcn/ls-oct-ascii.cc \
+  interpfcn/oct-hist.cc \
+  interpfcn/pager.cc \
+  interpfcn/pr-output.cc \
+  interpfcn/profiler.cc \
+  interpfcn/sighandlers.cc \
+  interpfcn/symtab.cc \
+  interpfcn/sysdep.cc \
+  interpfcn/toplev.cc \
+  interpfcn/utils.cc \
+  interpfcn/variables.cc
+
+## defaults.h and graphics.h must depend on Makefile.  Calling configure
+## may change default/config values.  However, calling configure will also
+## regenerate the Makefiles from Makefile.am and trigger the rules below.
+interpfcn/defaults.h: interpfcn/defaults.in.h Makefile
+	@$(do_subst_default_vals)
+
+interpfcn/graphics.h: interpfcn/graphics.in.h genprops.awk Makefile
+	$(AWK) -f $(srcdir)/genprops.awk $< > $@-t
+	mv $@-t $@
+
+interpfcn/graphics-props.cc: interpfcn/graphics.in.h genprops.awk Makefile
+	$(AWK) -v emit_graphics_props=1 -f $(srcdir)/genprops.awk $< > $@-t
+	mv $@-t $@
+
+## FIXME: Do these rules work correctly after transplant to interpfcn/ dir?
+__fltk_uigetfile__.lo __fltk_uigetfile__.o: \
+  AM_CXXFLAGS := $(filter-out $(DLL_CXXDEFS), $(AM_CXXFLAGS) $(GRAPHICS_CFLAGS))
+
+__init_fltk__.lo __init_fltk__.o: \
+  AM_CXXFLAGS := $(filter-out $(DLL_CXXDEFS), $(AM_CXXFLAGS) $(GRAPHICS_CFLAGS))
+
+noinst_LTLIBRARIES += interpfcn/libinterpfcn.la
+
+interpfcn_libinterpfcn_la_SOURCES = $(INTERPFCN_SRC)
rename from src/oct-hist.cc
rename to src/interpfcn/oct-hist.cc
rename from src/oct-hist.h
rename to src/interpfcn/oct-hist.h
rename from src/pager.cc
rename to src/interpfcn/pager.cc
rename from src/pager.h
rename to src/interpfcn/pager.h
rename from src/pr-output.cc
rename to src/interpfcn/pr-output.cc
rename from src/pr-output.h
rename to src/interpfcn/pr-output.h
rename from src/profiler.cc
rename to src/interpfcn/profiler.cc
rename from src/profiler.h
rename to src/interpfcn/profiler.h
rename from src/sighandlers.cc
rename to src/interpfcn/sighandlers.cc
--- a/src/sighandlers.cc
+++ b/src/interpfcn/sighandlers.cc
@@ -63,7 +63,7 @@
 // TRUE means we should try to enter the debugger on SIGINT.
 static bool Vdebug_on_interrupt = false;
 
-// Allow users to avoid writing octave-core for SIGHUP (sent by
+// Allow users to avoid writing octave-workspace for SIGHUP (sent by
 // closing gnome-terminal, for example).  Note that this variable has
 // no effect if Vcrash_dumps_octave_core is FALSE.
 static bool Vsighup_dumps_octave_core = true;
@@ -147,12 +147,12 @@
 #endif
 
             case SIGFPE:
-              std::cerr << "warning: floating point exception -- trying to return to prompt" << std::endl;
+              std::cerr << "warning: floating point exception" << std::endl;
               break;
 
 #ifdef SIGPIPE
             case SIGPIPE:
-              std::cerr << "warning: broken pipe -- some output may be lost" << std::endl;
+              std::cerr << "warning: broken pipe" << std::endl;
               break;
 #endif
             }
@@ -1001,7 +1001,7 @@
 @deftypefnx {Built-in Function} {@var{old_val} =} sighup_dumps_octave_core (@var{new_val})\n\
 @deftypefnx {Built-in Function} {} sighup_dumps_octave_core (@var{new_val}, \"local\")\n\
 Query or set the internal variable that controls whether Octave tries\n\
-to save all current variables to the file \"octave-core\" if it receives\n\
+to save all current variables to the file \"octave-workspace\" if it receives\n\
 a hangup signal.\n\
 \n\
 When called from inside a function with the \"local\" option, the variable is\n\
@@ -1030,7 +1030,7 @@
 @deftypefnx {Built-in Function} {@var{old_val} =} sigterm_dumps_octave_core (@var{new_val})\n\
 @deftypefnx {Built-in Function} {} sigterm_dumps_octave_core (@var{new_val}, \"local\")\n\
 Query or set the internal variable that controls whether Octave tries\n\
-to save all current variables to the file \"octave-core\" if it receives\n\
+to save all current variables to the file \"octave-workspace\" if it receives\n\
 a terminate signal.\n\
 \n\
 When called from inside a function with the \"local\" option, the variable is\n\
rename from src/sighandlers.h
rename to src/interpfcn/sighandlers.h
rename from src/symtab.cc
rename to src/interpfcn/symtab.cc
--- a/src/symtab.cc
+++ b/src/interpfcn/symtab.cc
@@ -1713,3 +1713,32 @@
   return retval;
 }
 #endif
+
+
+/*
+bug #34497: 'clear -f' does not work for command line functions
+
+This test relies on bar being a core function that is implemented in an m-file.
+If the first assert fails, this is no longer the case and the tests need to be
+updated to use some other function.
+
+%!assert (! strcmp (which ("bar"), ""));
+
+%!function x = bar ()
+%!  x = 5;
+%!endfunction
+%!test
+%! assert (bar == 5);
+%! assert (strcmp (which ("bar"), ""));
+%! clear -f bar;
+%! assert (! strcmp (which ("bar"), ""));
+
+%!function x = bar ()
+%!  x = 5;
+%!endfunction
+%!test
+%! assert (bar == 5);
+%! assert (strcmp (which ("bar"), ""));
+%! clear bar;
+%! assert (! strcmp (which ("bar"), ""));
+ */
rename from src/symtab.h
rename to src/interpfcn/symtab.h
--- a/src/symtab.h
+++ b/src/interpfcn/symtab.h
@@ -484,7 +484,7 @@
       return symbol_record (rep->dup (new_scope));
     }
 
-    std::string name (void) const { return rep->name; }
+    const std::string& name (void) const { return rep->name; }
 
     octave_value
     find (const octave_value_list& args = octave_value_list ()) const;
@@ -581,6 +581,66 @@
     symbol_record (symbol_record_rep *new_rep) : rep (new_rep) { }
   };
 
+  // Always access a symbol from the current scope.
+  // Useful for scripts, as they may be executed in more than one scope.
+  class
+  symbol_reference
+  {
+  public:
+    symbol_reference (void) : scope (-1) {}
+
+    symbol_reference (symbol_record record,
+                       scope_id curr_scope = symbol_table::current_scope ())
+      : scope (curr_scope), sym (record)
+    {}
+
+    symbol_reference& operator = (const symbol_reference& ref)
+    {
+      scope = ref.scope;
+      sym = ref.sym;
+      return *this;
+    }
+
+    // The name is the same regardless of scope.
+    const std::string& name (void) const { return sym.name (); }
+
+    symbol_record *operator-> (void)
+    {
+      update ();
+      return &sym;
+    }
+
+    symbol_record *operator-> (void) const
+    {
+      update ();
+      return &sym;
+    }
+
+    // can be used to place symbol_reference in maps, we don't overload < as
+    // it doesn't make any sense for symbol_reference
+    struct comparator
+    {
+      bool operator ()(const symbol_reference& lhs,
+                       const symbol_reference& rhs) const
+      {
+        return lhs.name () < rhs.name ();
+      }
+    };
+  private:
+    void update (void) const
+    {
+      scope_id curr_scope = symbol_table::current_scope ();
+      if (scope != curr_scope || ! sym.is_valid ())
+        {
+          scope = curr_scope;
+          sym = symbol_table::insert (sym.name ());
+        }
+    }
+
+    mutable scope_id scope;
+    mutable symbol_record sym;
+  };
+
   class
   fcn_info
   {
@@ -708,20 +768,14 @@
           }
       }
 
-      void clear_cmdline_function (void)
-      {
-        if (! cmdline_function.islocked ())
-          cmdline_function = octave_value ();
-      }
-
       void clear_autoload_function (void)
       {
         if (! autoload_function.islocked ())
           autoload_function = octave_value ();
       }
 
-      // FIXME -- should this also clear the cmdline and other "user
-      // defined" functions?
+      // We also clear command line functions here, as these are both
+      // "user defined"
       void clear_user_function (void)
       {
         if (! function_on_path.islocked ())
@@ -730,6 +784,9 @@
 
             function_on_path = octave_value ();
           }
+
+        if (! cmdline_function.islocked ())
+          cmdline_function = octave_value ();
       }
 
       void clear_mex_function (void)
@@ -744,7 +801,6 @@
         clear_unlocked (private_functions);
         clear_unlocked (class_constructors);
         clear_unlocked (class_methods);
-        clear_cmdline_function ();
         clear_autoload_function ();
         clear_user_function ();
       }
rename from src/sysdep.cc
rename to src/interpfcn/sysdep.cc
rename from src/sysdep.h
rename to src/interpfcn/sysdep.h
rename from src/toplev.cc
rename to src/interpfcn/toplev.cc
--- a/src/toplev.cc
+++ b/src/interpfcn/toplev.cc
@@ -1254,6 +1254,7 @@
       { false, "CAMD_LDFLAGS", OCTAVE_CONF_CAMD_LDFLAGS },
       { false, "CAMD_LIBS", OCTAVE_CONF_CAMD_LIBS },
       { false, "CC", OCTAVE_CONF_CC },
+      // FIXME: CC_VERSION is deprecated.  Remove in version 3.12
       { false, "CC_VERSION", OCTAVE_CONF_CC_VERSION },
       { false, "CCOLAMD_CPPFLAGS", OCTAVE_CONF_CCOLAMD_CPPFLAGS },
       { false, "CCOLAMD_LDFLAGS", OCTAVE_CONF_CCOLAMD_LDFLAGS },
@@ -1277,12 +1278,15 @@
       { false, "CXXCPP", OCTAVE_CONF_CXXCPP },
       { false, "CXXFLAGS", OCTAVE_CONF_CXXFLAGS },
       { false, "CXXPICFLAG", OCTAVE_CONF_CXXPICFLAG },
+      // FIXME: CXX_VERSION is deprecated.  Remove in version 3.12
       { false, "CXX_VERSION", OCTAVE_CONF_CXX_VERSION },
       { false, "DEFAULT_PAGER", OCTAVE_DEFAULT_PAGER },
       { false, "DEFS", OCTAVE_CONF_DEFS },
       { false, "DL_LD", OCTAVE_CONF_DL_LD },
       { false, "DL_LDFLAGS", OCTAVE_CONF_DL_LDFLAGS },
       { false, "DL_LIBS", OCTAVE_CONF_DL_LIBS },
+      { false, "GCC_VERSION", OCTAVE_CONF_GCC_VERSION },
+      { false, "GXX_VERSION", OCTAVE_CONF_GXX_VERSION },
       { false, "ENABLE_DYNAMIC_LINKING", OCTAVE_CONF_ENABLE_DYNAMIC_LINKING },
       { false, "EXEEXT", OCTAVE_CONF_EXEEXT },
       { false, "F77", OCTAVE_CONF_F77 },
@@ -1307,7 +1311,6 @@
       { false, "HDF5_CPPFLAGS", OCTAVE_CONF_HDF5_CPPFLAGS },
       { false, "HDF5_LDFLAGS", OCTAVE_CONF_HDF5_LDFLAGS },
       { false, "HDF5_LIBS", OCTAVE_CONF_HDF5_LIBS },
-      { false, "INCFLAGS", OCTAVE_CONF_INCFLAGS },
       { false, "LAPACK_LIBS", OCTAVE_CONF_LAPACK_LIBS },
       { false, "LDFLAGS", OCTAVE_CONF_LDFLAGS },
       { false, "LD_CXX", OCTAVE_CONF_LD_CXX },
@@ -1325,6 +1328,9 @@
       { false, "MAGICK_CPPFLAGS", OCTAVE_CONF_MAGICK_CPPFLAGS },
       { false, "MAGICK_LDFLAGS", OCTAVE_CONF_MAGICK_LDFLAGS },
       { false, "MAGICK_LIBS", OCTAVE_CONF_MAGICK_LIBS },
+      { false, "LLVM_CPPFLAGS", OCTAVE_CONF_LLVM_CPPFLAGS },
+      { false, "LLVM_LDFLAGS", OCTAVE_CONF_LLVM_LDFLAGS },
+      { false, "LLVM_LIBS", OCTAVE_CONF_LLVM_LIBS },
       { false, "MKOCTFILE_DL_LDFLAGS", OCTAVE_CONF_MKOCTFILE_DL_LDFLAGS },
       { false, "OCTAVE_LINK_DEPS", OCTAVE_CONF_OCTAVE_LINK_DEPS },
       { false, "OCTAVE_LINK_OPTS", OCTAVE_CONF_OCTAVE_LINK_OPTS },
@@ -1339,6 +1345,8 @@
       { false, "QRUPDATE_CPPFLAGS", OCTAVE_CONF_QRUPDATE_CPPFLAGS },
       { false, "QRUPDATE_LDFLAGS", OCTAVE_CONF_QRUPDATE_LDFLAGS },
       { false, "QRUPDATE_LIBS", OCTAVE_CONF_QRUPDATE_LIBS },
+      { false, "QT_INCDIR", OCTAVE_CONF_QT_INCDIR },
+      { false, "QT_LIBDIR", OCTAVE_CONF_QT_LIBDIR },
       { false, "RANLIB", OCTAVE_CONF_RANLIB },
       { false, "RDYNAMIC_FLAG", OCTAVE_CONF_RDYNAMIC_FLAG },
       { false, "READLINE_LIBS", OCTAVE_CONF_READLINE_LIBS },
rename from src/toplev.h
rename to src/interpfcn/toplev.h
rename from src/utils.cc
rename to src/interpfcn/utils.cc
--- a/src/utils.cc
+++ b/src/interpfcn/utils.cc
@@ -470,7 +470,7 @@
           if (fs.exists ())
             retval = name;
         }
-      else if (len > 2 && name [len - 2] == '.' && name [len - 1] == 'm')
+      else if (len > 2 && name[len - 2] == '.' && name[len - 1] == 'm')
         retval = load_path::find_fcn_file (name.substr (0, len-2));
       else
         {
@@ -527,8 +527,8 @@
           if (fs.exists ())
             retval = name;
         }
-      else if (len > 4 && name [len - 4] == '.' && name [len - 3] == 'o'
-               && name [len - 2] == 'c' && name [len - 1] == 't')
+      else if (len > 4 && name[len - 4] == '.' && name[len - 3] == 'o'
+               && name[len - 2] == 'c' && name[len - 1] == 't')
         retval = load_path::find_oct_file (name.substr (0, len-4));
       else
         retval = load_path::find_oct_file (name);
@@ -556,8 +556,8 @@
           if (fs.exists ())
             retval = name;
         }
-      else if (len > 4 && name [len - 4] == '.' && name [len - 3] == 'm'
-               && name [len - 2] == 'e' && name [len - 1] == 'x')
+      else if (len > 4 && name[len - 4] == '.' && name[len - 3] == 'm'
+               && name[len - 2] == 'e' && name[len - 1] == 'x')
         retval = load_path::find_mex_file (name.substr (0, len-4));
       else
         retval = load_path::find_mex_file (name);
rename from src/utils.h
rename to src/interpfcn/utils.h
rename from src/variables.cc
rename to src/interpfcn/variables.cc
--- a/src/variables.cc
+++ b/src/interpfcn/variables.cc
@@ -548,6 +548,7 @@
 @item \"dir\"\n\
 Check only for directories.\n\
 @end table\n\
+\n\
 @seealso{file_in_loadpath}\n\
 @end deftypefn")
 {
@@ -1558,7 +1559,7 @@
             error ("whos: -file argument must be followed by a file name");
           else
             {
-              std::string nm = argv [i + 1];
+              std::string nm = argv[i + 1];
 
               unwind_protect frame;
 
@@ -2324,6 +2325,7 @@
 The arguments are treated as regular expressions as any variables that\n\
 match will be cleared.\n\
 @end table\n\
+\n\
 With the exception of @code{exclusive}, all long options can be used\n\
 without the dash as well.\n\
 @end deftypefn")
rename from src/variables.h
rename to src/interpfcn/variables.h
--- a/src/link-deps.mk
+++ b/src/link-deps.mk
@@ -3,7 +3,7 @@
 if AMCOND_ENABLE_DYNAMIC_LINKING
   LIBOCTINTERP_LINK_DEPS =
 else
-  LIBOCTINTERP_LINK_DEPS = $(DLD_FUNCTIONS_LIBS)
+  LIBOCTINTERP_LINK_DEPS = $(DLDFCN_LIBS)
 endif
 
 LIBOCTINTERP_LINK_DEPS += \
@@ -11,16 +11,22 @@
   $(FT2_LIBS) \
   $(HDF5_LIBS) \
   $(Z_LIBS) \
+  $(FFTW_XLIBS) \
+  $(REGEX_LIBS) \
   $(OPENGL_LIBS) \
   $(X11_LIBS) \
-  $(CARBON_LIBS)
+  $(CARBON_LIBS) \
+  $(LLVM_LIBS) \
+  $(LAPACK_LIBS)
 
 LIBOCTINTERP_LINK_OPTS = \
   $(GRAPHICS_LDFLAGS) \
   $(FT2_LDFLAGS) \
   $(HDF5_LDFLAGS) \
   $(Z_LDFLAGS) \
-  $(REGEX_LDFLAGS)
+  $(REGEX_LDFLAGS) \
+  $(FFTW_XLDFLAGS) \
+  $(LLVM_LDFLAGS)
 
 OCT_LINK_DEPS =
 
new file mode 100644
--- /dev/null
+++ b/src/main-cli.cc
@@ -0,0 +1,35 @@
+/*
+
+Copyright (C) 2012 John W. Eaton
+
+This file is part of Octave.
+
+Octave is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3 of the License, or (at your
+option) any later version.
+
+Octave is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with Octave; see the file COPYING.  If not, see
+<http://www.gnu.org/licenses/>.
+
+*/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <octave.h>
+
+int
+main (int argc, char **argv)
+{
+  octave_initialize_interpreter (argc, argv, 0);
+
+  return octave_execute_interpreter ();
+}
deleted file mode 100644
--- a/src/main.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
-
-Copyright (C) 2002-2012 John W. Eaton
-
-This file is part of Octave.
-
-Octave is free software; you can redistribute it and/or modify it
-under the terms of the GNU General Public License as published by the
-Free Software Foundation; either version 3 of the License, or (at your
-option) any later version.
-
-Octave is distributed in the hope that it will be useful, but WITHOUT
-ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License
-along with Octave; see the file COPYING.  If not, see
-<http://www.gnu.org/licenses/>.
-
-*/
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "f77-fcn.h"
-#include "lo-ieee.h"
-
-#include "octave.h"
-
-int
-main (int argc, char **argv)
-{
-  return octave_main (argc, argv, 0);
-}
new file mode 100644
--- /dev/null
+++ b/src/main.cc
@@ -0,0 +1,39 @@
+/*
+
+Copyright (C) 2012 John W. Eaton
+
+This file is part of Octave.
+
+Octave is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3 of the License, or (at your
+option) any later version.
+
+Octave is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with Octave; see the file COPYING.  If not, see
+<http://www.gnu.org/licenses/>.
+
+*/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <octave.h>
+#include <octave-gui.h>
+
+int
+main (int argc, char **argv)
+{
+  octave_initialize_interpreter (argc, argv, 0);
+
+  if (octave_starting_gui ())
+    return octave_start_gui (argc, argv);
+
+  return octave_execute_interpreter ();
+}
--- a/src/mkbuiltins
+++ b/src/mkbuiltins
@@ -57,19 +57,20 @@
 
 #endif
 
-#define XDEFUN_FILE_NAME(name)
+#define XDEFUN_FILE_NAME(name) \
+  std::string file = name;
 
 #define XDEFUN_INTERNAL(name, args_name, nargout_name, doc) \
   extern DECLARE_FUN (name, args_name, nargout_name); \
-  install_builtin_function (F ## name, #name, doc); \
+  install_builtin_function (F ## name, #name, file, doc); \
 
 #define XDEFCONSTFUN_INTERNAL(name, args_name, nargout_name, doc) \
   extern DECLARE_FUN (name, args_name, nargout_name); \
-  install_builtin_function (F ## name, #name, doc, false); \
+  install_builtin_function (F ## name, #name, file, doc, false); \
 
 #define XDEFUNX_INTERNAL(name, fname, args_name, nargout_name, doc) \
   extern DECLARE_FUNX (fname, args_name, nargout_name); \
-  install_builtin_function (fname, name, doc); \
+  install_builtin_function (fname, name, file, doc); \
 
 #define XDEFALIAS_INTERNAL(alias, name) \
   alias_builtin (#alias, #name);
--- a/src/mkops
+++ b/src/mkops
@@ -21,7 +21,7 @@
 SED=${SED:-'sed'}
 
 cat << \EOF
-// DO NOT EDIT!  Generated automatically by mkbuiltins.
+// DO NOT EDIT!  Generated automatically by mkops.
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -32,7 +32,7 @@
 EOF
 
 for file in "$@"; do
-  f=`echo $file | $SED 's,^\./,,; s%^OPERATORS/op-%%; s%\.cc%%; s%-%_%g'`
+  f=`echo $file | $SED 's,^\./,,; s%^operators/op-%%; s%\.cc%%; s%-%_%g'`
   echo "extern void install_${f}_ops (void);"
 done
 
@@ -46,7 +46,7 @@
 EOF
 
 for file in "$@"; do
-  f=`echo $file | $SED 's,^\./,,; s%^OPERATORS/op-%%; s%\.cc%%; s%-%_%g'`
+  f=`echo $file | $SED 's,^\./,,; s%^operators/op-%%; s%\.cc%%; s%-%_%g'`
   echo "  install_${f}_ops ();"
 done
 
--- a/src/oct-conf.in.h
+++ b/src/oct-conf.in.h
@@ -1,4 +1,4 @@
-// oct-conf.h.in
+// %NO_EDIT_WARNING%
 /*
 
 Copyright (C) 1996-2012 John W. Eaton
@@ -96,6 +96,7 @@
 #define OCTAVE_CONF_CC %OCTAVE_CONF_CC%
 #endif
 
+// FIXME: OCTAVE_CONF_CCC_VERSION is deprecated.  Remove in version 3.12
 #ifndef OCTAVE_CONF_CC_VERSION
 #define OCTAVE_CONF_CC_VERSION %OCTAVE_CONF_CC_VERSION%
 #endif
@@ -188,6 +189,7 @@
 #define OCTAVE_CONF_CXX %OCTAVE_CONF_CXX%
 #endif
 
+// FIXME: OCTAVE_CONF_CXX_VERSION is deprecated.  Remove in version 3.12
 #ifndef OCTAVE_CONF_CXX_VERSION
 #define OCTAVE_CONF_CXX_VERSION %OCTAVE_CONF_CXX_VERSION%
 #endif
@@ -212,6 +214,14 @@
 #define OCTAVE_CONF_DL_LIBS %OCTAVE_CONF_DL_LIBS%
 #endif
 
+#ifndef OCTAVE_CONF_GCC_VERSION
+#define OCTAVE_CONF_GCC_VERSION %OCTAVE_CONF_GCC_VERSION%
+#endif
+
+#ifndef OCTAVE_CONF_GXX_VERSION
+#define OCTAVE_CONF_GXX_VERSION %OCTAVE_CONF_GXX_VERSION%
+#endif
+
 #ifndef OCTAVE_CONF_EXEEXT
 #define OCTAVE_CONF_EXEEXT %OCTAVE_CONF_EXEEXT%
 #endif
@@ -384,6 +394,18 @@
 #define OCTAVE_CONF_MAGICK_LIBS %OCTAVE_CONF_MAGICK_LIBS%
 #endif
 
+#ifndef OCTAVE_CONF_LLVM_CPPFLAGS
+#define OCTAVE_CONF_LLVM_CPPFLAGS %OCTAVE_CONF_LLVM_CPPFLAGS%
+#endif
+
+#ifndef OCTAVE_CONF_LLVM_LDFLAGS
+#define OCTAVE_CONF_LLVM_LDFLAGS %OCTAVE_CONF_LLVM_LDFLAGS%
+#endif
+
+#ifndef OCTAVE_CONF_LLVM_LIBS
+#define OCTAVE_CONF_LLVM_LIBS %OCTAVE_CONF_LLVM_LIBS%
+#endif
+
 #ifndef OCTAVE_CONF_MKOCTFILE_DL_LDFLAGS
 #define OCTAVE_CONF_MKOCTFILE_DL_LDFLAGS %OCTAVE_CONF_MKOCTFILE_DL_LDFLAGS%
 #endif
@@ -452,6 +474,14 @@
 #define OCTAVE_CONF_QRUPDATE_LIBS %OCTAVE_CONF_QRUPDATE_LIBS%
 #endif
 
+#ifndef OCTAVE_CONF_QT_INCDIR
+#define OCTAVE_CONF_QT_INCDIR %OCTAVE_CONF_QT_INCDIR%
+#endif
+
+#ifndef OCTAVE_CONF_QT_LIBDIR
+#define OCTAVE_CONF_QT_LIBDIR %OCTAVE_CONF_QT_LIBDIR%
+#endif
+
 #ifndef OCTAVE_CONF_RANLIB
 #define OCTAVE_CONF_RANLIB %OCTAVE_CONF_RANLIB%
 #endif
new file mode 100644
--- /dev/null
+++ b/src/octave-value/module.mk
@@ -0,0 +1,129 @@
+EXTRA_DIST += \
+  octave-value/module.mk
+
+OV_INTTYPE_INCLUDES = \
+  octave-value/ov-base-int.h \
+  octave-value/ov-base-int.cc \
+  octave-value/ov-int-traits.h \
+  octave-value/ov-int16.h \
+  octave-value/ov-int32.h \
+  octave-value/ov-int64.h \
+  octave-value/ov-int8.h \
+  octave-value/ov-intx.h \
+  octave-value/ov-uint16.h \
+  octave-value/ov-uint32.h \
+  octave-value/ov-uint64.h \
+  octave-value/ov-uint8.h
+
+OV_SPARSE_INCLUDES = \
+  octave-value/ov-base-sparse.h \
+  octave-value/ov-bool-sparse.h \
+  octave-value/ov-cx-sparse.h \
+  octave-value/ov-re-sparse.h
+
+OV_INCLUDES = \
+  octave-value/ov-base-diag.h \
+  octave-value/ov-base-diag.cc \
+  octave-value/ov-base-mat.h \
+  octave-value/ov-base-mat.cc \
+  octave-value/ov-base-scalar.h \
+  octave-value/ov-base-scalar.cc \
+  octave-value/ov-base.h \
+  octave-value/ov-bool-mat.h \
+  octave-value/ov-bool-mat.cc \
+  octave-value/ov-bool.h \
+  octave-value/ov-builtin.h \
+  octave-value/ov-cell.h \
+  octave-value/ov-ch-mat.h \
+  octave-value/ov-class.h \
+  octave-value/ov-colon.h \
+  octave-value/ov-complex.h \
+  octave-value/ov-cs-list.h \
+  octave-value/ov-cx-diag.h \
+  octave-value/ov-cx-mat.h \
+  octave-value/ov-dld-fcn.h \
+  octave-value/ov-fcn-handle.h \
+  octave-value/ov-fcn-inline.h \
+  octave-value/ov-fcn.h \
+  octave-value/ov-float.h \
+  octave-value/ov-flt-complex.h \
+  octave-value/ov-flt-cx-diag.h \
+  octave-value/ov-flt-cx-mat.h \
+  octave-value/ov-flt-re-diag.h \
+  octave-value/ov-flt-re-mat.h \
+  octave-value/ov-lazy-idx.h \
+  octave-value/ov-mex-fcn.h \
+  octave-value/ov-null-mat.h \
+  octave-value/ov-oncleanup.h \
+  octave-value/ov-perm.h \
+  octave-value/ov-range.h \
+  octave-value/ov-re-diag.h \
+  octave-value/ov-re-mat.h \
+  octave-value/ov-scalar.h \
+  octave-value/ov-str-mat.h \
+  octave-value/ov-struct.h \
+  octave-value/ov-type-conv.h \
+  octave-value/ov-typeinfo.h \
+  octave-value/ov-usr-fcn.h \
+  octave-value/ov.h \
+  $(OV_INTTYPE_INCLUDES)
+
+OV_INTTYPE_SRC = \
+  octave-value/ov-int16.cc \
+  octave-value/ov-int32.cc \
+  octave-value/ov-int64.cc \
+  octave-value/ov-int8.cc \
+  octave-value/ov-uint16.cc \
+  octave-value/ov-uint32.cc \
+  octave-value/ov-uint64.cc \
+  octave-value/ov-uint8.cc
+
+OV_SPARSE_SRC = \
+  octave-value/ov-base-sparse.cc \
+  octave-value/ov-bool-sparse.cc \
+  octave-value/ov-cx-sparse.cc \
+  octave-value/ov-re-sparse.cc
+
+OCTAVE_VALUE_SRC = \
+  octave-value/ov-base.cc \
+  octave-value/ov-bool-mat.cc \
+  octave-value/ov-bool.cc \
+  octave-value/ov-builtin.cc \
+  octave-value/ov-cell.cc \
+  octave-value/ov-ch-mat.cc \
+  octave-value/ov-class.cc \
+  octave-value/ov-colon.cc \
+  octave-value/ov-complex.cc \
+  octave-value/ov-cs-list.cc \
+  octave-value/ov-cx-diag.cc \
+  octave-value/ov-cx-mat.cc \
+  octave-value/ov-dld-fcn.cc \
+  octave-value/ov-fcn-handle.cc \
+  octave-value/ov-fcn-inline.cc \
+  octave-value/ov-fcn.cc \
+  octave-value/ov-float.cc \
+  octave-value/ov-flt-complex.cc \
+  octave-value/ov-flt-cx-diag.cc \
+  octave-value/ov-flt-cx-mat.cc \
+  octave-value/ov-flt-re-diag.cc \
+  octave-value/ov-flt-re-mat.cc \
+  octave-value/ov-lazy-idx.cc \
+  octave-value/ov-mex-fcn.cc \
+  octave-value/ov-null-mat.cc \
+  octave-value/ov-oncleanup.cc \
+  octave-value/ov-perm.cc \
+  octave-value/ov-range.cc \
+  octave-value/ov-re-diag.cc \
+  octave-value/ov-re-mat.cc \
+  octave-value/ov-scalar.cc \
+  octave-value/ov-str-mat.cc \
+  octave-value/ov-struct.cc \
+  octave-value/ov-typeinfo.cc \
+  octave-value/ov-usr-fcn.cc \
+  octave-value/ov.cc \
+  $(OV_INTTYPE_SRC) \
+  $(OV_SPARSE_SRC)
+
+noinst_LTLIBRARIES += octave-value/liboctave-value.la
+
+octave_value_liboctave_value_la_SOURCES = $(OCTAVE_VALUE_SRC)
rename from src/ov-base-diag.cc
rename to src/octave-value/ov-base-diag.cc
--- a/src/ov-base-diag.cc
+++ b/src/octave-value/ov-base-diag.cc
@@ -29,6 +29,7 @@
 #include "mach-info.h"
 #include "lo-ieee.h"
 
+#include "mxarray.h"
 #include "ov-base.h"
 #include "ov-base-mat.h"
 #include "pr-output.h"
rename from src/ov-base-diag.h
rename to src/octave-value/ov-base-diag.h
rename from src/ov-base-int.cc
rename to src/octave-value/ov-base-int.cc
rename from src/ov-base-int.h
rename to src/octave-value/ov-base-int.h
rename from src/ov-base-mat.cc
rename to src/octave-value/ov-base-mat.cc
rename from src/ov-base-mat.h
rename to src/octave-value/ov-base-mat.h
rename from src/ov-base-scalar.cc
rename to src/octave-value/ov-base-scalar.cc
rename from src/ov-base-scalar.h
rename to src/octave-value/ov-base-scalar.h
rename from src/ov-base-sparse.cc
rename to src/octave-value/ov-base-sparse.cc
rename from src/ov-base-sparse.h
rename to src/octave-value/ov-base-sparse.h
rename from src/ov-base.cc
rename to src/octave-value/ov-base.cc
--- a/src/ov-base.cc
+++ b/src/octave-value/ov-base.cc
@@ -34,6 +34,7 @@
 
 #include "defun.h"
 #include "gripes.h"
+#include "mxarray.h"
 #include "oct-map.h"
 #include "oct-obj.h"
 #include "oct-lvalue.h"
rename from src/ov-base.h
rename to src/octave-value/ov-base.h
--- a/src/ov-base.h
+++ b/src/octave-value/ov-base.h
@@ -32,7 +32,6 @@
 
 #include "Range.h"
 #include "data-conv.h"
-#include "mxarray.h"
 #include "mx-base.h"
 #include "str-vec.h"
 
@@ -40,6 +39,7 @@
 #include "oct-hdf5.h"
 
 class Cell;
+class mxArray;
 class octave_map;
 class octave_scalar_map;
 class octave_value;
@@ -756,6 +756,21 @@
   virtual bool
   fast_elem_insert_self (void *where, builtin_type_t btyp) const;
 
+  // Grab the reference count. For use by jit.
+  void
+  grab (void)
+  {
+    ++count;
+  }
+
+  // Release the reference count. For use by jit.
+  void
+  release (void)
+  {
+    if (--count == 0)
+      delete this;
+  }
+
 protected:
 
   // This should only be called for derived types.
rename from src/ov-bool-mat.cc
rename to src/octave-value/ov-bool-mat.cc
--- a/src/ov-bool-mat.cc
+++ b/src/octave-value/ov-bool-mat.cc
@@ -34,6 +34,7 @@
 
 #include "defun.h"
 #include "gripes.h"
+#include "mxarray.h"
 #include "oct-obj.h"
 #include "ops.h"
 #include "ov-base.h"
rename from src/ov-bool-mat.h
rename to src/octave-value/ov-bool-mat.h
rename from src/ov-bool-sparse.cc
rename to src/octave-value/ov-bool-sparse.cc
--- a/src/ov-bool-sparse.cc
+++ b/src/octave-value/ov-bool-sparse.cc
@@ -30,6 +30,9 @@
 #include <iostream>
 #include <vector>
 
+#include "dim-vector.h"
+
+#include "mxarray.h"
 #include "ov-base.h"
 #include "ov-scalar.h"
 #include "ov-bool.h"
rename from src/ov-bool-sparse.h
rename to src/octave-value/ov-bool-sparse.h
rename from src/ov-bool.cc
rename to src/octave-value/ov-bool.cc
--- a/src/ov-bool.cc
+++ b/src/octave-value/ov-bool.cc
@@ -29,6 +29,7 @@
 #include "mx-base.h"
 
 #include "gripes.h"
+#include "mxarray.h"
 #include "oct-obj.h"
 #include "ops.h"
 #include "ov-bool.h"
rename from src/ov-bool.h
rename to src/octave-value/ov-bool.h
rename from src/ov-builtin.cc
rename to src/octave-value/ov-builtin.cc
--- a/src/ov-builtin.cc
+++ b/src/octave-value/ov-builtin.cc
@@ -152,5 +152,22 @@
   return retval;
 }
 
+jit_type *
+octave_builtin::to_jit (void) const
+{
+  return jtype;
+}
+
+void
+octave_builtin::stash_jit (jit_type &type)
+{
+  jtype = &type;
+}
+
+octave_builtin::fcn
+octave_builtin::function (void) const
+{
+  return f;
+}
 
 const std::list<octave_lvalue> *octave_builtin::curr_lvalue_list = 0;
rename from src/ov-builtin.h
rename to src/octave-value/ov-builtin.h
--- a/src/ov-builtin.h
+++ b/src/octave-value/ov-builtin.h
@@ -30,6 +30,7 @@
 
 class octave_value;
 class octave_value_list;
+class jit_type;
 
 // Builtin functions.
 
@@ -39,16 +40,22 @@
 {
 public:
 
-  octave_builtin (void) : octave_function (), f (0) { }
+  octave_builtin (void) : octave_function (), f (0), file (), jtype (0) { }
 
   typedef octave_value_list (*fcn) (const octave_value_list&, int);
 
   octave_builtin (fcn ff, const std::string& nm = std::string (),
                   const std::string& ds = std::string ())
-    : octave_function (nm, ds), f (ff) { }
+    : octave_function (nm, ds), f (ff), file (), jtype (0) { }
+
+  octave_builtin (fcn ff, const std::string& nm, const std::string& fnm,
+                  const std::string& ds)
+    : octave_function (nm, ds), f (ff), file (fnm), jtype (0) { }
 
   ~octave_builtin (void) { }
 
+  std::string src_file_name (void) const { return file; }
+
   octave_value subsref (const std::string& type,
                         const std::list<octave_value_list>& idx)
     {
@@ -75,6 +82,12 @@
   do_multi_index_op (int nargout, const octave_value_list& args,
                      const std::list<octave_lvalue>* lvalue_list);
 
+  jit_type *to_jit (void) const;
+
+  void stash_jit (jit_type& type);
+
+  fcn function (void) const;
+
   static const std::list<octave_lvalue> *curr_lvalue_list;
 
 protected:
@@ -82,6 +95,12 @@
   // A pointer to the actual function.
   fcn f;
 
+  // The name of the file where this function was defined.
+  std::string file;
+
+  // A pointer to the jit type that represents the function.
+  jit_type *jtype;
+
 private:
 
   // No copying!
rename from src/ov-cell.cc
rename to src/octave-value/ov-cell.cc
--- a/src/ov-cell.cc
+++ b/src/octave-value/ov-cell.cc
@@ -39,6 +39,7 @@
 
 #include "defun.h"
 #include "error.h"
+#include "mxarray.h"
 #include "ov-cell.h"
 #include "oct-obj.h"
 #include "unwind-prot.h"
rename from src/ov-cell.h
rename to src/octave-value/ov-cell.h
rename from src/ov-ch-mat.cc
rename to src/octave-value/ov-ch-mat.cc
--- a/src/ov-ch-mat.cc
+++ b/src/octave-value/ov-ch-mat.cc
@@ -31,6 +31,7 @@
 #include "lo-ieee.h"
 #include "mx-base.h"
 
+#include "mxarray.h"
 #include "ov-base.h"
 #include "ov-base-mat.h"
 #include "ov-base-mat.cc"
rename from src/ov-ch-mat.h
rename to src/octave-value/ov-ch-mat.h
rename from src/ov-class.cc
rename to src/octave-value/ov-class.cc
--- a/src/ov-class.cc
+++ b/src/octave-value/ov-class.cc
@@ -42,6 +42,7 @@
 #include "ls-oct-ascii.h"
 #include "ls-oct-binary.h"
 #include "ls-utils.h"
+#include "mxarray.h"
 #include "oct-lvalue.h"
 #include "ov-class.h"
 #include "ov-fcn.h"
@@ -1277,7 +1278,7 @@
       if ( val(0).is_object () )
         {
           dbgstr = "blork";
-          if( key == val(0).class_name () )
+          if ( key == val(0).class_name () )
             {
               might_have_inheritance = true;
               dbgstr = "cork";
rename from src/ov-class.h
rename to src/octave-value/ov-class.h
rename from src/ov-colon.cc
rename to src/octave-value/ov-colon.cc
rename from src/ov-colon.h
rename to src/octave-value/ov-colon.h
rename from src/ov-complex.cc
rename to src/octave-value/ov-complex.cc
--- a/src/ov-complex.cc
+++ b/src/octave-value/ov-complex.cc
@@ -30,6 +30,7 @@
 #include "lo-specfun.h"
 #include "lo-mappers.h"
 
+#include "mxarray.h"
 #include "oct-obj.h"
 #include "oct-stream.h"
 #include "ops.h"
rename from src/ov-complex.h
rename to src/octave-value/ov-complex.h
rename from src/ov-cs-list.cc
rename to src/octave-value/ov-cs-list.cc
rename from src/ov-cs-list.h
rename to src/octave-value/ov-cs-list.h
rename from src/ov-cx-diag.cc
rename to src/octave-value/ov-cx-diag.cc
rename from src/ov-cx-diag.h
rename to src/octave-value/ov-cx-diag.h
rename from src/ov-cx-mat.cc
rename to src/octave-value/ov-cx-mat.cc
--- a/src/ov-cx-mat.cc
+++ b/src/octave-value/ov-cx-mat.cc
@@ -37,6 +37,7 @@
 #include "oct-locbuf.h"
 
 #include "gripes.h"
+#include "mxarray.h"
 #include "oct-obj.h"
 #include "oct-stream.h"
 #include "ops.h"
rename from src/ov-cx-mat.h
rename to src/octave-value/ov-cx-mat.h
rename from src/ov-cx-sparse.cc
rename to src/octave-value/ov-cx-sparse.cc
--- a/src/ov-cx-sparse.cc
+++ b/src/octave-value/ov-cx-sparse.cc
@@ -34,6 +34,7 @@
 #include "lo-mappers.h"
 #include "oct-locbuf.h"
 
+#include "mxarray.h"
 #include "ov-base.h"
 #include "ov-scalar.h"
 #include "ov-complex.h"
rename from src/ov-cx-sparse.h
rename to src/octave-value/ov-cx-sparse.h
rename from src/ov-dld-fcn.cc
rename to src/octave-value/ov-dld-fcn.cc
rename from src/ov-dld-fcn.h
rename to src/octave-value/ov-dld-fcn.h
rename from src/ov-fcn-handle.cc
rename to src/octave-value/ov-fcn-handle.cc
rename from src/ov-fcn-handle.h
rename to src/octave-value/ov-fcn-handle.h
rename from src/ov-fcn-inline.cc
rename to src/octave-value/ov-fcn-inline.cc
rename from src/ov-fcn-inline.h
rename to src/octave-value/ov-fcn-inline.h
rename from src/ov-fcn.cc
rename to src/octave-value/ov-fcn.cc
rename from src/ov-fcn.h
rename to src/octave-value/ov-fcn.h
--- a/src/ov-fcn.h
+++ b/src/octave-value/ov-fcn.h
@@ -61,6 +61,8 @@
 
   virtual std::string fcn_file_name (void) const { return std::string (); }
 
+  virtual std::string src_file_name (void) const { return std::string (); }
+
   // The name to show in the profiler (also used as map-key).
   virtual std::string profiler_name (void) const { return name (); }
 
rename from src/ov-float.cc
rename to src/octave-value/ov-float.cc
--- a/src/ov-float.cc
+++ b/src/octave-value/ov-float.cc
@@ -33,6 +33,7 @@
 
 #include "defun.h"
 #include "gripes.h"
+#include "mxarray.h"
 #include "oct-obj.h"
 #include "oct-stream.h"
 #include "ov-scalar.h"
rename from src/ov-float.h
rename to src/octave-value/ov-float.h
rename from src/ov-flt-complex.cc
rename to src/octave-value/ov-flt-complex.cc
--- a/src/ov-flt-complex.cc
+++ b/src/octave-value/ov-flt-complex.cc
@@ -30,6 +30,7 @@
 #include "lo-specfun.h"
 #include "lo-mappers.h"
 
+#include "mxarray.h"
 #include "oct-obj.h"
 #include "oct-stream.h"
 #include "ops.h"
rename from src/ov-flt-complex.h
rename to src/octave-value/ov-flt-complex.h
rename from src/ov-flt-cx-diag.cc
rename to src/octave-value/ov-flt-cx-diag.cc
rename from src/ov-flt-cx-diag.h
rename to src/octave-value/ov-flt-cx-diag.h
rename from src/ov-flt-cx-mat.cc
rename to src/octave-value/ov-flt-cx-mat.cc
--- a/src/ov-flt-cx-mat.cc
+++ b/src/octave-value/ov-flt-cx-mat.cc
@@ -37,6 +37,7 @@
 #include "oct-locbuf.h"
 
 #include "gripes.h"
+#include "mxarray.h"
 #include "oct-obj.h"
 #include "oct-stream.h"
 #include "ops.h"
rename from src/ov-flt-cx-mat.h
rename to src/octave-value/ov-flt-cx-mat.h
rename from src/ov-flt-re-diag.cc
rename to src/octave-value/ov-flt-re-diag.cc
rename from src/ov-flt-re-diag.h
rename to src/octave-value/ov-flt-re-diag.h
rename from src/ov-flt-re-mat.cc
rename to src/octave-value/ov-flt-re-mat.cc
--- a/src/ov-flt-re-mat.cc
+++ b/src/octave-value/ov-flt-re-mat.cc
@@ -42,6 +42,7 @@
 
 #include "defun.h"
 #include "gripes.h"
+#include "mxarray.h"
 #include "oct-obj.h"
 #include "oct-lvalue.h"
 #include "oct-stream.h"
rename from src/ov-flt-re-mat.h
rename to src/octave-value/ov-flt-re-mat.h
rename from src/ov-int-traits.h
rename to src/octave-value/ov-int-traits.h
rename from src/ov-int16.cc
rename to src/octave-value/ov-int16.cc
rename from src/ov-int16.h
rename to src/octave-value/ov-int16.h
rename from src/ov-int32.cc
rename to src/octave-value/ov-int32.cc
rename from src/ov-int32.h
rename to src/octave-value/ov-int32.h
rename from src/ov-int64.cc
rename to src/octave-value/ov-int64.cc
rename from src/ov-int64.h
rename to src/octave-value/ov-int64.h
rename from src/ov-int8.cc
rename to src/octave-value/ov-int8.cc
rename from src/ov-int8.h
rename to src/octave-value/ov-int8.h
rename from src/ov-intx.h
rename to src/octave-value/ov-intx.h
--- a/src/ov-intx.h
+++ b/src/octave-value/ov-intx.h
@@ -31,6 +31,7 @@
 #include "str-vec.h"
 
 #include "error.h"
+#include "mxarray.h"
 #include "oct-stream.h"
 #include "ov-base.h"
 #include "ov-base-int.h"
rename from src/ov-lazy-idx.cc
rename to src/octave-value/ov-lazy-idx.cc
rename from src/ov-lazy-idx.h
rename to src/octave-value/ov-lazy-idx.h
rename from src/ov-mex-fcn.cc
rename to src/octave-value/ov-mex-fcn.cc
rename from src/ov-mex-fcn.h
rename to src/octave-value/ov-mex-fcn.h
rename from src/ov-null-mat.cc
rename to src/octave-value/ov-null-mat.cc
rename from src/ov-null-mat.h
rename to src/octave-value/ov-null-mat.h
rename from src/ov-oncleanup.cc
rename to src/octave-value/ov-oncleanup.cc
--- a/src/ov-oncleanup.cc
+++ b/src/octave-value/ov-oncleanup.cc
@@ -191,7 +191,7 @@
 
 DEFUN (onCleanup, args, ,
   "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {@var{c} =} onCleanup (@var{action})\n\
+@deftypefn {Built-in Function} {@var{c} =} onCleanup (@var{action})\n\
 Create a special object that executes a given function upon destruction.\n\
 If the object is copied to multiple variables (or cell or struct array\n\
 elements) or returned from a function, @var{action} will be executed after\n\
rename from src/ov-oncleanup.h
rename to src/octave-value/ov-oncleanup.h
rename from src/ov-perm.cc
rename to src/octave-value/ov-perm.cc
--- a/src/ov-perm.cc
+++ b/src/octave-value/ov-perm.cc
@@ -25,7 +25,9 @@
 #endif
 
 #include "byte-swap.h"
+#include "dim-vector.h"
 
+#include "mxarray.h"
 #include "ov-perm.h"
 #include "ov-re-mat.h"
 #include "ov-scalar.h"
rename from src/ov-perm.h
rename to src/octave-value/ov-perm.h
rename from src/ov-range.cc
rename to src/octave-value/ov-range.cc
--- a/src/ov-range.cc
+++ b/src/octave-value/ov-range.cc
@@ -32,6 +32,7 @@
 #include "defun.h"
 #include "variables.h"
 #include "gripes.h"
+#include "mxarray.h"
 #include "ops.h"
 #include "oct-obj.h"
 #include "ov-range.h"
rename from src/ov-range.h
rename to src/octave-value/ov-range.h
rename from src/ov-re-diag.cc
rename to src/octave-value/ov-re-diag.cc
rename from src/ov-re-diag.h
rename to src/octave-value/ov-re-diag.h
rename from src/ov-re-mat.cc
rename to src/octave-value/ov-re-mat.cc
--- a/src/ov-re-mat.cc
+++ b/src/octave-value/ov-re-mat.cc
@@ -42,6 +42,7 @@
 
 #include "defun.h"
 #include "gripes.h"
+#include "mxarray.h"
 #include "oct-obj.h"
 #include "oct-lvalue.h"
 #include "oct-stream.h"
rename from src/ov-re-mat.h
rename to src/octave-value/ov-re-mat.h
rename from src/ov-re-sparse.cc
rename to src/octave-value/ov-re-sparse.cc
--- a/src/ov-re-sparse.cc
+++ b/src/octave-value/ov-re-sparse.cc
@@ -34,6 +34,7 @@
 #include "lo-mappers.h"
 #include "oct-locbuf.h"
 
+#include "mxarray.h"
 #include "ov-base.h"
 #include "ov-scalar.h"
 #include "gripes.h"
rename from src/ov-re-sparse.h
rename to src/octave-value/ov-re-sparse.h
rename from src/ov-scalar.cc
rename to src/octave-value/ov-scalar.cc
--- a/src/ov-scalar.cc
+++ b/src/octave-value/ov-scalar.cc
@@ -33,6 +33,7 @@
 
 #include "defun.h"
 #include "gripes.h"
+#include "mxarray.h"
 #include "oct-obj.h"
 #include "oct-stream.h"
 #include "ov-scalar.h"
rename from src/ov-scalar.h
rename to src/octave-value/ov-scalar.h
rename from src/ov-str-mat.cc
rename to src/octave-value/ov-str-mat.cc
rename from src/ov-str-mat.h
rename to src/octave-value/ov-str-mat.h
rename from src/ov-struct.cc
rename to src/octave-value/ov-struct.cc
--- a/src/ov-struct.cc
+++ b/src/octave-value/ov-struct.cc
@@ -30,6 +30,7 @@
 #include "defun.h"
 #include "error.h"
 #include "gripes.h"
+#include "mxarray.h"
 #include "oct-lvalue.h"
 #include "ov-struct.h"
 #include "unwind-prot.h"
rename from src/ov-struct.h
rename to src/octave-value/ov-struct.h
rename from src/ov-type-conv.h
rename to src/octave-value/ov-type-conv.h
rename from src/ov-typeinfo.cc
rename to src/octave-value/ov-typeinfo.cc
rename from src/ov-typeinfo.h
rename to src/octave-value/ov-typeinfo.h
rename from src/ov-uint16.cc
rename to src/octave-value/ov-uint16.cc
rename from src/ov-uint16.h
rename to src/octave-value/ov-uint16.h
rename from src/ov-uint32.cc
rename to src/octave-value/ov-uint32.cc
rename from src/ov-uint32.h
rename to src/octave-value/ov-uint32.h
rename from src/ov-uint64.cc
rename to src/octave-value/ov-uint64.cc
rename from src/ov-uint64.h
rename to src/octave-value/ov-uint64.h
rename from src/ov-uint8.cc
rename to src/octave-value/ov-uint8.cc
rename from src/ov-uint8.h
rename to src/octave-value/ov-uint8.h
rename from src/ov-usr-fcn.cc
rename to src/octave-value/ov-usr-fcn.cc
rename from src/ov-usr-fcn.h
rename to src/octave-value/ov-usr-fcn.h
rename from src/ov.cc
rename to src/octave-value/ov.cc
--- a/src/ov.cc
+++ b/src/octave-value/ov.cc
@@ -483,6 +483,45 @@
   return retval;
 }
 
+octave_value::binary_op
+octave_value::assign_op_to_binary_op (assign_op op)
+{
+  switch (op)
+    {
+    case op_add_eq:
+      return op_add;
+    case op_sub_eq:
+      return op_sub;
+    case op_mul_eq:
+      return op_mul;
+    case op_div_eq:
+      return op_div;
+    case op_ldiv_eq:
+      return op_ldiv;
+    case op_pow_eq:
+      return op_pow;
+    case op_lshift_eq:
+      return op_lshift;
+    case op_rshift_eq:
+      return op_rshift;
+    case op_el_mul_eq:
+      return op_el_mul;
+    case op_el_div_eq:
+      return op_el_div;
+    case op_el_ldiv_eq:
+      return op_el_ldiv;
+    case op_el_pow_eq:
+      return op_el_pow;
+    case op_el_and_eq:
+      return op_el_and;
+    case op_el_or_eq:
+      return op_el_or;
+    default:
+      return unknown_binary_op;
+    }
+
+}
+
 octave_value::assign_op
 octave_value::binary_op_to_assign_op (binary_op op)
 {
rename from src/ov.h
rename to src/octave-value/ov.h
--- a/src/ov.h
+++ b/src/octave-value/ov.h
@@ -34,7 +34,6 @@
 #include "data-conv.h"
 #include "idx-vector.h"
 #include "mach-info.h"
-#include "mxarray.h"
 #include "mx-base.h"
 #include "oct-alloc.h"
 #include "oct-time.h"
@@ -44,6 +43,7 @@
 #include "oct-sort.h"
 
 class Cell;
+class mxArray;
 class octave_map;
 class octave_scalar_map;
 class Octave_map;
@@ -145,6 +145,8 @@
     unknown_assign_op
   };
 
+  static binary_op assign_op_to_binary_op (assign_op);
+
   static assign_op binary_op_to_assign_op (binary_op);
 
   static std::string unary_op_as_string (unary_op);
--- a/src/octave.cc
+++ b/src/octave.cc
@@ -56,6 +56,7 @@
 #include "lex.h"
 #include "load-path.h"
 #include "octave.h"
+#include "oct-conf.h"
 #include "oct-hist.h"
 #include "oct-map.h"
 #include "oct-mutex.h"
@@ -81,6 +82,10 @@
 
 extern void install_builtins (void);
 
+int octave_cmdline_argc;
+char **octave_cmdline_argv;
+int octave_embedded;
+
 // The command-line options.
 static string_vector octave_argv;
 
@@ -115,14 +120,23 @@
 // (--verbose; -V)
 static bool verbose_flag = false;
 
+// If TRUE, force the GUI to start.
+// (--force-gui)
+static bool force_gui_option = false;
+
+// If TRUE don't start the GUI.
+// (--no-gui)
+static bool no_gui_option = false;
+
 // Usage message
 static const char *usage_string =
   "octave [-HVdfhiqvx] [--debug] [--echo-commands] [--eval CODE]\n\
-       [--exec-path path] [--help] [--image-path path] [--info-file file]\n\
-       [--info-program prog] [--interactive] [--line-editing]\n\
-       [--no-history] [--no-init-file] [--no-init-path] [--no-line-editing]\n\
-       [--no-site-file] [--no-window-system] [-p path] [--path path]\n\
-       [--silent] [--traditional] [--verbose] [--version] [file]";
+       [--exec-path path] [--force-gui] [--help] [--image-path path]\n\
+       [--info-file file] [--info-program prog] [--interactive]\n\
+       [--line-editing] [--no-gui] [--no-history] [--no-init-file]\n\
+       [--no-init-path] [--no-line-editing] [--no-site-file]\n\
+       [--no-window-system] [-p path] [--path path] [--silent]\n\
+       [--traditional] [--verbose] [--version] [file]";
 
 // 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
@@ -140,18 +154,20 @@
 #define DOC_CACHE_FILE_OPTION 1
 #define EVAL_OPTION 2
 #define EXEC_PATH_OPTION 3
-#define IMAGE_PATH_OPTION 4
-#define INFO_FILE_OPTION 5
-#define INFO_PROG_OPTION 6
-#define LINE_EDITING_OPTION 7
-#define NO_INIT_FILE_OPTION 8
-#define NO_INIT_PATH_OPTION 9
-#define NO_LINE_EDITING_OPTION 10
-#define NO_SITE_FILE_OPTION 11
-#define NO_WINDOW_SYSTEM_OPTION 12
-#define PERSIST_OPTION 13
-#define TEXI_MACROS_FILE_OPTION 14
-#define TRADITIONAL_OPTION 15
+#define FORCE_GUI_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_OPTION 9
+#define NO_INIT_FILE_OPTION 10
+#define NO_INIT_PATH_OPTION 11
+#define NO_LINE_EDITING_OPTION 12
+#define NO_SITE_FILE_OPTION 13
+#define NO_WINDOW_SYSTEM_OPTION 14
+#define PERSIST_OPTION 15
+#define TEXI_MACROS_FILE_OPTION 16
+#define TRADITIONAL_OPTION 17
 struct option long_opts[] =
   {
     { "braindead",        no_argument,       0, TRADITIONAL_OPTION },
@@ -160,12 +176,14 @@
     { "echo-commands",    no_argument,       0, 'x' },
     { "eval",             required_argument, 0, EVAL_OPTION },
     { "exec-path",        required_argument, 0, EXEC_PATH_OPTION },
+    { "force-gui",        no_argument,       0, FORCE_GUI_OPTION },
     { "help",             no_argument,       0, 'h' },
     { "image-path",       required_argument, 0, IMAGE_PATH_OPTION },
     { "info-file",        required_argument, 0, INFO_FILE_OPTION },
     { "info-program",     required_argument, 0, INFO_PROG_OPTION },
     { "interactive",      no_argument,       0, 'i' },
     { "line-editing",     no_argument,       0, LINE_EDITING_OPTION },
+    { "no-gui",           no_argument,       0, NO_GUI_OPTION },
     { "no-history",       no_argument,       0, 'H' },
     { "no-init-file",     no_argument,       0, NO_INIT_FILE_OPTION },
     { "no-init-path",     no_argument,       0, NO_INIT_PATH_OPTION },
@@ -628,11 +646,27 @@
   disable_warning ("Octave:possible-matlab-short-circuit-operator");
 }
 
-// You guessed it.
+// EMBEDDED is declared int instead of bool because this function is
+// declared extern "C".
 
 int
 octave_main (int argc, char **argv, int embedded)
 {
+  octave_initialize_interpreter (argc, argv, embedded);
+
+  return octave_execute_interpreter ();
+}
+
+// EMBEDDED is declared int instead of bool because this function is
+// declared extern "C".
+
+void
+octave_initialize_interpreter (int argc, char **argv, int embedded)
+{
+  octave_cmdline_argc = argc;
+  octave_cmdline_argv = argv;
+  octave_embedded = embedded;
+
   octave_env::set_program_name (argv[0]);
 
   octave_program_invocation_name = octave_env::get_program_invocation_name ();
@@ -771,6 +805,10 @@
             set_exec_path (optarg);
           break;
 
+        case FORCE_GUI_OPTION:
+          force_gui_option = true;
+          break;
+
         case IMAGE_PATH_OPTION:
           if (optarg)
             set_image_path (optarg);
@@ -794,6 +832,10 @@
           read_init_files = false;
           break;
 
+        case NO_GUI_OPTION:
+          no_gui_option = true;
+          break;
+
         case NO_INIT_PATH_OPTION:
           set_initial_path = false;
           break;
@@ -833,6 +875,12 @@
         }
     }
 
+  if (force_gui_option && no_gui_option)
+    {
+      error ("error: only one of --force-gui and --no-gui may be used");
+      usage ();
+    }
+
   // Make sure we clean up when we exit.  Also allow users to register
   // functions.  If we don't have atexit or on_exit, we're going to
   // leave some junk files around if we exit abnormally.
@@ -862,9 +910,6 @@
   if (line_editing)
     initialize_command_input ();
 
-  if (! inhibit_startup_message)
-    std::cout << OCTAVE_STARTUP_MESSAGE "\n" << std::endl;
-
   if (traditional)
     maximum_braindamage ();
 
@@ -880,6 +925,13 @@
   load_path::initialize (set_initial_path);
 
   initialize_history (read_history_file);
+}
+
+int
+octave_execute_interpreter (void)
+{
+  if (! inhibit_startup_message)
+    std::cout << OCTAVE_STARTUP_MESSAGE "\n" << std::endl;
 
   execute_startup_files ();
 
@@ -892,7 +944,7 @@
 
   int last_arg_idx = optind;
 
-  int remaining_args = argc - last_arg_idx;
+  int remaining_args = octave_cmdline_argc - last_arg_idx;
 
   if (! code_to_eval.empty ())
     {
@@ -907,9 +959,9 @@
       // If we are running an executable script (#! /bin/octave) then
       // we should only see the args passed to the script.
 
-      intern_argv (remaining_args, argv+last_arg_idx);
+      intern_argv (remaining_args, octave_cmdline_argv+last_arg_idx);
 
-      execute_command_line_file (argv[last_arg_idx]);
+      execute_command_line_file (octave_cmdline_argv[last_arg_idx]);
 
       if (! persist)
         {
@@ -924,9 +976,9 @@
   command_editor::reset_current_command_number (1);
 
   // Now argv should have the full set of args.
-  intern_argv (argc, argv);
+  intern_argv (octave_cmdline_argc, octave_cmdline_argv);
 
-  if (! embedded)
+  if (! octave_embedded)
     switch_to_buffer (create_buffer (get_input_from_stdin ()));
 
   // Force input to be echoed if not really interactive, but the user
@@ -941,7 +993,7 @@
       bind_internal_variable ("echo_executing_commands", ECHO_CMD_LINE);
     }
 
-  if (embedded)
+  if (octave_embedded)
     {
       // FIXME -- do we need to do any cleanup here before
       // returning?  If we don't, what will happen to Octave functions
@@ -962,6 +1014,39 @@
   return 0;
 }
 
+// Return int instead of bool because this function is declared
+// extern "C".
+
+int
+octave_starting_gui (void)
+{
+  if (! display_info::display_available ())
+    return false;
+
+  if (force_gui_option)
+    return true;
+
+  if (no_gui_option)
+    return false;
+
+  if (persist)
+    return true;
+
+  if (! (interactive || forced_interactive))
+    return false;
+
+  // If we have code to eval or execute from a file, and we are going to
+  // exit immediately after executing it, don't start the gui.
+
+  int last_arg_idx = optind;
+  int remaining_args = octave_cmdline_argc - last_arg_idx;
+
+  if (! code_to_eval.empty () || remaining_args > 0)
+    return false;
+
+  return true;
+}
+
 DEFUN (argv, args, ,
   "-*- texinfo -*-\n\
 @deftypefn {Built-in Function} {} argv ()\n\
--- a/src/octave.h
+++ b/src/octave.h
@@ -29,6 +29,17 @@
 
 extern OCTINTERP_API int octave_main (int argc, char **argv, int embedded);
 
+extern OCTINTERP_API void
+octave_initialize_interpreter (int argc, char **argv, int embedded);
+
+extern OCTINTERP_API int octave_execute_interpreter (void);
+
+extern OCTINTERP_API int octave_cmdline_argc;
+extern OCTINTERP_API char **octave_cmdline_argv;
+extern OCTINTERP_API int octave_embedded;
+
+extern OCTINTERP_API int octave_starting_gui (void);
+
 #ifdef  __cplusplus
 }
 #endif
rename from src/OPERATORS/module.mk
rename to src/operators/module.mk
--- a/src/OPERATORS/module.mk
+++ b/src/operators/module.mk
@@ -1,136 +1,144 @@
-EXTRA_DIST += OPERATORS/module.mk
+EXTRA_DIST += operators/module.mk
 
 OPERATORS_SRC = \
-  OPERATORS/op-b-b.cc \
-  OPERATORS/op-b-bm.cc \
-  OPERATORS/op-b-sbm.cc \
-  OPERATORS/op-bm-b.cc \
-  OPERATORS/op-bm-bm.cc \
-  OPERATORS/op-bm-sbm.cc \
-  OPERATORS/op-cdm-cdm.cc \
-  OPERATORS/op-cdm-cm.cc \
-  OPERATORS/op-cdm-cs.cc \
-  OPERATORS/op-cdm-dm.cc \
-  OPERATORS/op-cdm-m.cc \
-  OPERATORS/op-cdm-s.cc \
-  OPERATORS/op-cell.cc \
-  OPERATORS/op-chm.cc \
-  OPERATORS/op-class.cc \
-  OPERATORS/op-cm-cdm.cc \
-  OPERATORS/op-cm-cm.cc \
-  OPERATORS/op-cm-cs.cc \
-  OPERATORS/op-cm-dm.cc \
-  OPERATORS/op-cm-m.cc \
-  OPERATORS/op-cm-pm.cc \
-  OPERATORS/op-cm-s.cc \
-  OPERATORS/op-cm-scm.cc \
-  OPERATORS/op-cm-sm.cc \
-  OPERATORS/op-cs-cm.cc \
-  OPERATORS/op-cs-cs.cc \
-  OPERATORS/op-cs-m.cc \
-  OPERATORS/op-cs-s.cc \
-  OPERATORS/op-cs-scm.cc \
-  OPERATORS/op-cs-sm.cc \
-  OPERATORS/op-dm-cdm.cc \
-  OPERATORS/op-dm-cm.cc \
-  OPERATORS/op-dm-cs.cc \
-  OPERATORS/op-dm-dm.cc \
-  OPERATORS/op-dm-m.cc \
-  OPERATORS/op-dm-s.cc \
-  OPERATORS/op-dm-scm.cc \
-  OPERATORS/op-dm-sm.cc \
-  OPERATORS/op-double-conv.cc \
-  OPERATORS/op-fcdm-fcdm.cc \
-  OPERATORS/op-fcdm-fcm.cc \
-  OPERATORS/op-fcdm-fcs.cc \
-  OPERATORS/op-fcdm-fdm.cc \
-  OPERATORS/op-fcdm-fm.cc \
-  OPERATORS/op-fcdm-fs.cc \
-  OPERATORS/op-fcm-fcdm.cc \
-  OPERATORS/op-fcm-fcm.cc \
-  OPERATORS/op-fcm-fcs.cc \
-  OPERATORS/op-fcm-fdm.cc \
-  OPERATORS/op-fcm-fm.cc \
-  OPERATORS/op-fcm-fs.cc \
-  OPERATORS/op-fcm-pm.cc \
-  OPERATORS/op-fcn.cc \
-  OPERATORS/op-fcs-fcm.cc \
-  OPERATORS/op-fcs-fcs.cc \
-  OPERATORS/op-fcs-fm.cc \
-  OPERATORS/op-fcs-fs.cc \
-  OPERATORS/op-fdm-fcdm.cc \
-  OPERATORS/op-fdm-fcm.cc \
-  OPERATORS/op-fdm-fcs.cc \
-  OPERATORS/op-fdm-fdm.cc \
-  OPERATORS/op-fdm-fm.cc \
-  OPERATORS/op-fdm-fs.cc \
-  OPERATORS/op-float-conv.cc \
-  OPERATORS/op-fm-fcdm.cc \
-  OPERATORS/op-fm-fcm.cc \
-  OPERATORS/op-fm-fcs.cc \
-  OPERATORS/op-fm-fdm.cc \
-  OPERATORS/op-fm-fm.cc \
-  OPERATORS/op-fm-fs.cc \
-  OPERATORS/op-fm-pm.cc \
-  OPERATORS/op-fs-fcm.cc \
-  OPERATORS/op-fs-fcs.cc \
-  OPERATORS/op-fs-fm.cc \
-  OPERATORS/op-fs-fs.cc \
-  OPERATORS/op-i16-i16.cc \
-  OPERATORS/op-i32-i32.cc \
-  OPERATORS/op-i64-i64.cc \
-  OPERATORS/op-i8-i8.cc \
-  OPERATORS/op-int-concat.cc \
-  OPERATORS/op-int-conv.cc \
-  OPERATORS/op-m-cdm.cc \
-  OPERATORS/op-m-cm.cc \
-  OPERATORS/op-m-cs.cc \
-  OPERATORS/op-m-dm.cc \
-  OPERATORS/op-m-m.cc \
-  OPERATORS/op-m-pm.cc \
-  OPERATORS/op-m-s.cc \
-  OPERATORS/op-m-scm.cc \
-  OPERATORS/op-m-sm.cc \
-  OPERATORS/op-pm-cm.cc \
-  OPERATORS/op-pm-fcm.cc \
-  OPERATORS/op-pm-fm.cc \
-  OPERATORS/op-pm-m.cc \
-  OPERATORS/op-pm-pm.cc \
-  OPERATORS/op-pm-scm.cc \
-  OPERATORS/op-pm-sm.cc \
-  OPERATORS/op-range.cc \
-  OPERATORS/op-s-cm.cc \
-  OPERATORS/op-s-cs.cc \
-  OPERATORS/op-s-m.cc \
-  OPERATORS/op-s-s.cc \
-  OPERATORS/op-s-scm.cc \
-  OPERATORS/op-s-sm.cc \
-  OPERATORS/op-sbm-b.cc \
-  OPERATORS/op-sbm-bm.cc \
-  OPERATORS/op-sbm-sbm.cc \
-  OPERATORS/op-scm-cm.cc \
-  OPERATORS/op-scm-cs.cc \
-  OPERATORS/op-scm-m.cc \
-  OPERATORS/op-scm-s.cc \
-  OPERATORS/op-scm-scm.cc \
-  OPERATORS/op-scm-sm.cc \
-  OPERATORS/op-sm-cm.cc \
-  OPERATORS/op-sm-cs.cc \
-  OPERATORS/op-sm-m.cc \
-  OPERATORS/op-sm-s.cc \
-  OPERATORS/op-sm-scm.cc \
-  OPERATORS/op-sm-sm.cc \
-  OPERATORS/op-str-m.cc \
-  OPERATORS/op-str-s.cc \
-  OPERATORS/op-str-str.cc \
-  OPERATORS/op-struct.cc \
-  OPERATORS/op-ui16-ui16.cc \
-  OPERATORS/op-ui32-ui32.cc \
-  OPERATORS/op-ui64-ui64.cc \
-  OPERATORS/op-ui8-ui8.cc
+  operators/op-b-b.cc \
+  operators/op-b-bm.cc \
+  operators/op-b-sbm.cc \
+  operators/op-bm-b.cc \
+  operators/op-bm-bm.cc \
+  operators/op-bm-sbm.cc \
+  operators/op-cdm-cdm.cc \
+  operators/op-cdm-cm.cc \
+  operators/op-cdm-cs.cc \
+  operators/op-cdm-dm.cc \
+  operators/op-cdm-m.cc \
+  operators/op-cdm-s.cc \
+  operators/op-cell.cc \
+  operators/op-chm.cc \
+  operators/op-class.cc \
+  operators/op-cm-cdm.cc \
+  operators/op-cm-cm.cc \
+  operators/op-cm-cs.cc \
+  operators/op-cm-dm.cc \
+  operators/op-cm-m.cc \
+  operators/op-cm-pm.cc \
+  operators/op-cm-s.cc \
+  operators/op-cm-scm.cc \
+  operators/op-cm-sm.cc \
+  operators/op-cs-cm.cc \
+  operators/op-cs-cs.cc \
+  operators/op-cs-m.cc \
+  operators/op-cs-s.cc \
+  operators/op-cs-scm.cc \
+  operators/op-cs-sm.cc \
+  operators/op-dm-cdm.cc \
+  operators/op-dm-cm.cc \
+  operators/op-dm-cs.cc \
+  operators/op-dm-dm.cc \
+  operators/op-dm-m.cc \
+  operators/op-dm-s.cc \
+  operators/op-dm-scm.cc \
+  operators/op-dm-sm.cc \
+  operators/op-double-conv.cc \
+  operators/op-fcdm-fcdm.cc \
+  operators/op-fcdm-fcm.cc \
+  operators/op-fcdm-fcs.cc \
+  operators/op-fcdm-fdm.cc \
+  operators/op-fcdm-fm.cc \
+  operators/op-fcdm-fs.cc \
+  operators/op-fcm-fcdm.cc \
+  operators/op-fcm-fcm.cc \
+  operators/op-fcm-fcs.cc \
+  operators/op-fcm-fdm.cc \
+  operators/op-fcm-fm.cc \
+  operators/op-fcm-fs.cc \
+  operators/op-fcm-pm.cc \
+  operators/op-fcn.cc \
+  operators/op-fcs-fcm.cc \
+  operators/op-fcs-fcs.cc \
+  operators/op-fcs-fm.cc \
+  operators/op-fcs-fs.cc \
+  operators/op-fdm-fcdm.cc \
+  operators/op-fdm-fcm.cc \
+  operators/op-fdm-fcs.cc \
+  operators/op-fdm-fdm.cc \
+  operators/op-fdm-fm.cc \
+  operators/op-fdm-fs.cc \
+  operators/op-float-conv.cc \
+  operators/op-fm-fcdm.cc \
+  operators/op-fm-fcm.cc \
+  operators/op-fm-fcs.cc \
+  operators/op-fm-fdm.cc \
+  operators/op-fm-fm.cc \
+  operators/op-fm-fs.cc \
+  operators/op-fm-pm.cc \
+  operators/op-fs-fcm.cc \
+  operators/op-fs-fcs.cc \
+  operators/op-fs-fm.cc \
+  operators/op-fs-fs.cc \
+  operators/op-i16-i16.cc \
+  operators/op-i32-i32.cc \
+  operators/op-i64-i64.cc \
+  operators/op-i8-i8.cc \
+  operators/op-int-concat.cc \
+  operators/op-int-conv.cc \
+  operators/op-m-cdm.cc \
+  operators/op-m-cm.cc \
+  operators/op-m-cs.cc \
+  operators/op-m-dm.cc \
+  operators/op-m-m.cc \
+  operators/op-m-pm.cc \
+  operators/op-m-s.cc \
+  operators/op-m-scm.cc \
+  operators/op-m-sm.cc \
+  operators/op-pm-cm.cc \
+  operators/op-pm-fcm.cc \
+  operators/op-pm-fm.cc \
+  operators/op-pm-m.cc \
+  operators/op-pm-pm.cc \
+  operators/op-pm-scm.cc \
+  operators/op-pm-sm.cc \
+  operators/op-range.cc \
+  operators/op-s-cm.cc \
+  operators/op-s-cs.cc \
+  operators/op-s-m.cc \
+  operators/op-s-s.cc \
+  operators/op-s-scm.cc \
+  operators/op-s-sm.cc \
+  operators/op-sbm-b.cc \
+  operators/op-sbm-bm.cc \
+  operators/op-sbm-sbm.cc \
+  operators/op-scm-cm.cc \
+  operators/op-scm-cs.cc \
+  operators/op-scm-m.cc \
+  operators/op-scm-s.cc \
+  operators/op-scm-scm.cc \
+  operators/op-scm-sm.cc \
+  operators/op-sm-cm.cc \
+  operators/op-sm-cs.cc \
+  operators/op-sm-m.cc \
+  operators/op-sm-s.cc \
+  operators/op-sm-scm.cc \
+  operators/op-sm-sm.cc \
+  operators/op-str-m.cc \
+  operators/op-str-s.cc \
+  operators/op-str-str.cc \
+  operators/op-struct.cc \
+  operators/op-ui16-ui16.cc \
+  operators/op-ui32-ui32.cc \
+  operators/op-ui64-ui64.cc \
+  operators/op-ui8-ui8.cc
 
-octinclude_HEADERS += \
-  OPERATORS/op-dm-template.cc \
-  OPERATORS/op-dms-template.cc \
-  OPERATORS/op-int.h \
-  OPERATORS/op-pm-template.cc
+## These look like included header files to Autotools build process
+OPERATOR_INCLUDES = \
+  operators/op-dm-template.cc \
+  operators/op-dms-template.cc \
+  operators/op-int.h \
+  operators/op-pm-template.cc \
+  operators/ops.h
+
+## Special rules for sources which must be built before rest of compilation.
+operators/ops.cc: $(OPERATORS_SRC) mkops
+	$(srcdir)/mkops $(OPERATORS_SRC) > $@-t
+	mv $@-t $@
+
rename from src/OPERATORS/op-b-b.cc
rename to src/operators/op-b-b.cc
rename from src/OPERATORS/op-b-bm.cc
rename to src/operators/op-b-bm.cc
rename from src/OPERATORS/op-b-sbm.cc
rename to src/operators/op-b-sbm.cc
rename from src/OPERATORS/op-bm-b.cc
rename to src/operators/op-bm-b.cc
rename from src/OPERATORS/op-bm-bm.cc
rename to src/operators/op-bm-bm.cc
rename from src/OPERATORS/op-bm-sbm.cc
rename to src/operators/op-bm-sbm.cc
rename from src/OPERATORS/op-cdm-cdm.cc
rename to src/operators/op-cdm-cdm.cc
rename from src/OPERATORS/op-cdm-cm.cc
rename to src/operators/op-cdm-cm.cc
rename from src/OPERATORS/op-cdm-cs.cc
rename to src/operators/op-cdm-cs.cc
rename from src/OPERATORS/op-cdm-dm.cc
rename to src/operators/op-cdm-dm.cc
rename from src/OPERATORS/op-cdm-m.cc
rename to src/operators/op-cdm-m.cc
rename from src/OPERATORS/op-cdm-s.cc
rename to src/operators/op-cdm-s.cc
rename from src/OPERATORS/op-cell.cc
rename to src/operators/op-cell.cc
rename from src/OPERATORS/op-chm.cc
rename to src/operators/op-chm.cc
rename from src/OPERATORS/op-class.cc
rename to src/operators/op-class.cc
rename from src/OPERATORS/op-cm-cdm.cc
rename to src/operators/op-cm-cdm.cc
rename from src/OPERATORS/op-cm-cm.cc
rename to src/operators/op-cm-cm.cc
rename from src/OPERATORS/op-cm-cs.cc
rename to src/operators/op-cm-cs.cc
rename from src/OPERATORS/op-cm-dm.cc
rename to src/operators/op-cm-dm.cc
rename from src/OPERATORS/op-cm-m.cc
rename to src/operators/op-cm-m.cc
rename from src/OPERATORS/op-cm-pm.cc
rename to src/operators/op-cm-pm.cc
rename from src/OPERATORS/op-cm-s.cc
rename to src/operators/op-cm-s.cc
rename from src/OPERATORS/op-cm-scm.cc
rename to src/operators/op-cm-scm.cc
rename from src/OPERATORS/op-cm-sm.cc
rename to src/operators/op-cm-sm.cc
rename from src/OPERATORS/op-cs-cm.cc
rename to src/operators/op-cs-cm.cc
rename from src/OPERATORS/op-cs-cs.cc
rename to src/operators/op-cs-cs.cc
rename from src/OPERATORS/op-cs-m.cc
rename to src/operators/op-cs-m.cc
rename from src/OPERATORS/op-cs-s.cc
rename to src/operators/op-cs-s.cc
rename from src/OPERATORS/op-cs-scm.cc
rename to src/operators/op-cs-scm.cc
rename from src/OPERATORS/op-cs-sm.cc
rename to src/operators/op-cs-sm.cc
rename from src/OPERATORS/op-dm-cdm.cc
rename to src/operators/op-dm-cdm.cc
rename from src/OPERATORS/op-dm-cm.cc
rename to src/operators/op-dm-cm.cc
rename from src/OPERATORS/op-dm-cs.cc
rename to src/operators/op-dm-cs.cc
rename from src/OPERATORS/op-dm-dm.cc
rename to src/operators/op-dm-dm.cc
rename from src/OPERATORS/op-dm-m.cc
rename to src/operators/op-dm-m.cc
rename from src/OPERATORS/op-dm-s.cc
rename to src/operators/op-dm-s.cc
rename from src/OPERATORS/op-dm-scm.cc
rename to src/operators/op-dm-scm.cc
rename from src/OPERATORS/op-dm-sm.cc
rename to src/operators/op-dm-sm.cc
rename from src/OPERATORS/op-dm-template.cc
rename to src/operators/op-dm-template.cc
rename from src/OPERATORS/op-dms-template.cc
rename to src/operators/op-dms-template.cc
rename from src/OPERATORS/op-double-conv.cc
rename to src/operators/op-double-conv.cc
rename from src/OPERATORS/op-fcdm-fcdm.cc
rename to src/operators/op-fcdm-fcdm.cc
rename from src/OPERATORS/op-fcdm-fcm.cc
rename to src/operators/op-fcdm-fcm.cc
rename from src/OPERATORS/op-fcdm-fcs.cc
rename to src/operators/op-fcdm-fcs.cc
rename from src/OPERATORS/op-fcdm-fdm.cc
rename to src/operators/op-fcdm-fdm.cc
rename from src/OPERATORS/op-fcdm-fm.cc
rename to src/operators/op-fcdm-fm.cc
rename from src/OPERATORS/op-fcdm-fs.cc
rename to src/operators/op-fcdm-fs.cc
rename from src/OPERATORS/op-fcm-fcdm.cc
rename to src/operators/op-fcm-fcdm.cc
rename from src/OPERATORS/op-fcm-fcm.cc
rename to src/operators/op-fcm-fcm.cc
rename from src/OPERATORS/op-fcm-fcs.cc
rename to src/operators/op-fcm-fcs.cc
rename from src/OPERATORS/op-fcm-fdm.cc
rename to src/operators/op-fcm-fdm.cc
rename from src/OPERATORS/op-fcm-fm.cc
rename to src/operators/op-fcm-fm.cc
rename from src/OPERATORS/op-fcm-fs.cc
rename to src/operators/op-fcm-fs.cc
rename from src/OPERATORS/op-fcm-pm.cc
rename to src/operators/op-fcm-pm.cc
rename from src/OPERATORS/op-fcn.cc
rename to src/operators/op-fcn.cc
rename from src/OPERATORS/op-fcs-fcm.cc
rename to src/operators/op-fcs-fcm.cc
rename from src/OPERATORS/op-fcs-fcs.cc
rename to src/operators/op-fcs-fcs.cc
rename from src/OPERATORS/op-fcs-fm.cc
rename to src/operators/op-fcs-fm.cc
rename from src/OPERATORS/op-fcs-fs.cc
rename to src/operators/op-fcs-fs.cc
rename from src/OPERATORS/op-fdm-fcdm.cc
rename to src/operators/op-fdm-fcdm.cc
rename from src/OPERATORS/op-fdm-fcm.cc
rename to src/operators/op-fdm-fcm.cc
rename from src/OPERATORS/op-fdm-fcs.cc
rename to src/operators/op-fdm-fcs.cc
rename from src/OPERATORS/op-fdm-fdm.cc
rename to src/operators/op-fdm-fdm.cc
rename from src/OPERATORS/op-fdm-fm.cc
rename to src/operators/op-fdm-fm.cc
rename from src/OPERATORS/op-fdm-fs.cc
rename to src/operators/op-fdm-fs.cc
rename from src/OPERATORS/op-float-conv.cc
rename to src/operators/op-float-conv.cc
rename from src/OPERATORS/op-fm-fcdm.cc
rename to src/operators/op-fm-fcdm.cc
rename from src/OPERATORS/op-fm-fcm.cc
rename to src/operators/op-fm-fcm.cc
rename from src/OPERATORS/op-fm-fcs.cc
rename to src/operators/op-fm-fcs.cc
rename from src/OPERATORS/op-fm-fdm.cc
rename to src/operators/op-fm-fdm.cc
rename from src/OPERATORS/op-fm-fm.cc
rename to src/operators/op-fm-fm.cc
rename from src/OPERATORS/op-fm-fs.cc
rename to src/operators/op-fm-fs.cc
rename from src/OPERATORS/op-fm-pm.cc
rename to src/operators/op-fm-pm.cc
rename from src/OPERATORS/op-fs-fcm.cc
rename to src/operators/op-fs-fcm.cc
rename from src/OPERATORS/op-fs-fcs.cc
rename to src/operators/op-fs-fcs.cc
rename from src/OPERATORS/op-fs-fm.cc
rename to src/operators/op-fs-fm.cc
rename from src/OPERATORS/op-fs-fs.cc
rename to src/operators/op-fs-fs.cc
rename from src/OPERATORS/op-i16-i16.cc
rename to src/operators/op-i16-i16.cc
rename from src/OPERATORS/op-i32-i32.cc
rename to src/operators/op-i32-i32.cc
rename from src/OPERATORS/op-i64-i64.cc
rename to src/operators/op-i64-i64.cc
rename from src/OPERATORS/op-i8-i8.cc
rename to src/operators/op-i8-i8.cc
rename from src/OPERATORS/op-int-concat.cc
rename to src/operators/op-int-concat.cc
rename from src/OPERATORS/op-int-conv.cc
rename to src/operators/op-int-conv.cc
rename from src/OPERATORS/op-int.h
rename to src/operators/op-int.h
rename from src/OPERATORS/op-m-cdm.cc
rename to src/operators/op-m-cdm.cc
rename from src/OPERATORS/op-m-cm.cc
rename to src/operators/op-m-cm.cc
rename from src/OPERATORS/op-m-cs.cc
rename to src/operators/op-m-cs.cc
rename from src/OPERATORS/op-m-dm.cc
rename to src/operators/op-m-dm.cc
rename from src/OPERATORS/op-m-m.cc
rename to src/operators/op-m-m.cc
rename from src/OPERATORS/op-m-pm.cc
rename to src/operators/op-m-pm.cc
rename from src/OPERATORS/op-m-s.cc
rename to src/operators/op-m-s.cc
rename from src/OPERATORS/op-m-scm.cc
rename to src/operators/op-m-scm.cc
rename from src/OPERATORS/op-m-sm.cc
rename to src/operators/op-m-sm.cc
rename from src/OPERATORS/op-pm-cm.cc
rename to src/operators/op-pm-cm.cc
rename from src/OPERATORS/op-pm-fcm.cc
rename to src/operators/op-pm-fcm.cc
rename from src/OPERATORS/op-pm-fm.cc
rename to src/operators/op-pm-fm.cc
rename from src/OPERATORS/op-pm-m.cc
rename to src/operators/op-pm-m.cc
rename from src/OPERATORS/op-pm-pm.cc
rename to src/operators/op-pm-pm.cc
rename from src/OPERATORS/op-pm-scm.cc
rename to src/operators/op-pm-scm.cc
rename from src/OPERATORS/op-pm-sm.cc
rename to src/operators/op-pm-sm.cc
rename from src/OPERATORS/op-pm-template.cc
rename to src/operators/op-pm-template.cc
rename from src/OPERATORS/op-range.cc
rename to src/operators/op-range.cc
rename from src/OPERATORS/op-s-cm.cc
rename to src/operators/op-s-cm.cc
rename from src/OPERATORS/op-s-cs.cc
rename to src/operators/op-s-cs.cc
rename from src/OPERATORS/op-s-m.cc
rename to src/operators/op-s-m.cc
rename from src/OPERATORS/op-s-s.cc
rename to src/operators/op-s-s.cc
rename from src/OPERATORS/op-s-scm.cc
rename to src/operators/op-s-scm.cc
rename from src/OPERATORS/op-s-sm.cc
rename to src/operators/op-s-sm.cc
rename from src/OPERATORS/op-sbm-b.cc
rename to src/operators/op-sbm-b.cc
rename from src/OPERATORS/op-sbm-bm.cc
rename to src/operators/op-sbm-bm.cc
rename from src/OPERATORS/op-sbm-sbm.cc
rename to src/operators/op-sbm-sbm.cc
rename from src/OPERATORS/op-scm-cm.cc
rename to src/operators/op-scm-cm.cc
rename from src/OPERATORS/op-scm-cs.cc
rename to src/operators/op-scm-cs.cc
rename from src/OPERATORS/op-scm-m.cc
rename to src/operators/op-scm-m.cc
rename from src/OPERATORS/op-scm-s.cc
rename to src/operators/op-scm-s.cc
rename from src/OPERATORS/op-scm-scm.cc
rename to src/operators/op-scm-scm.cc
rename from src/OPERATORS/op-scm-sm.cc
rename to src/operators/op-scm-sm.cc
rename from src/OPERATORS/op-sm-cm.cc
rename to src/operators/op-sm-cm.cc
rename from src/OPERATORS/op-sm-cs.cc
rename to src/operators/op-sm-cs.cc
rename from src/OPERATORS/op-sm-m.cc
rename to src/operators/op-sm-m.cc
rename from src/OPERATORS/op-sm-s.cc
rename to src/operators/op-sm-s.cc
rename from src/OPERATORS/op-sm-scm.cc
rename to src/operators/op-sm-scm.cc
rename from src/OPERATORS/op-sm-sm.cc
rename to src/operators/op-sm-sm.cc
rename from src/OPERATORS/op-str-m.cc
rename to src/operators/op-str-m.cc
rename from src/OPERATORS/op-str-s.cc
rename to src/operators/op-str-s.cc
rename from src/OPERATORS/op-str-str.cc
rename to src/operators/op-str-str.cc
rename from src/OPERATORS/op-struct.cc
rename to src/operators/op-struct.cc
rename from src/OPERATORS/op-ui16-ui16.cc
rename to src/operators/op-ui16-ui16.cc
rename from src/OPERATORS/op-ui32-ui32.cc
rename to src/operators/op-ui32-ui32.cc
rename from src/OPERATORS/op-ui64-ui64.cc
rename to src/operators/op-ui64-ui64.cc
rename from src/OPERATORS/op-ui8-ui8.cc
rename to src/operators/op-ui8-ui8.cc
rename from src/ops.h
rename to src/operators/ops.h
rename from src/lex.h
rename to src/parse-tree/lex.h
rename from src/lex.ll
rename to src/parse-tree/lex.ll
new file mode 100644
--- /dev/null
+++ b/src/parse-tree/module.mk
@@ -0,0 +1,93 @@
+EXTRA_DIST += \
+  parse-tree/module.mk \
+  parse-tree/octave.gperf
+
+PARSER_INCLUDES = \
+  parse-tree/lex.h \
+  parse-tree/parse.h \
+  parse-tree/parse-private.h
+
+PARSER_SRC = \
+  parse-tree/lex.ll \
+  parse-tree/oct-parse.yy
+
+lex.lo lex.o oct-parse.lo oct-parse.o: \
+  AM_CXXFLAGS := $(filter-out -Wold-style-cast, $(AM_CXXFLAGS))
+
+PT_INCLUDES = \
+  parse-tree/pt-all.h \
+  parse-tree/pt-arg-list.h \
+  parse-tree/pt-assign.h \
+  parse-tree/pt-binop.h \
+  parse-tree/pt-bp.h \
+  parse-tree/pt-cbinop.h \
+  parse-tree/pt-cell.h \
+  parse-tree/pt-check.h \
+  parse-tree/pt-cmd.h \
+  parse-tree/pt-colon.h \
+  parse-tree/pt-const.h \
+  parse-tree/pt-decl.h \
+  parse-tree/pt-eval.h \
+  parse-tree/pt-except.h \
+  parse-tree/pt-exp.h \
+  parse-tree/pt-fcn-handle.h \
+  parse-tree/pt-id.h \
+  parse-tree/pt-idx.h \
+  parse-tree/pt-jump.h \
+  parse-tree/pt-loop.h \
+  parse-tree/pt-mat.h \
+  parse-tree/pt-misc.h \
+  parse-tree/pt-pr-code.h \
+  parse-tree/pt-select.h \
+  parse-tree/pt-stmt.h \
+  parse-tree/pt-unop.h \
+  parse-tree/pt-walk.h \
+  parse-tree/pt.h \
+  parse-tree/token.h \
+  $(PARSER_INCLUDES)
+
+PARSE_TREE_SRC = \
+  parse-tree/pt-arg-list.cc \
+  parse-tree/pt-assign.cc \
+  parse-tree/pt-binop.cc \
+  parse-tree/pt-bp.cc \
+  parse-tree/pt-cbinop.cc \
+  parse-tree/pt-cell.cc \
+  parse-tree/pt-check.cc \
+  parse-tree/pt-cmd.cc \
+  parse-tree/pt-colon.cc \
+  parse-tree/pt-const.cc \
+  parse-tree/pt-decl.cc \
+  parse-tree/pt-eval.cc \
+  parse-tree/pt-except.cc \
+  parse-tree/pt-exp.cc \
+  parse-tree/pt-fcn-handle.cc \
+  parse-tree/pt-id.cc \
+  parse-tree/pt-idx.cc \
+  parse-tree/pt-jump.cc \
+  parse-tree/pt-loop.cc \
+  parse-tree/pt-mat.cc \
+  parse-tree/pt-misc.cc \
+  parse-tree/pt-pr-code.cc \
+  parse-tree/pt-select.cc \
+  parse-tree/pt-stmt.cc \
+  parse-tree/pt-unop.cc \
+  parse-tree/pt.cc \
+  parse-tree/token.cc \
+  $(PARSER_SRC)
+
+## Special rules for sources which must be built before rest of compilation.
+
+## Don't use a pipeline to process gperf output since if gperf
+## is missing but sed is not, the exit status of the pipeline
+## will still be success and we will end up creating an empty
+## oct-gperf.h file.
+parse-tree/oct-gperf.h: parse-tree/octave.gperf
+	$(GPERF) -t -C -D -G -L C++ -Z octave_kw_hash $< > $@-t1
+	$(SED) 's,lookup\[,gperf_lookup[,' < $@-t1 > $@-t
+	mv $@-t $@
+	rm -f $@-t1
+
+noinst_LTLIBRARIES += parse-tree/libparse-tree.la
+
+parse_tree_libparse_tree_la_SOURCES = $(PARSE_TREE_SRC)
rename from src/oct-parse.yy
rename to src/parse-tree/oct-parse.yy
rename from src/octave.gperf
rename to src/parse-tree/octave.gperf
rename from src/parse-private.h
rename to src/parse-tree/parse-private.h
rename from src/parse.h
rename to src/parse-tree/parse.h
rename from src/pt-all.h
rename to src/parse-tree/pt-all.h
rename from src/pt-arg-list.cc
rename to src/parse-tree/pt-arg-list.cc
rename from src/pt-arg-list.h
rename to src/parse-tree/pt-arg-list.h
rename from src/pt-assign.cc
rename to src/parse-tree/pt-assign.cc
rename from src/pt-assign.h
rename to src/parse-tree/pt-assign.h
rename from src/pt-binop.cc
rename to src/parse-tree/pt-binop.cc
rename from src/pt-binop.h
rename to src/parse-tree/pt-binop.h
rename from src/pt-bp.cc
rename to src/parse-tree/pt-bp.cc
rename from src/pt-bp.h
rename to src/parse-tree/pt-bp.h
rename from src/pt-cbinop.cc
rename to src/parse-tree/pt-cbinop.cc
rename from src/pt-cbinop.h
rename to src/parse-tree/pt-cbinop.h
rename from src/pt-cell.cc
rename to src/parse-tree/pt-cell.cc
rename from src/pt-cell.h
rename to src/parse-tree/pt-cell.h
rename from src/pt-check.cc
rename to src/parse-tree/pt-check.cc
rename from src/pt-check.h
rename to src/parse-tree/pt-check.h
rename from src/pt-cmd.cc
rename to src/parse-tree/pt-cmd.cc
rename from src/pt-cmd.h
rename to src/parse-tree/pt-cmd.h
rename from src/pt-colon.cc
rename to src/parse-tree/pt-colon.cc
rename from src/pt-colon.h
rename to src/parse-tree/pt-colon.h
rename from src/pt-const.cc
rename to src/parse-tree/pt-const.cc
rename from src/pt-const.h
rename to src/parse-tree/pt-const.h
rename from src/pt-decl.cc
rename to src/parse-tree/pt-decl.cc
rename from src/pt-decl.h
rename to src/parse-tree/pt-decl.h
rename from src/pt-eval.cc
rename to src/parse-tree/pt-eval.cc
--- a/src/pt-eval.cc
+++ b/src/parse-tree/pt-eval.cc
@@ -44,6 +44,12 @@
 #include "symtab.h"
 #include "unwind-prot.h"
 
+#if HAVE_LLVM
+//FIXME: This should be part of tree_evaluator
+#include "pt-jit.h"
+static tree_jit jiter;
+#endif
+
 static tree_evaluator std_evaluator;
 
 tree_evaluator *current_evaluator = &std_evaluator;
@@ -303,6 +309,11 @@
 
   octave_value rhs = expr->rvalue1 ();
 
+#if HAVE_LLVM
+  if (jiter.execute (cmd, rhs))
+    return;
+#endif
+
   if (error_state || rhs.is_undefined ())
     return;
 
@@ -1023,6 +1034,11 @@
   if (error_state)
     return;
 
+#if HAVE_LLVM
+  if (jiter.execute (cmd))
+    return;
+#endif
+
   unwind_protect frame;
 
   frame.protect_var (in_loop_command);
rename from src/pt-eval.h
rename to src/parse-tree/pt-eval.h
rename from src/pt-except.cc
rename to src/parse-tree/pt-except.cc
rename from src/pt-except.h
rename to src/parse-tree/pt-except.h
rename from src/pt-exp.cc
rename to src/parse-tree/pt-exp.cc
rename from src/pt-exp.h
rename to src/parse-tree/pt-exp.h
rename from src/pt-fcn-handle.cc
rename to src/parse-tree/pt-fcn-handle.cc
rename from src/pt-fcn-handle.h
rename to src/parse-tree/pt-fcn-handle.h
rename from src/pt-id.cc
rename to src/parse-tree/pt-id.cc
--- a/src/pt-id.cc
+++ b/src/parse-tree/pt-id.cc
@@ -65,7 +65,7 @@
   if (error_state)
     return retval;
 
-  octave_value val = xsym ().find ();
+  octave_value val = sym->find ();
 
   if (val.is_defined ())
     {
@@ -116,7 +116,7 @@
 octave_lvalue
 tree_identifier::lvalue (void)
 {
-  return octave_lvalue (&(xsym ().varref ()));
+  return octave_lvalue (&(sym->varref ()));
 }
 
 tree_identifier *
rename from src/pt-id.h
rename to src/parse-tree/pt-id.h
--- a/src/pt-id.h
+++ b/src/parse-tree/pt-id.h
@@ -46,12 +46,12 @@
 public:
 
   tree_identifier (int l = -1, int c = -1)
-    : tree_expression (l, c), sym (), scope (-1) { }
+    : tree_expression (l, c) { }
 
   tree_identifier (const symbol_table::symbol_record& s,
                    int l = -1, int c = -1,
                    symbol_table::scope_id sc = symbol_table::current_scope ())
-    : tree_expression (l, c), sym (s), scope (sc) { }
+    : tree_expression (l, c), sym (s, sc) { }
 
   ~tree_identifier (void) { }
 
@@ -63,9 +63,9 @@
   // accessing it through sym so that this function may remain const.
   std::string name (void) const { return sym.name (); }
 
-  bool is_defined (void) { return xsym ().is_defined (); }
+  bool is_defined (void) { return sym->is_defined (); }
 
-  virtual bool is_variable (void) { return xsym ().is_variable (); }
+  virtual bool is_variable (void) { return sym->is_variable (); }
 
   virtual bool is_black_hole (void) { return false; }
 
@@ -87,14 +87,14 @@
   octave_value
   do_lookup (const octave_value_list& args = octave_value_list ())
   {
-    return xsym ().find (args);
+    return sym->find (args);
   }
 
-  void mark_global (void) { xsym ().mark_global (); }
+  void mark_global (void) { sym->mark_global (); }
 
-  void mark_as_static (void) { xsym ().init_persistent (); }
+  void mark_as_static (void) { sym->init_persistent (); }
 
-  void mark_as_formal_parameter (void) { xsym ().mark_formal (); }
+  void mark_as_formal_parameter (void) { sym->mark_formal (); }
 
   // We really need to know whether this symbol referst to a variable
   // or a function, but we may not know that yet.
@@ -114,28 +114,14 @@
 
   void accept (tree_walker& tw);
 
+  symbol_table::symbol_reference symbol (void) const
+  {
+    return sym;
+  }
 private:
 
   // The symbol record that this identifier references.
-  symbol_table::symbol_record sym;
-
-  symbol_table::scope_id scope;
-
-  // A script may be executed in multiple scopes.  If the last one was
-  // different from the one we are in now, update sym to be from the
-  // new scope.
-  symbol_table::symbol_record& xsym (void)
-  {
-    symbol_table::scope_id curr_scope = symbol_table::current_scope ();
-
-    if (scope != curr_scope || ! sym.is_valid ())
-      {
-        scope = curr_scope;
-        sym = symbol_table::insert (sym.name ());
-      }
-
-    return sym;
-  }
+  symbol_table::symbol_reference sym;
 
   // No copying!
 
rename from src/pt-idx.cc
rename to src/parse-tree/pt-idx.cc
--- a/src/pt-idx.cc
+++ b/src/parse-tree/pt-idx.cc
@@ -532,7 +532,7 @@
                                  && (tmp.is_matrix_type () || tmp.is_string ()
                                      || tmp.is_cell ()));
 
-                if (i > 0 && type [i-1] == '(')
+                if (i > 0 && type[i-1] == '(')
                   {
                     octave_value_list pidx = idx.back ();
 
rename from src/pt-idx.h
rename to src/parse-tree/pt-idx.h
rename from src/pt-jump.cc
rename to src/parse-tree/pt-jump.cc
rename from src/pt-jump.h
rename to src/parse-tree/pt-jump.h
rename from src/pt-loop.cc
rename to src/parse-tree/pt-loop.cc
--- a/src/pt-loop.cc
+++ b/src/parse-tree/pt-loop.cc
@@ -35,6 +35,7 @@
 #include "pt-bp.h"
 #include "pt-cmd.h"
 #include "pt-exp.h"
+#include "pt-jit.h"
 #include "pt-jump.h"
 #include "pt-loop.h"
 #include "pt-stmt.h"
@@ -49,6 +50,9 @@
   delete list;
   delete lead_comm;
   delete trail_comm;
+#ifdef HAVE_LLVM
+  delete compiled;
+#endif
 }
 
 tree_command *
@@ -97,6 +101,9 @@
   delete list;
   delete lead_comm;
   delete trail_comm;
+#ifdef HAVE_LLVM
+  delete compiled;
+#endif
 }
 
 tree_command *
rename from src/pt-loop.h
rename to src/parse-tree/pt-loop.h
--- a/src/pt-loop.h
+++ b/src/parse-tree/pt-loop.h
@@ -36,6 +36,8 @@
 #include "pt-cmd.h"
 #include "symtab.h"
 
+class jit_info;
+
 // While.
 
 class
@@ -45,21 +47,33 @@
 
   tree_while_command (int l = -1, int c = -1)
     : tree_command (l, c), expr (0), list (0), lead_comm (0),
-      trail_comm (0) { }
+      trail_comm (0)
+#ifdef HAVE_LLVM
+    , compiled (0)
+#endif
+  { }
 
   tree_while_command (tree_expression *e,
                       octave_comment_list *lc = 0,
                       octave_comment_list *tc = 0,
                       int l = -1, int c = -1)
     : tree_command (l, c), expr (e), list (0), lead_comm (lc),
-      trail_comm (tc) { }
+      trail_comm (tc)
+#ifdef HAVE_LLVM
+    , compiled (0)
+#endif
+  { }
 
   tree_while_command (tree_expression *e, tree_statement_list *lst,
                       octave_comment_list *lc = 0,
                       octave_comment_list *tc = 0,
                       int l = -1, int c = -1)
     : tree_command (l, c), expr (e), list (lst), lead_comm (lc),
-      trail_comm (tc) { }
+      trail_comm (tc)
+#ifdef HAVE_LLVM
+    , compiled (0)
+#endif
+  { }
 
   ~tree_while_command (void);
 
@@ -76,6 +90,19 @@
 
   void accept (tree_walker& tw);
 
+#ifdef HAVE_LLVM
+  // some functions use by tree_jit
+  jit_info *get_info (void) const
+  {
+    return compiled;
+  }
+
+  void stash_info (jit_info *jinfo)
+  {
+    compiled = jinfo;
+  }
+#endif
+
 protected:
 
   // Expression to test.
@@ -92,6 +119,11 @@
 
 private:
 
+#ifdef HAVE_LLVM
+  // compiled version of the loop
+  jit_info *compiled;
+#endif
+
   // No copying!
 
   tree_while_command (const tree_while_command&);
@@ -146,7 +178,11 @@
 
   tree_simple_for_command (int l = -1, int c = -1)
     : tree_command (l, c), parallel (false), lhs (0), expr (0),
-      maxproc (0), list (0), lead_comm (0), trail_comm (0) { }
+      maxproc (0), list (0), lead_comm (0), trail_comm (0)
+#ifdef HAVE_LLVM
+    , compiled (0)
+#endif
+  { }
 
   tree_simple_for_command (bool parallel_arg, tree_expression *le,
                            tree_expression *re,
@@ -157,7 +193,11 @@
                            int l = -1, int c = -1)
     : tree_command (l, c), parallel (parallel_arg), lhs (le),
       expr (re), maxproc (maxproc_arg), list (lst),
-      lead_comm (lc), trail_comm (tc) { }
+      lead_comm (lc), trail_comm (tc)
+#ifdef HAVE_LLVM
+    , compiled (0)
+#endif
+  { }
 
   ~tree_simple_for_command (void);
 
@@ -180,8 +220,20 @@
 
   void accept (tree_walker& tw);
 
+#ifdef HAVE_LLVM
+  // some functions use by tree_jit
+  jit_info *get_info (void) const
+  {
+    return compiled;
+  }
+
+  void stash_info (jit_info *jinfo)
+  {
+    compiled = jinfo;
+  }
+#endif
+
 private:
-
   // TRUE means operate in parallel (subject to the value of the
   // maxproc expression).
   bool parallel;
@@ -205,6 +257,9 @@
   // Comment preceding ENDFOR token.
   octave_comment_list *trail_comm;
 
+  // compiled version of the loop
+  jit_info *compiled;
+
   // No copying!
 
   tree_simple_for_command (const tree_simple_for_command&);
rename from src/pt-mat.cc
rename to src/parse-tree/pt-mat.cc
rename from src/pt-mat.h
rename to src/parse-tree/pt-mat.h
rename from src/pt-misc.cc
rename to src/parse-tree/pt-misc.cc
rename from src/pt-misc.h
rename to src/parse-tree/pt-misc.h
rename from src/pt-pr-code.cc
rename to src/parse-tree/pt-pr-code.cc
rename from src/pt-pr-code.h
rename to src/parse-tree/pt-pr-code.h
rename from src/pt-select.cc
rename to src/parse-tree/pt-select.cc
rename from src/pt-select.h
rename to src/parse-tree/pt-select.h
rename from src/pt-stmt.cc
rename to src/parse-tree/pt-stmt.cc
rename from src/pt-stmt.h
rename to src/parse-tree/pt-stmt.h
--- a/src/pt-stmt.h
+++ b/src/parse-tree/pt-stmt.h
@@ -35,12 +35,13 @@
 #include "base-list.h"
 #include "comment-list.h"
 #include "symtab.h"
+#include "pt.h"
 
 // A statement is either a command to execute or an expression to
 // evaluate.
 
 class
-tree_statement
+tree_statement : public tree
 {
 public:
 
rename from src/pt-unop.cc
rename to src/parse-tree/pt-unop.cc
rename from src/pt-unop.h
rename to src/parse-tree/pt-unop.h
rename from src/pt-walk.h
rename to src/parse-tree/pt-walk.h
rename from src/pt.cc
rename to src/parse-tree/pt.cc
rename from src/pt.h
rename to src/parse-tree/pt.h
rename from src/token.cc
rename to src/parse-tree/token.cc
rename from src/token.h
rename to src/parse-tree/token.h
new file mode 100644
--- /dev/null
+++ b/src/template-inst/Array-jit.cc
@@ -0,0 +1,40 @@
+/*
+
+Copyright (C) 2012 Max Brister <max@2bass.com>
+
+This file is part of Octave.
+
+Octave is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3 of the License, or (at your
+option) any later version.
+
+Octave is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with Octave; see the file COPYING.  If not, see
+<http://www.gnu.org/licenses/>.
+
+*/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_LLVM
+
+#include "Array.h"
+#include "Array.cc"
+
+extern template class OCTAVE_API Array<octave_idx_type>;
+
+#include "pt-jit.h"
+
+NO_INSTANTIATE_ARRAY_SORT (jit_function);
+
+INSTANTIATE_ARRAY (jit_function, OCTINTERP_API);
+
+#endif
rename from src/TEMPLATE-INST/Array-os.cc
rename to src/template-inst/Array-os.cc
rename from src/TEMPLATE-INST/Array-sym.cc
rename to src/template-inst/Array-sym.cc
rename from src/TEMPLATE-INST/Array-tc.cc
rename to src/template-inst/Array-tc.cc
rename from src/TEMPLATE-INST/module.mk
rename to src/template-inst/module.mk
--- a/src/TEMPLATE-INST/module.mk
+++ b/src/template-inst/module.mk
@@ -1,5 +1,6 @@
-EXTRA_DIST += TEMPLATE-INST/module.mk
+EXTRA_DIST += template-inst/module.mk
 
 TEMPLATE_INST_SRC = \
-  TEMPLATE-INST/Array-os.cc \
-  TEMPLATE-INST/Array-tc.cc
+  template-inst/Array-os.cc \
+  template-inst/Array-tc.cc \
+  template-inst/Array-jit.cc
--- a/src/version.in.h
+++ b/src/version.in.h
@@ -1,3 +1,4 @@
+// %NO_EDIT_WARNING%
 /*
 
 Copyright (C) 1992-2012 John W. Eaton