changeset 22322:93b3cdd36854

move most f77 function decls to separate header files * liboctave/numeric/lo-amos-proto.h, liboctave/numeric/lo-arpack-proto.h, liboctave/numeric/lo-blas-proto.h, liboctave/numeric/lo-fftpack-proto.h, liboctave/numeric/lo-lapack-proto.h, liboctave/numeric/lo-qrupdate-proto.h, liboctave/numeric/lo-ranlib-proto.h, liboctave/numeric/lo-slatec-proto.h: New files. * liboctave/numeric/module.mk: Update. * __pchip_deriv__.cc, dot.cc, interpreter.cc, ordschur.cc, qz.cc, CColVector.cc, CMatrix.cc, CNDArray.cc, CRowVector.cc, CSparse.cc, dColVector.cc, dMatrix.cc, dNDArray.cc, dRowVector.cc, dSparse.cc, fCColVector.cc, fCMatrix.cc, fCNDArray.cc, fCRowVector.cc, fColVector.cc, fMatrix.cc, fNDArray.cc, fRowVector.cc, EIG.cc, aepbalance.cc, chol.cc, eigs-base.cc, fEIG.cc, gepbalance.cc, gsvd.cc, hess.cc, lo-specfun.cc, lu.cc, oct-rand.cc, qr.cc, qrp.cc, randpoisson.cc, schur.cc, sparse-qr.cc, svd.cc: Use new header files.
author John W. Eaton <jwe@octave.org>
date Wed, 17 Aug 2016 00:18:08 -0400
parents 3d18c22e6e3d
children bac0d6f07a3e
files libinterp/corefcn/__pchip_deriv__.cc libinterp/corefcn/dot.cc libinterp/corefcn/interpreter.cc libinterp/corefcn/ordschur.cc libinterp/corefcn/qz.cc liboctave/array/CColVector.cc liboctave/array/CMatrix.cc liboctave/array/CNDArray.cc liboctave/array/CRowVector.cc liboctave/array/CSparse.cc liboctave/array/dColVector.cc liboctave/array/dMatrix.cc liboctave/array/dNDArray.cc liboctave/array/dRowVector.cc liboctave/array/dSparse.cc liboctave/array/fCColVector.cc liboctave/array/fCMatrix.cc liboctave/array/fCNDArray.cc liboctave/array/fCRowVector.cc liboctave/array/fColVector.cc liboctave/array/fMatrix.cc liboctave/array/fNDArray.cc liboctave/array/fRowVector.cc liboctave/numeric/EIG.cc liboctave/numeric/aepbalance.cc liboctave/numeric/chol.cc liboctave/numeric/eigs-base.cc liboctave/numeric/fEIG.cc liboctave/numeric/gepbalance.cc liboctave/numeric/gsvd.cc liboctave/numeric/hess.cc liboctave/numeric/lo-amos-proto.h liboctave/numeric/lo-arpack-proto.h liboctave/numeric/lo-blas-proto.h liboctave/numeric/lo-fftpack-proto.h liboctave/numeric/lo-lapack-proto.h liboctave/numeric/lo-qrupdate-proto.h liboctave/numeric/lo-ranlib-proto.h liboctave/numeric/lo-slatec-proto.h liboctave/numeric/lo-specfun.cc liboctave/numeric/lu.cc liboctave/numeric/module.mk liboctave/numeric/oct-rand.cc liboctave/numeric/qr.cc liboctave/numeric/qrp.cc liboctave/numeric/randpoisson.cc liboctave/numeric/schur.cc liboctave/numeric/sparse-qr.cc liboctave/numeric/svd.cc
diffstat 49 files changed, 2831 insertions(+), 2986 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/corefcn/__pchip_deriv__.cc	Tue Aug 16 21:38:58 2016 -0700
+++ b/libinterp/corefcn/__pchip_deriv__.cc	Wed Aug 17 00:18:08 2016 -0400
@@ -25,6 +25,8 @@
 #  include "config.h"
 #endif
 
+#include "lo-slatec-proto.h"
+
 #include "defun.h"
 #include "error.h"
 #include "errwarn.h"
@@ -32,21 +34,6 @@
 #include "utils.h"
 #include "f77-fcn.h"
 
-extern "C"
-{
-  F77_RET_T
-  F77_FUNC (dpchim, DPCHIM) (const F77_INT& n, const F77_DBLE *x,
-                             const F77_DBLE *f, F77_DBLE *d,
-                             const F77_INT &incfd,
-                             F77_INT *ierr);
-
-  F77_RET_T
-  F77_FUNC (pchim, PCHIM) (const F77_INT& n, const F77_REAL *x,
-                           const F77_REAL *f, F77_REAL *d,
-                           const F77_INT& incfd,
-                           F77_INT *ierr);
-}
-
 // Wrapper for SLATEC/PCHIP function DPCHIM to calculate the derivates
 // for piecewise polynomials.
 
--- a/libinterp/corefcn/dot.cc	Tue Aug 16 21:38:58 2016 -0700
+++ b/libinterp/corefcn/dot.cc	Wed Aug 17 00:18:08 2016 -0400
@@ -24,56 +24,12 @@
 #  include "config.h"
 #endif
 
-#include "f77-fcn.h"
+#include "lo-blas-proto.h"
 #include "mx-base.h"
 #include "error.h"
 #include "defun.h"
 #include "parse.h"
 
-extern "C"
-{
-  F77_RET_T
-  F77_FUNC (ddot3, DDOT3) (const F77_INT&, const F77_INT&,
-                           const F77_INT&, const F77_DBLE*,
-                           const F77_DBLE*, F77_DBLE*);
-
-  F77_RET_T
-  F77_FUNC (sdot3, SDOT3) (const F77_INT&, const F77_INT&,
-                           const F77_INT&, const F77_REAL*,
-                           const F77_REAL*, F77_REAL*);
-
-  F77_RET_T
-  F77_FUNC (zdotc3, ZDOTC3) (const F77_INT&, const F77_INT&,
-                             const F77_INT&, const F77_DBLE_CMPLX*,
-                             const F77_DBLE_CMPLX*, F77_DBLE_CMPLX*);
-
-  F77_RET_T
-  F77_FUNC (cdotc3, CDOTC3) (const F77_INT&, const F77_INT&,
-                             const F77_INT&, const F77_CMPLX*,
-                             const F77_CMPLX*, F77_CMPLX*);
-
-  F77_RET_T
-  F77_FUNC (dmatm3, DMATM3) (const F77_INT&, const F77_INT&,
-                             const F77_INT&, const F77_INT&,
-                             const F77_DBLE*, const F77_DBLE*, F77_DBLE*);
-
-  F77_RET_T
-  F77_FUNC (smatm3, SMATM3) (const F77_INT&, const F77_INT&,
-                             const F77_INT&, const F77_INT&,
-                             const F77_REAL*, const F77_REAL*, F77_REAL*);
-
-  F77_RET_T
-  F77_FUNC (zmatm3, ZMATM3) (const F77_INT&, const F77_INT&,
-                             const F77_INT&, const F77_INT&,
-                             const F77_DBLE_CMPLX*, const F77_DBLE_CMPLX*, F77_DBLE_CMPLX*);
-
-  F77_RET_T
-  F77_FUNC (cmatm3, CMATM3) (const F77_INT&, const F77_INT&,
-                             const F77_INT&, const F77_INT&,
-                             const F77_CMPLX*, const F77_CMPLX*,
-                             F77_CMPLX*);
-}
-
 static void
 get_red_dims (const dim_vector& x, const dim_vector& y, int dim,
               dim_vector& z, octave_idx_type& m, octave_idx_type& n,
--- a/libinterp/corefcn/interpreter.cc	Tue Aug 16 21:38:58 2016 -0700
+++ b/libinterp/corefcn/interpreter.cc	Wed Aug 17 00:18:08 2016 -0400
@@ -28,10 +28,10 @@
 #include <iostream>
 
 #include "cmd-edit.h"
-#include "f77-fcn.h"
 #include "file-ops.h"
 #include "file-stat.h"
 #include "fpucw-wrappers.h"
+#include "lo-blas-proto.h"
 #include "lo-error.h"
 #include "oct-env.h"
 #include "str-vec.h"
@@ -81,14 +81,6 @@
 // TRUE means we've processed all the init code and we are good to go.
 bool octave_initialized = false;
 
-// Kluge.
-extern "C"
-{
-  F77_RET_T
-  F77_FUNC (xerbla, XERBLA) (F77_CONST_CHAR_ARG_DECL, const F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-}
-
 DEFUN (__version_info__, args, ,
        doc: /* -*- texinfo -*-
 @deftypefn {} {retval =} __version_info__ (@var{name}, @var{version}, @var{release}, @var{date})
--- a/libinterp/corefcn/ordschur.cc	Tue Aug 16 21:38:58 2016 -0700
+++ b/libinterp/corefcn/ordschur.cc	Wed Aug 17 00:18:08 2016 -0400
@@ -26,41 +26,8 @@
 
 #include "defun.h"
 #include "error.h"
+#include "lo-lapack-proto.h"
 #include "ovl.h"
-#include "f77-fcn.h"
-
-extern "C"
-{
-  F77_RET_T
-  F77_FUNC (dtrsen, DTRSEN) (F77_CONST_CHAR_ARG_DECL, F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT*, const F77_INT&,
-                             F77_DBLE*, const F77_INT&, F77_DBLE*, const F77_INT&,
-                             F77_DBLE*, F77_DBLE*, F77_INT&, F77_DBLE&, F77_DBLE&, F77_DBLE*,
-                             const F77_INT&, F77_INT*,
-                             const F77_INT&, F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (ztrsen, ZTRSEN) (F77_CONST_CHAR_ARG_DECL, F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT*, const F77_INT&,
-                             F77_DBLE_CMPLX*, const F77_INT&, F77_DBLE_CMPLX*, const F77_INT&,
-                             F77_DBLE_CMPLX*, F77_INT&, F77_DBLE&, F77_DBLE&, F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_INT &);
-
-  F77_RET_T
-  F77_FUNC (strsen, STRSEN) (F77_CONST_CHAR_ARG_DECL, F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT*, const F77_INT&,
-                             F77_REAL*, const F77_INT&, F77_REAL*, const F77_INT&,
-                             F77_REAL*, F77_REAL*, F77_INT&, F77_REAL&, F77_REAL&, F77_REAL*,
-                             const F77_INT&, F77_INT*,
-                             const F77_INT&, F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (ctrsen, CTRSEN) (F77_CONST_CHAR_ARG_DECL, F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT*, const F77_INT&,
-                             F77_CMPLX*, const F77_INT&, F77_CMPLX*, const F77_INT&,
-                             F77_CMPLX*, F77_INT&, F77_REAL&, F77_REAL&, F77_CMPLX*,
-                             const F77_INT&, F77_INT &);
-}
 
 DEFUN (ordschur, args, ,
        doc: /* -*- texinfo -*-
--- a/libinterp/corefcn/qz.cc	Tue Aug 16 21:38:58 2016 -0700
+++ b/libinterp/corefcn/qz.cc	Wed Aug 17 00:18:08 2016 -0400
@@ -38,6 +38,7 @@
 #include <iomanip>
 
 #include "f77-fcn.h"
+#include "lo-lapack-proto.h"
 #include "lo-math.h"
 #include "qr.h"
 #include "quit.h"
@@ -63,119 +64,6 @@
 
 extern "C"
 {
-  F77_RET_T
-  F77_FUNC (dggbal, DGGBAL) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT& N, F77_DBLE* A,
-                             const F77_INT& LDA, F77_DBLE* B,
-                             const F77_INT& LDB, F77_INT& ILO,
-                             F77_INT& IHI, F77_DBLE* LSCALE,
-                             F77_DBLE* RSCALE, F77_DBLE* WORK,
-                             F77_INT& INFO
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (zggbal, ZGGBAL) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT& N, F77_DBLE_CMPLX* A,
-                             const F77_INT& LDA, F77_DBLE_CMPLX* B,
-                             const F77_INT& LDB, F77_INT& ILO,
-                             F77_INT& IHI, F77_DBLE* LSCALE,
-                             F77_DBLE* RSCALE, F77_DBLE* WORK,
-                             F77_INT& INFO
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (dggbak, DGGBAK) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT& N,
-                             const F77_INT& ILO,
-                             const F77_INT& IHI,
-                             const F77_DBLE* LSCALE, const F77_DBLE* RSCALE,
-                             F77_INT& M, F77_DBLE* V,
-                             const F77_INT& LDV, F77_INT& INFO
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (zggbak, ZGGBAK) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT& N,
-                             const F77_INT& ILO,
-                             const F77_INT& IHI,
-                             const F77_DBLE* LSCALE, const F77_DBLE* RSCALE,
-                             F77_INT& M, F77_DBLE_CMPLX* V,
-                             const F77_INT& LDV, F77_INT& INFO
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (dgghrd, DGGHRD) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT& N,
-                             const F77_INT& ILO,
-                             const F77_INT& IHI, F77_DBLE* A,
-                             const F77_INT& LDA, F77_DBLE* B,
-                             const F77_INT& LDB, F77_DBLE* Q,
-                             const F77_INT& LDQ, F77_DBLE* Z,
-                             const F77_INT& LDZ, F77_INT& INFO
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (zgghrd, ZGGHRD) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT& N,
-                             const F77_INT& ILO,
-                             const F77_INT& IHI, F77_DBLE_CMPLX* A,
-                             const F77_INT& LDA, F77_DBLE_CMPLX* B,
-                             const F77_INT& LDB, F77_DBLE_CMPLX* Q,
-                             const F77_INT& LDQ, F77_DBLE_CMPLX* Z,
-                             const F77_INT& LDZ, F77_INT& INFO
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (dhgeqz, DHGEQZ) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT& N,
-                             const F77_INT& ILO,
-                             const F77_INT& IHI,
-                             F77_DBLE* A, const F77_INT& LDA, F77_DBLE* B,
-                             const F77_INT& LDB, F77_DBLE* ALPHAR,
-                             F77_DBLE* ALPHAI, F77_DBLE* BETA, F77_DBLE* Q,
-                             const F77_INT& LDQ, F77_DBLE* Z,
-                             const F77_INT& LDZ, F77_DBLE* WORK,
-                             const F77_INT& LWORK,
-                             F77_INT& INFO
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (zhgeqz, ZHGEQZ) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT& N,
-                             const F77_INT& ILO,
-                             const F77_INT& IHI,
-                             F77_DBLE_CMPLX* A, const F77_INT& LDA,
-                             F77_DBLE_CMPLX* B, const F77_INT& LDB,
-                             F77_DBLE_CMPLX* ALPHA, F77_DBLE_CMPLX* BETA, F77_DBLE_CMPLX* CQ,
-                             const F77_INT& LDQ,
-                             F77_DBLE_CMPLX* CZ, const F77_INT& LDZ,
-                             F77_DBLE_CMPLX* WORK, const F77_INT& LWORK,
-                             F77_DBLE* RWORK, F77_INT& INFO
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (dlag2, DLAG2) (const F77_DBLE* A, const F77_INT& LDA,
-                           const F77_DBLE* B, const F77_INT& LDB,
-                           const F77_DBLE& SAFMIN, F77_DBLE& SCALE1,
-                           F77_DBLE& SCALE2, F77_DBLE& WR1, F77_DBLE& WR2,
-                           F77_DBLE& WI);
-
   // Van Dooren's code (netlib.org: toms/590) for reordering
   // GEP.  Only processes Z, not Q.
   F77_RET_T
@@ -184,50 +72,6 @@
                              F77_DBLE* B, F77_DBLE* Z, sort_function,
                              const F77_DBLE& EPS, F77_INT& NDIM,
                              F77_INT& FAIL, F77_INT* IND);
-
-  // Documentation for DTGEVC incorrectly states that VR, VL are
-  // complex*16; they are declared in DTGEVC as double precision
-  // (probably a cut and paste problem fro ZTGEVC).
-  F77_RET_T
-  F77_FUNC (dtgevc, DTGEVC) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             F77_INT* SELECT,
-                             const F77_INT& N, F77_DBLE* A,
-                             const F77_INT& LDA, F77_DBLE* B,
-                             const F77_INT& LDB, F77_DBLE* VL,
-                             const F77_INT& LDVL, F77_DBLE* VR,
-                             const F77_INT& LDVR,
-                             const F77_INT& MM, F77_INT& M,
-                             F77_DBLE* WORK, F77_INT& INFO
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (ztgevc, ZTGEVC) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             F77_INT* SELECT,
-                             const F77_INT& N, const F77_DBLE_CMPLX* A,
-                             const F77_INT& LDA,const F77_DBLE_CMPLX* B,
-                             const F77_INT& LDB, F77_DBLE_CMPLX* xVL,
-                             const F77_INT& LDVL, F77_DBLE_CMPLX* xVR,
-                             const F77_INT& LDVR,
-                             const F77_INT& MM, F77_INT& M,
-                             F77_DBLE_CMPLX* CWORK, F77_DBLE* RWORK,
-                             F77_INT& INFO
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (xdlamch, XDLAMCH) (F77_CONST_CHAR_ARG_DECL,
-                               F77_DBLE& retval
-                               F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (xdlange, XDLANGE) (F77_CONST_CHAR_ARG_DECL,
-                               const F77_INT&,
-                               const F77_INT&, const F77_DBLE*,
-                               const F77_INT&, F77_DBLE*, F77_DBLE&
-                               F77_CHAR_ARG_LEN_DECL);
 }
 
 // fcrhp, fin, fout, folhp:
--- a/liboctave/array/CColVector.cc	Tue Aug 16 21:38:58 2016 -0700
+++ b/liboctave/array/CColVector.cc	Wed Aug 17 00:18:08 2016 -0400
@@ -29,27 +29,13 @@
 #include <iostream>
 
 #include "Array-util.h"
-#include "f77-fcn.h"
 #include "functor.h"
+#include "lo-blas-proto.h"
 #include "lo-error.h"
 #include "mx-base.h"
 #include "mx-inlines.cc"
 #include "oct-cmplx.h"
 
-// Fortran functions we call.
-
-extern "C"
-{
-  F77_RET_T
-  F77_FUNC (zgemv, ZGEMV) (F77_CONST_CHAR_ARG_DECL,
-                           const F77_INT&, const F77_INT&,
-                           const F77_DBLE_CMPLX&, const F77_DBLE_CMPLX*,
-                           const F77_INT&, const F77_DBLE_CMPLX*,
-                           const F77_INT&, const F77_DBLE_CMPLX&,
-                           F77_DBLE_CMPLX*, const F77_INT&
-                           F77_CHAR_ARG_LEN_DECL);
-}
-
 // Complex Column Vector class
 
 ComplexColumnVector::ComplexColumnVector (const ColumnVector& a)
--- a/liboctave/array/CMatrix.cc	Tue Aug 16 21:38:58 2016 -0700
+++ b/liboctave/array/CMatrix.cc	Wed Aug 17 00:18:08 2016 -0400
@@ -49,10 +49,11 @@
 #include "schur.h"
 #include "svd.h"
 #include "DET.h"
-#include "f77-fcn.h"
 #include "functor.h"
+#include "lo-blas-proto.h"
 #include "lo-error.h"
 #include "lo-ieee.h"
+#include "lo-lapack-proto.h"
 #include "lo-mappers.h"
 #include "lo-utils.h"
 #include "mx-cm-dm.h"
@@ -65,204 +66,6 @@
 #include "oct-locbuf.h"
 #include "oct-norm.h"
 
-// Fortran functions we call.
-
-extern "C"
-{
-  F77_RET_T
-  F77_FUNC (xilaenv, XILAENV) (const F77_INT&,
-                               F77_CONST_CHAR_ARG_DECL,
-                               F77_CONST_CHAR_ARG_DECL,
-                               const F77_INT&, const F77_INT&,
-                               const F77_INT&, const F77_INT&,
-                               F77_INT&
-                               F77_CHAR_ARG_LEN_DECL
-                               F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (zgebal, ZGEBAL) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_INT&,
-                             F77_INT&, F77_DBLE*, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (dgebak, DGEBAK) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_DBLE*,
-                             const F77_INT&, F77_DBLE*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (zgemm, ZGEMM) (F77_CONST_CHAR_ARG_DECL,
-                           F77_CONST_CHAR_ARG_DECL,
-                           const F77_INT&, const F77_INT&,
-                           const F77_INT&, const F77_DBLE_CMPLX&,
-                           const F77_DBLE_CMPLX*, const F77_INT&,
-                           const F77_DBLE_CMPLX*, const F77_INT&,
-                           const F77_DBLE_CMPLX&, F77_DBLE_CMPLX*, const F77_INT&
-                           F77_CHAR_ARG_LEN_DECL
-                           F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (zgemv, ZGEMV) (F77_CONST_CHAR_ARG_DECL,
-                           const F77_INT&, const F77_INT&,
-                           const F77_DBLE_CMPLX&, const F77_DBLE_CMPLX*,
-                           const F77_INT&, const F77_DBLE_CMPLX*,
-                           const F77_INT&, const F77_DBLE_CMPLX&,
-                           F77_DBLE_CMPLX*, const F77_INT&
-                           F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (xzdotu, XZDOTU) (const F77_INT&, const F77_DBLE_CMPLX*,
-                             const F77_INT&, const F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_DBLE_CMPLX*);
-
-  F77_RET_T
-  F77_FUNC (xzdotc, XZDOTC) (const F77_INT&, const F77_DBLE_CMPLX*,
-                             const F77_INT&, const F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_DBLE_CMPLX*);
-
-  F77_RET_T
-  F77_FUNC (zsyrk, ZSYRK) (F77_CONST_CHAR_ARG_DECL,
-                           F77_CONST_CHAR_ARG_DECL,
-                           const F77_INT&, const F77_INT&,
-                           const F77_DBLE_CMPLX&, const F77_DBLE_CMPLX*,
-                           const F77_INT&, const F77_DBLE_CMPLX&,
-                           F77_DBLE_CMPLX*, const F77_INT&
-                           F77_CHAR_ARG_LEN_DECL
-                           F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (zherk, ZHERK) (F77_CONST_CHAR_ARG_DECL,
-                           F77_CONST_CHAR_ARG_DECL,
-                           const F77_INT&, const F77_INT&,
-                           const F77_DBLE&, const F77_DBLE_CMPLX*,
-                           const F77_INT&, const F77_DBLE&, F77_DBLE_CMPLX*,
-                           const F77_INT&
-                           F77_CHAR_ARG_LEN_DECL
-                           F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (zgetrf, ZGETRF) (const F77_INT&, const F77_INT&,
-                             F77_DBLE_CMPLX*, const F77_INT&,
-                             F77_INT*, F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (zgetrs, ZGETRS) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_INT&,
-                             F77_DBLE_CMPLX*, const F77_INT&,
-                             const F77_INT*, F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (zgetri, ZGETRI) (const F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, const F77_INT*,
-                             F77_DBLE_CMPLX*, const F77_INT&,
-                             F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (zgecon, ZGECON) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, const F77_DBLE&, F77_DBLE&,
-                             F77_DBLE_CMPLX*, F77_DBLE*, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (zgelsy, ZGELSY) (const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_INT*,
-                             F77_DBLE&, F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_DBLE*,
-                             F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (zgelsd, ZGELSD) (const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_DBLE*, F77_DBLE&,
-                             F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_DBLE*,
-                             F77_INT*, F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (zpotrf, ZPOTRF) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (zpocon, ZPOCON) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, const F77_DBLE&,
-                             F77_DBLE&, F77_DBLE_CMPLX*, F77_DBLE*, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (zpotrs, ZPOTRS) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_INT&,
-                             const F77_DBLE_CMPLX*, const F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (ztrtri, ZTRTRI) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (ztrcon, ZTRCON) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_DBLE&,
-                             F77_DBLE_CMPLX*, F77_DBLE*, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (ztrtrs, ZTRTRS) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_INT&,
-                             const F77_DBLE_CMPLX*, const F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (zlartg, ZLARTG) (const F77_DBLE_CMPLX*, const F77_DBLE_CMPLX*, F77_DBLE&,
-                             F77_DBLE_CMPLX*, F77_DBLE_CMPLX*);
-
-  F77_RET_T
-  F77_FUNC (ztrsyl, ZTRSYL) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_INT&,
-                             const F77_INT&, const F77_DBLE_CMPLX*,
-                             const F77_INT&, const F77_DBLE_CMPLX*,
-                             const F77_INT&, const F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_DBLE&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (xzlange, XZLANGE) (F77_CONST_CHAR_ARG_DECL,
-                               const F77_INT&, const F77_INT&,
-                               const F77_DBLE_CMPLX*, const F77_INT&,
-                               F77_DBLE*, F77_DBLE&
-                               F77_CHAR_ARG_LEN_DECL);
-}
-
 static const Complex Complex_NaN_result (octave::numeric_limits<double>::NaN (),
                                          octave::numeric_limits<double>::NaN ());
 
@@ -1265,22 +1068,7 @@
 
 #else
 
-extern "C"
-{
-  // Note that the original complex fft routines were not written for
-  // double complex arguments.  They have been modified by adding an
-  // implicit double precision (a-h,o-z) statement at the beginning of
-  // each subroutine.
-
-  F77_RET_T
-  F77_FUNC (zffti, ZFFTI) (const F77_INT&, F77_DBLE_CMPLX*);
-
-  F77_RET_T
-  F77_FUNC (zfftf, ZFFTF) (const F77_INT&, F77_DBLE_CMPLX*, F77_DBLE_CMPLX*);
-
-  F77_RET_T
-  F77_FUNC (zfftb, ZFFTB) (const F77_INT&, F77_DBLE_CMPLX*, F77_DBLE_CMPLX*);
-}
+#include "lo-fftpack-proto.h"
 
 ComplexMatrix
 ComplexMatrix::fourier (void) const
--- a/liboctave/array/CNDArray.cc	Tue Aug 16 21:38:58 2016 -0700
+++ b/liboctave/array/CNDArray.cc	Wed Aug 17 00:18:08 2016 -0400
@@ -188,22 +188,7 @@
 
 #else
 
-extern "C"
-{
-  // Note that the original complex fft routines were not written for
-  // double complex arguments.  They have been modified by adding an
-  // implicit double precision (a-h,o-z) statement at the beginning of
-  // each subroutine.
-
-  F77_RET_T
-  F77_FUNC (zffti, ZFFTI) (const F77_INT&, F77_DBLE_CMPLX*);
-
-  F77_RET_T
-  F77_FUNC (zfftf, ZFFTF) (const F77_INT&, F77_DBLE_CMPLX*, F77_DBLE_CMPLX*);
-
-  F77_RET_T
-  F77_FUNC (zfftb, ZFFTB) (const F77_INT&, F77_DBLE_CMPLX*, F77_DBLE_CMPLX*);
-}
+#include "lo-fftpack-proto.h"
 
 ComplexNDArray
 ComplexNDArray::fourier (int dim) const
--- a/liboctave/array/CRowVector.cc	Tue Aug 16 21:38:58 2016 -0700
+++ b/liboctave/array/CRowVector.cc	Wed Aug 17 00:18:08 2016 -0400
@@ -28,32 +28,13 @@
 #include <iostream>
 
 #include "Array-util.h"
-#include "f77-fcn.h"
 #include "functor.h"
+#include "lo-blas-proto.h"
 #include "lo-error.h"
 #include "mx-base.h"
 #include "mx-inlines.cc"
 #include "oct-cmplx.h"
 
-// Fortran functions we call.
-
-extern "C"
-{
-  F77_RET_T
-  F77_FUNC (zgemv, ZGEMV) (F77_CONST_CHAR_ARG_DECL,
-                           const F77_INT&, const F77_INT&,
-                           const F77_DBLE_CMPLX&, const F77_DBLE_CMPLX*,
-                           const F77_INT&, const F77_DBLE_CMPLX*,
-                           const F77_INT&, const F77_DBLE_CMPLX&, F77_DBLE_CMPLX*,
-                           const F77_INT&
-                           F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (xzdotu, XZDOTU) (const F77_INT&, const F77_DBLE_CMPLX*,
-                             const F77_INT&, const F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_DBLE_CMPLX*);
-}
-
 // Complex Row Vector class
 
 bool
--- a/liboctave/array/CSparse.cc	Tue Aug 16 21:38:58 2016 -0700
+++ b/liboctave/array/CSparse.cc	Wed Aug 17 00:18:08 2016 -0400
@@ -36,6 +36,7 @@
 #include "lo-mappers.h"
 #include "f77-fcn.h"
 #include "dRowVector.h"
+#include "lo-lapack-proto.h"
 #include "mx-m-cs.h"
 #include "mx-cs-m.h"
 #include "mx-cm-s.h"
@@ -70,79 +71,6 @@
 #  include "sparse-dmsolve.h"
 #endif
 
-// Fortran functions we call.
-extern "C"
-{
-  F77_RET_T
-  F77_FUNC (zgbtrf, ZGBTRF) (const F77_INT&, const F77_INT&,
-                             const F77_INT&, const F77_INT&,
-                             F77_DBLE_CMPLX*, const F77_INT&,
-                             F77_INT*, F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (zgbtrs, ZGBTRS) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_INT&,
-                             const F77_INT&, const F77_INT&,
-                             const F77_DBLE_CMPLX*, const F77_INT&,
-                             const F77_INT*, F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (zgbcon, ZGBCON) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, const F77_INT*,
-                             const F77_DBLE&, F77_DBLE&, F77_DBLE_CMPLX*, F77_DBLE*,
-                             F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (zpbtrf, ZPBTRF) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_INT&,
-                             F77_DBLE_CMPLX*, const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (zpbtrs, ZPBTRS) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (zpbcon, ZPBCON) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_INT&,
-                             F77_DBLE_CMPLX*, const F77_INT&, const F77_DBLE&,
-                             F77_DBLE&, F77_DBLE_CMPLX*, F77_DBLE*, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (zgttrf, ZGTTRF) (const F77_INT&, F77_DBLE_CMPLX*, F77_DBLE_CMPLX*,
-                             F77_DBLE_CMPLX*, F77_DBLE_CMPLX*, F77_INT*,
-                             F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (zgttrs, ZGTTRS) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_INT&,
-                             const F77_DBLE_CMPLX*, const F77_DBLE_CMPLX*, const F77_DBLE_CMPLX*,
-                             const F77_DBLE_CMPLX*, const F77_INT*,
-                             F77_DBLE_CMPLX *, const F77_INT&,
-                             F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (zptsv, ZPTSV) (const F77_INT&, const F77_INT&,
-                           F77_DBLE*, F77_DBLE_CMPLX*, F77_DBLE_CMPLX*,
-                           const F77_INT&, F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (zgtsv, ZGTSV) (const F77_INT&, const F77_INT&,
-                           F77_DBLE_CMPLX*, F77_DBLE_CMPLX*, F77_DBLE_CMPLX*, F77_DBLE_CMPLX*,
-                           const F77_INT&, F77_INT&);
-}
-
 SparseComplexMatrix::SparseComplexMatrix (const SparseMatrix& a)
   : MSparse<Complex> (a)
 {
--- a/liboctave/array/dColVector.cc	Tue Aug 16 21:38:58 2016 -0700
+++ b/liboctave/array/dColVector.cc	Wed Aug 17 00:18:08 2016 -0400
@@ -29,27 +29,13 @@
 #include <iostream>
 
 #include "Array-util.h"
-#include "f77-fcn.h"
 #include "functor.h"
+#include "lo-blas-proto.h"
 #include "lo-error.h"
 #include "mx-base.h"
 #include "mx-inlines.cc"
 #include "oct-cmplx.h"
 
-// Fortran functions we call.
-
-extern "C"
-{
-  F77_RET_T
-  F77_FUNC (dgemv, DGEMV) (F77_CONST_CHAR_ARG_DECL,
-                           const F77_INT&, const F77_INT&,
-                           const F77_DBLE&, const F77_DBLE*,
-                           const F77_INT&, const F77_DBLE*,
-                           const F77_INT&, const F77_DBLE&, F77_DBLE*,
-                           const F77_INT&
-                           F77_CHAR_ARG_LEN_DECL);
-}
-
 // Column Vector class.
 
 bool
--- a/liboctave/array/dMatrix.cc	Tue Aug 16 21:38:58 2016 -0700
+++ b/liboctave/array/dMatrix.cc	Wed Aug 17 00:18:08 2016 -0400
@@ -47,11 +47,11 @@
 #include "DET.h"
 #include "schur.h"
 #include "svd.h"
-#include "f77-fcn.h"
 #include "functor.h"
+#include "lo-blas-proto.h"
 #include "lo-error.h"
-#include "oct-locbuf.h"
 #include "lo-ieee.h"
+#include "lo-lapack-proto.h"
 #include "lo-mappers.h"
 #include "lo-utils.h"
 #include "mx-m-dm.h"
@@ -60,188 +60,10 @@
 #include "mx-op-defs.h"
 #include "oct-cmplx.h"
 #include "oct-fftw.h"
+#include "oct-locbuf.h"
 #include "oct-norm.h"
 #include "quit.h"
 
-// Fortran functions we call.
-
-extern "C"
-{
-  F77_RET_T
-  F77_FUNC (xilaenv, XILAENV) (const F77_INT&,
-                               F77_CONST_CHAR_ARG_DECL,
-                               F77_CONST_CHAR_ARG_DECL,
-                               const F77_INT&, const F77_INT&,
-                               const F77_INT&, const F77_INT&,
-                               F77_INT&
-                               F77_CHAR_ARG_LEN_DECL
-                               F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (dgebal, DGEBAL) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_DBLE*,
-                             const F77_INT&, F77_INT&,
-                             F77_INT&, F77_DBLE*, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (dgebak, DGEBAK) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_DBLE*,
-                             const F77_INT&, F77_DBLE*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (dgemm, DGEMM) (F77_CONST_CHAR_ARG_DECL,
-                           F77_CONST_CHAR_ARG_DECL,
-                           const F77_INT&, const F77_INT&,
-                           const F77_INT&, const F77_DBLE&,
-                           const F77_DBLE*, const F77_INT&,
-                           const F77_DBLE*, const F77_INT&,
-                           const F77_DBLE&, F77_DBLE*, const F77_INT&
-                           F77_CHAR_ARG_LEN_DECL
-                           F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (dgemv, DGEMV) (F77_CONST_CHAR_ARG_DECL,
-                           const F77_INT&, const F77_INT&,
-                           const F77_DBLE&, const F77_DBLE*,
-                           const F77_INT&, const F77_DBLE*,
-                           const F77_INT&, const F77_DBLE&, F77_DBLE*,
-                           const F77_INT&
-                           F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (xddot, XDDOT) (const F77_INT&, const F77_DBLE*,
-                           const F77_INT&, const F77_DBLE*,
-                           const F77_INT&, F77_DBLE&);
-
-  F77_RET_T
-  F77_FUNC (dsyrk, DSYRK) (F77_CONST_CHAR_ARG_DECL,
-                           F77_CONST_CHAR_ARG_DECL,
-                           const F77_INT&, const F77_INT&,
-                           const F77_DBLE&, const F77_DBLE*, const F77_INT&,
-                           const F77_DBLE&, F77_DBLE*, const F77_INT&
-                           F77_CHAR_ARG_LEN_DECL
-                           F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (dgetrf, DGETRF) (const F77_INT&, const F77_INT&,
-                             F77_DBLE*, const F77_INT&,
-                             F77_INT*, F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (dgetrs, DGETRS) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_INT&,
-                             const F77_DBLE*, const F77_INT&,
-                             const F77_INT*, F77_DBLE*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (dgetri, DGETRI) (const F77_INT&, F77_DBLE*,
-                             const F77_INT&, const F77_INT*,
-                             F77_DBLE*, const F77_INT&,
-                             F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (dgecon, DGECON) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_DBLE*,
-                             const F77_INT&, const F77_DBLE&, F77_DBLE&,
-                             F77_DBLE*, F77_INT*, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (dgelsy, DGELSY) (const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_DBLE*,
-                             const F77_INT&, F77_DBLE*,
-                             const F77_INT&, F77_INT*,
-                             F77_DBLE&, F77_INT&, F77_DBLE*,
-                             const F77_INT&, F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (dgelsd, DGELSD) (const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_DBLE*,
-                             const F77_INT&, F77_DBLE*,
-                             const F77_INT&, F77_DBLE*, F77_DBLE&,
-                             F77_INT&, F77_DBLE*,
-                             const F77_INT&, F77_INT*,
-                             F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (dpotrf, DPOTRF) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_DBLE *,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (dpocon, DPOCON) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_DBLE*,
-                             const F77_INT&, const F77_DBLE&,
-                             F77_DBLE&, F77_DBLE*, F77_INT*,
-                             F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-  F77_RET_T
-  F77_FUNC (dpotrs, DPOTRS) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_INT&,
-                             const F77_DBLE*, const F77_INT&, F77_DBLE*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (dtrtri, DTRTRI) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_DBLE*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-  F77_RET_T
-  F77_FUNC (dtrcon, DTRCON) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_DBLE*,
-                             const F77_INT&, F77_DBLE&,
-                             F77_DBLE*, F77_INT*, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-  F77_RET_T
-  F77_FUNC (dtrtrs, DTRTRS) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_INT&,
-                             const F77_DBLE*, const F77_INT&, F77_DBLE*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (dlartg, DLARTG) (const F77_DBLE&, const F77_DBLE&, F77_DBLE&,
-                             F77_DBLE&, F77_DBLE&);
-
-  F77_RET_T
-  F77_FUNC (dtrsyl, DTRSYL) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_INT&,
-                             const F77_INT&, const F77_DBLE*,
-                             const F77_INT&, const F77_DBLE*,
-                             const F77_INT&, const F77_DBLE*,
-                             const F77_INT&, F77_DBLE&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (xdlange, XDLANGE) (F77_CONST_CHAR_ARG_DECL,
-                               const F77_INT&, const F77_INT&,
-                               const F77_DBLE*, const F77_INT&,
-                               F77_DBLE*, F77_DBLE&
-                               F77_CHAR_ARG_LEN_DECL);
-}
-
 // Matrix class.
 
 Matrix::Matrix (const RowVector& rv)
@@ -945,22 +767,7 @@
 
 #else
 
-extern "C"
-{
-  // Note that the original complex fft routines were not written for
-  // double complex arguments.  They have been modified by adding an
-  // implicit double precision (a-h,o-z) statement at the beginning of
-  // each subroutine.
-
-  F77_RET_T
-  F77_FUNC (zffti, ZFFTI) (const F77_INT&, F77_DBLE_CMPLX*);
-
-  F77_RET_T
-  F77_FUNC (zfftf, ZFFTF) (const F77_INT&, F77_DBLE_CMPLX*, F77_DBLE_CMPLX*);
-
-  F77_RET_T
-  F77_FUNC (zfftb, ZFFTB) (const F77_INT&, F77_DBLE_CMPLX*, F77_DBLE_CMPLX*);
-}
+#include "lo-fftpack-proto.h"
 
 ComplexMatrix
 Matrix::fourier (void) const
--- a/liboctave/array/dNDArray.cc	Tue Aug 16 21:38:58 2016 -0700
+++ b/liboctave/array/dNDArray.cc	Wed Aug 17 00:18:08 2016 -0400
@@ -229,22 +229,7 @@
 
 #else
 
-extern "C"
-{
-  // Note that the original complex fft routines were not written for
-  // double complex arguments.  They have been modified by adding an
-  // implicit double precision (a-h,o-z) statement at the beginning of
-  // each subroutine.
-
-  F77_RET_T
-  F77_FUNC (zffti, ZFFTI) (const F77_INT&, F77_DBLE_CMPLX*);
-
-  F77_RET_T
-  F77_FUNC (zfftf, ZFFTF) (const F77_INT&, F77_DBLE_CMPLX*, F77_DBLE_CMPLX*);
-
-  F77_RET_T
-  F77_FUNC (zfftb, ZFFTB) (const F77_INT&, F77_DBLE_CMPLX*, F77_DBLE_CMPLX*);
-}
+#include "lo-fftpack-proto.h"
 
 ComplexNDArray
 NDArray::fourier (int dim) const
--- a/liboctave/array/dRowVector.cc	Tue Aug 16 21:38:58 2016 -0700
+++ b/liboctave/array/dRowVector.cc	Wed Aug 17 00:18:08 2016 -0400
@@ -28,31 +28,13 @@
 #include <iostream>
 
 #include "Array-util.h"
-#include "f77-fcn.h"
 #include "functor.h"
+#include "lo-blas-proto.h"
 #include "lo-error.h"
 #include "mx-base.h"
 #include "mx-inlines.cc"
 #include "oct-cmplx.h"
 
-// Fortran functions we call.
-
-extern "C"
-{
-  F77_RET_T
-  F77_FUNC (dgemv, DGEMV) (F77_CONST_CHAR_ARG_DECL,
-                           const F77_INT&, const F77_INT&,
-                           const F77_DBLE&, const F77_DBLE*,
-                           const F77_INT&, const F77_DBLE*,
-                           const F77_INT&, const F77_DBLE&,
-                           F77_DBLE*, const F77_INT&
-                           F77_CHAR_ARG_LEN_DECL);
-  F77_RET_T
-  F77_FUNC (xddot, XDDOT) (const F77_INT&, const F77_DBLE*,
-                           const F77_INT&, const F77_DBLE*,
-                           const F77_INT&, F77_DBLE&);
-}
-
 // Row Vector class.
 
 bool
--- a/liboctave/array/dSparse.cc	Tue Aug 16 21:38:58 2016 -0700
+++ b/liboctave/array/dSparse.cc	Wed Aug 17 00:18:08 2016 -0400
@@ -34,8 +34,8 @@
 
 #include "quit.h"
 #include "lo-ieee.h"
+#include "lo-lapack-proto.h"
 #include "lo-mappers.h"
-#include "f77-fcn.h"
 #include "dRowVector.h"
 #include "oct-locbuf.h"
 
@@ -65,89 +65,6 @@
 #  include "sparse-dmsolve.h"
 #endif
 
-// Fortran functions we call.
-extern "C"
-{
-  F77_RET_T
-  F77_FUNC (dgbtrf, DGBTRF) (const F77_INT&, const F77_INT&,
-                             const F77_INT&, const F77_INT&,
-                             F77_DBLE*, const F77_INT&,
-                             F77_INT*, F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (dgbtrs, DGBTRS) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_INT&,
-                             const F77_INT&, const F77_INT&,
-                             const F77_DBLE*, const F77_INT&,
-                             const F77_INT*, F77_DBLE*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (dgbcon, DGBCON) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_DBLE*,
-                             const F77_INT&, const F77_INT*,
-                             const F77_DBLE&, F77_DBLE&, F77_DBLE*,
-                             F77_INT*, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (dpbtrf, DPBTRF) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_INT&,
-                             F77_DBLE*, const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (dpbtrs, DPBTRS) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_DBLE*,
-                             const F77_INT&, F77_DBLE*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (dpbcon, DPBCON) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_INT&,
-                             F77_DBLE*, const F77_INT&,
-                             const F77_DBLE&, F77_DBLE&, F77_DBLE*,
-                             F77_INT*, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-  F77_RET_T
-  F77_FUNC (dptsv, DPTSV) (const F77_INT&, const F77_INT&,
-                           F77_DBLE*, F77_DBLE*, F77_DBLE*, const F77_INT&,
-                           F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (dgtsv, DGTSV) (const F77_INT&, const F77_INT&,
-                           F77_DBLE*, F77_DBLE*, F77_DBLE*, F77_DBLE*,
-                           const F77_INT&, F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (dgttrf, DGTTRF) (const F77_INT&, F77_DBLE*, F77_DBLE*,
-                             F77_DBLE*, F77_DBLE*, F77_INT*,
-                             F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (dgttrs, DGTTRS) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_INT&,
-                             const F77_DBLE*, const F77_DBLE*, const F77_DBLE*,
-                             const F77_DBLE*, const F77_INT*,
-                             F77_DBLE *, const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (zptsv, ZPTSV) (const F77_INT&, const F77_INT&,
-                           F77_DBLE*, F77_DBLE_CMPLX*, F77_DBLE_CMPLX*, const F77_INT&,
-                           F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (zgtsv, ZGTSV) (const F77_INT&, const F77_INT&,
-                           F77_DBLE_CMPLX*, F77_DBLE_CMPLX*, F77_DBLE_CMPLX*, F77_DBLE_CMPLX*,
-                           const F77_INT&, F77_INT&);
-
-}
-
 SparseMatrix::SparseMatrix (const SparseBoolMatrix &a)
   : MSparse<double> (a.rows (), a.cols (), a.nnz ())
 {
--- a/liboctave/array/fCColVector.cc	Tue Aug 16 21:38:58 2016 -0700
+++ b/liboctave/array/fCColVector.cc	Wed Aug 17 00:18:08 2016 -0400
@@ -29,27 +29,13 @@
 #include <iostream>
 
 #include "Array-util.h"
-#include "f77-fcn.h"
 #include "functor.h"
+#include "lo-blas-proto.h"
 #include "lo-error.h"
 #include "mx-base.h"
 #include "mx-inlines.cc"
 #include "oct-cmplx.h"
 
-// Fortran functions we call.
-
-extern "C"
-{
-  F77_RET_T
-  F77_FUNC (cgemv, CGEMV) (F77_CONST_CHAR_ARG_DECL,
-                           const F77_INT&, const F77_INT&,
-                           const F77_CMPLX&, const F77_CMPLX*,
-                           const F77_INT&, const F77_CMPLX*,
-                           const F77_INT&, const F77_CMPLX&,
-                           F77_CMPLX*, const F77_INT&
-                           F77_CHAR_ARG_LEN_DECL);
-}
-
 // FloatComplex Column Vector class
 
 FloatComplexColumnVector::FloatComplexColumnVector (const FloatColumnVector& a)
--- a/liboctave/array/fCMatrix.cc	Tue Aug 16 21:38:58 2016 -0700
+++ b/liboctave/array/fCMatrix.cc	Wed Aug 17 00:18:08 2016 -0400
@@ -37,7 +37,6 @@
 
 #include "Array-util.h"
 #include "DET.h"
-#include "f77-fcn.h"
 #include "boolMatrix.h"
 #include "chMatrix.h"
 #include "chol.h"
@@ -49,8 +48,10 @@
 #include "schur.h"
 #include "svd.h"
 #include "functor.h"
+#include "lo-blas-proto.h"
 #include "lo-error.h"
 #include "lo-ieee.h"
+#include "lo-lapack-proto.h"
 #include "lo-mappers.h"
 #include "lo-utils.h"
 #include "mx-fcm-fdm.h"
@@ -63,206 +64,6 @@
 #include "oct-locbuf.h"
 #include "oct-norm.h"
 
-// Fortran functions we call.
-
-extern "C"
-{
-  F77_RET_T
-  F77_FUNC (xilaenv, XILAENV) (const F77_INT&,
-                               F77_CONST_CHAR_ARG_DECL,
-                               F77_CONST_CHAR_ARG_DECL,
-                               const F77_INT&, const F77_INT&,
-                               const F77_INT&, const F77_INT&,
-                               F77_INT&
-                               F77_CHAR_ARG_LEN_DECL
-                               F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (cgebal, CGEBAL) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_CMPLX*,
-                             const F77_INT&, F77_INT&,
-                             F77_INT&, F77_REAL*, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (sgebak, SGEBAK) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_REAL*,
-                             const F77_INT&, F77_REAL*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (cgemm, CGEMM) (F77_CONST_CHAR_ARG_DECL,
-                           F77_CONST_CHAR_ARG_DECL,
-                           const F77_INT&, const F77_INT&,
-                           const F77_INT&, const F77_CMPLX&,
-                           const F77_CMPLX*, const F77_INT&,
-                           const F77_CMPLX*, const F77_INT&,
-                           const F77_CMPLX&, F77_CMPLX*,
-                           const F77_INT&
-                           F77_CHAR_ARG_LEN_DECL
-                           F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (cgemv, CGEMV) (F77_CONST_CHAR_ARG_DECL,
-                           const F77_INT&, const F77_INT&,
-                           const F77_CMPLX&, const F77_CMPLX*,
-                           const F77_INT&, const F77_CMPLX*,
-                           const F77_INT&, const F77_CMPLX&,
-                           F77_CMPLX*, const F77_INT&
-                           F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (xcdotu, XCDOTU) (const F77_INT&, const F77_CMPLX*,
-                             const F77_INT&, const F77_CMPLX*,
-                             const F77_INT&, F77_CMPLX*);
-
-  F77_RET_T
-  F77_FUNC (xcdotc, XCDOTC) (const F77_INT&, const F77_CMPLX*,
-                             const F77_INT&, const F77_CMPLX*,
-                             const F77_INT&, F77_CMPLX*);
-
-  F77_RET_T
-  F77_FUNC (csyrk, CSYRK) (F77_CONST_CHAR_ARG_DECL,
-                           F77_CONST_CHAR_ARG_DECL,
-                           const F77_INT&, const F77_INT&,
-                           const F77_CMPLX&, const F77_CMPLX*,
-                           const F77_INT&, const F77_CMPLX&,
-                           F77_CMPLX*, const F77_INT&
-                           F77_CHAR_ARG_LEN_DECL
-                           F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (cherk, CHERK) (F77_CONST_CHAR_ARG_DECL,
-                           F77_CONST_CHAR_ARG_DECL,
-                           const F77_INT&, const F77_INT&,
-                           const F77_REAL&, const F77_CMPLX*,
-                           const F77_INT&, const F77_REAL&,
-                           F77_CMPLX*, const F77_INT&
-                           F77_CHAR_ARG_LEN_DECL
-                           F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (cgetrf, CGETRF) (const F77_INT&, const F77_INT&,
-                             F77_CMPLX*, const F77_INT&,
-                             F77_INT*, F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (cgetrs, CGETRS) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_INT&,
-                             F77_CMPLX*, const F77_INT&,
-                             const F77_INT*, F77_CMPLX*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (cgetri, CGETRI) (const F77_INT&, F77_CMPLX*,
-                             const F77_INT&, const F77_INT*,
-                             F77_CMPLX*, const F77_INT&,
-                             F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (cgecon, CGECON) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_CMPLX*,
-                             const F77_INT&, const F77_REAL&, F77_REAL&,
-                             F77_CMPLX*, F77_REAL*, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (cgelsy, CGELSY) (const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_CMPLX*,
-                             const F77_INT&, F77_CMPLX*,
-                             const F77_INT&, F77_INT*,
-                             F77_REAL&, F77_INT&, F77_CMPLX*,
-                             const F77_INT&, F77_REAL*, F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (cgelsd, CGELSD) (const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_CMPLX*,
-                             const F77_INT&, F77_CMPLX*,
-                             const F77_INT&, F77_REAL*, F77_REAL&,
-                             F77_INT&, F77_CMPLX*,
-                             const F77_INT&, F77_REAL*,
-                             F77_INT*, F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (cpotrf, CPOTRF) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_CMPLX*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (cpocon, CPOCON) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_CMPLX*,
-                             const F77_INT&, const F77_REAL&, F77_REAL&,
-                             F77_CMPLX*, F77_REAL*, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (cpotrs, CPOTRS) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&,
-                             const F77_INT&, const F77_CMPLX*,
-                             const F77_INT&, F77_CMPLX*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (ctrtri, CTRTRI) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_CMPLX*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (ctrcon, CTRCON) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_CMPLX*,
-                             const F77_INT&, F77_REAL&, F77_CMPLX*,
-                             F77_REAL*, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (ctrtrs, CTRTRS) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_INT&,
-                             const F77_CMPLX*, const F77_INT&,
-                             F77_CMPLX*, const F77_INT&,
-                             F77_INT&
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (clartg, CLARTG) (const F77_CMPLX*, const F77_CMPLX*,
-                             F77_REAL&, F77_CMPLX*, F77_CMPLX*);
-
-  F77_RET_T
-  F77_FUNC (ctrsyl, CTRSYL) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_INT&,
-                             const F77_INT&, const F77_CMPLX*,
-                             const F77_INT&, const F77_CMPLX*,
-                             const F77_INT&, const F77_CMPLX*,
-                             const F77_INT&, F77_REAL&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (xclange, XCLANGE) (F77_CONST_CHAR_ARG_DECL,
-                               const F77_INT&, const F77_INT&,
-                               const F77_CMPLX*, const F77_INT&,
-                               F77_REAL*, F77_REAL&
-                               F77_CHAR_ARG_LEN_DECL);
-}
-
 static const FloatComplex FloatComplex_NaN_result (octave::numeric_limits<float>::NaN (),
                                                    octave::numeric_limits<float>::NaN ());
 
@@ -1270,17 +1071,7 @@
 
 #else
 
-extern "C"
-{
-  F77_RET_T
-  F77_FUNC (cffti, CFFTI) (const F77_INT&, F77_CMPLX*);
-
-  F77_RET_T
-  F77_FUNC (cfftf, CFFTF) (const F77_INT&, F77_CMPLX*, F77_CMPLX*);
-
-  F77_RET_T
-  F77_FUNC (cfftb, CFFTB) (const F77_INT&, F77_CMPLX*, F77_CMPLX*);
-}
+#include "lo-fftpack-proto.h"
 
 FloatComplexMatrix
 FloatComplexMatrix::fourier (void) const
--- a/liboctave/array/fCNDArray.cc	Tue Aug 16 21:38:58 2016 -0700
+++ b/liboctave/array/fCNDArray.cc	Wed Aug 17 00:18:08 2016 -0400
@@ -188,19 +188,7 @@
 
 #else
 
-extern "C"
-{
-  F77_RET_T
-  F77_FUNC (cffti, CFFTI) (const F77_INT&, F77_CMPLX*);
-
-  F77_RET_T
-  F77_FUNC (cfftf, CFFTF) (const F77_INT&, F77_CMPLX*,
-                           F77_CMPLX*);
-
-  F77_RET_T
-  F77_FUNC (cfftb, CFFTB) (const F77_INT&, F77_CMPLX*,
-                           F77_CMPLX*);
-}
+#include "lo-fftpack-proto.h"
 
 FloatComplexNDArray
 FloatComplexNDArray::fourier (int dim) const
--- a/liboctave/array/fCRowVector.cc	Tue Aug 16 21:38:58 2016 -0700
+++ b/liboctave/array/fCRowVector.cc	Wed Aug 17 00:18:08 2016 -0400
@@ -28,32 +28,13 @@
 #include <iostream>
 
 #include "Array-util.h"
-#include "f77-fcn.h"
 #include "functor.h"
+#include "lo-blas-proto.h"
 #include "lo-error.h"
 #include "mx-base.h"
 #include "mx-inlines.cc"
 #include "oct-cmplx.h"
 
-// Fortran functions we call.
-
-extern "C"
-{
-  F77_RET_T
-  F77_FUNC (cgemv, CGEMV) (F77_CONST_CHAR_ARG_DECL,
-                           const F77_INT&, const F77_INT&,
-                           const F77_CMPLX&, const F77_CMPLX*,
-                           const F77_INT&, const F77_CMPLX*,
-                           const F77_INT&, const F77_CMPLX&,
-                           F77_CMPLX*, const F77_INT&
-                           F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (xcdotu, XCDOTU) (const F77_INT&, const F77_CMPLX*,
-                             const F77_INT&, const F77_CMPLX*,
-                             const F77_INT&, F77_CMPLX*);
-}
-
 // FloatComplex Row Vector class
 
 bool
--- a/liboctave/array/fColVector.cc	Tue Aug 16 21:38:58 2016 -0700
+++ b/liboctave/array/fColVector.cc	Wed Aug 17 00:18:08 2016 -0400
@@ -29,26 +29,13 @@
 #include <iostream>
 
 #include "Array-util.h"
-#include "f77-fcn.h"
 #include "functor.h"
+#include "lo-blas-proto.h"
 #include "lo-error.h"
 #include "mx-base.h"
 #include "mx-inlines.cc"
 #include "oct-cmplx.h"
 
-// Fortran functions we call.
-
-extern "C"
-{
-  F77_RET_T
-  F77_FUNC (sgemv, SGEMV) (F77_CONST_CHAR_ARG_DECL,
-                           const F77_INT&, const F77_INT&,
-                           const F77_REAL&, const F77_REAL*, const F77_INT&,
-                           const F77_REAL*, const F77_INT&, const F77_REAL&,
-                           F77_REAL*, const F77_INT&
-                           F77_CHAR_ARG_LEN_DECL);
-}
-
 // Column Vector class.
 
 bool
--- a/liboctave/array/fMatrix.cc	Tue Aug 16 21:38:58 2016 -0700
+++ b/liboctave/array/fMatrix.cc	Wed Aug 17 00:18:08 2016 -0400
@@ -46,13 +46,14 @@
 #include "PermMatrix.h"
 #include "DET.h"
 #include "byte-swap.h"
-#include "f77-fcn.h"
 #include "fMatrix.h"
 #include "schur.h"
 #include "svd.h"
 #include "functor.h"
+#include "lo-blas-proto.h"
 #include "lo-error.h"
 #include "lo-ieee.h"
+#include "lo-lapack-proto.h"
 #include "lo-mappers.h"
 #include "lo-utils.h"
 #include "mx-fdm-fm.h"
@@ -65,186 +66,6 @@
 #include "oct-norm.h"
 #include "quit.h"
 
-// Fortran functions we call.
-
-extern "C"
-{
-  F77_RET_T
-  F77_FUNC (xilaenv, XILAENV) (const F77_INT&,
-                               F77_CONST_CHAR_ARG_DECL,
-                               F77_CONST_CHAR_ARG_DECL,
-                               const F77_INT&, const F77_INT&,
-                               const F77_INT&, const F77_INT&,
-                               F77_INT&
-                               F77_CHAR_ARG_LEN_DECL
-                               F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (sgebal, SGEBAL) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_REAL*,
-                             const F77_INT&, F77_INT&,
-                             F77_INT&, F77_REAL*, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (sgebak, SGEBAK) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_REAL*,
-                             const F77_INT&, F77_REAL*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (sgemm, SGEMM) (F77_CONST_CHAR_ARG_DECL,
-                           F77_CONST_CHAR_ARG_DECL,
-                           const F77_INT&, const F77_INT&,
-                           const F77_INT&, const F77_REAL&, const F77_REAL*,
-                           const F77_INT&, const F77_REAL*,
-                           const F77_INT&, const F77_REAL&, F77_REAL*,
-                           const F77_INT&
-                           F77_CHAR_ARG_LEN_DECL
-                           F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (sgemv, SGEMV) (F77_CONST_CHAR_ARG_DECL,
-                           const F77_INT&, const F77_INT&,
-                           const F77_REAL&, const F77_REAL*,
-                           const F77_INT&, const F77_REAL*,
-                           const F77_INT&, const F77_REAL&, F77_REAL*,
-                           const F77_INT&
-                           F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (xsdot, XSDOT) (const F77_INT&, const F77_REAL*,
-                           const F77_INT&, const F77_REAL*,
-                           const F77_INT&, F77_REAL&);
-
-  F77_RET_T
-  F77_FUNC (ssyrk, SSYRK) (F77_CONST_CHAR_ARG_DECL,
-                           F77_CONST_CHAR_ARG_DECL,
-                           const F77_INT&, const F77_INT&,
-                           const F77_REAL&, const F77_REAL*, const F77_INT&,
-                           const F77_REAL&, F77_REAL*, const F77_INT&
-                           F77_CHAR_ARG_LEN_DECL
-                           F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (sgetrf, SGETRF) (const F77_INT&,
-                             const F77_INT&, F77_REAL*,
-                             const F77_INT&,
-                             F77_INT*, F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (sgetrs, SGETRS) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_INT&,
-                             const F77_REAL*, const F77_INT&,
-                             const F77_INT*, F77_REAL*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (sgetri, SGETRI) (const F77_INT&, F77_REAL*,
-                             const F77_INT&, const F77_INT*,
-                             F77_REAL*, const F77_INT&, F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (sgecon, SGECON) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_REAL*,
-                             const F77_INT&, const F77_REAL&, F77_REAL&,
-                             F77_REAL*, F77_INT*, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (sgelsy, SGELSY) (const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_REAL*,
-                             const F77_INT&, F77_REAL*,
-                             const F77_INT&, F77_INT*,
-                             F77_REAL&, F77_INT&, F77_REAL*,
-                             const F77_INT&, F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (sgelsd, SGELSD) (const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_REAL*,
-                             const F77_INT&, F77_REAL*,
-                             const F77_INT&, F77_REAL*, F77_REAL&,
-                             F77_INT&, F77_REAL*,
-                             const F77_INT&, F77_INT*,
-                             F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (spotrf, SPOTRF) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_REAL *,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (spocon, SPOCON) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_REAL*,
-                             const F77_INT&, const F77_REAL&,
-                             F77_REAL&, F77_REAL*, F77_INT*,
-                             F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-  F77_RET_T
-  F77_FUNC (spotrs, SPOTRS) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_INT&,
-                             const F77_REAL*, const F77_INT&, F77_REAL*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (strtri, STRTRI) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_REAL*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-  F77_RET_T
-  F77_FUNC (strcon, STRCON) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_REAL*,
-                             const F77_INT&, F77_REAL&,
-                             F77_REAL*, F77_INT*, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-  F77_RET_T
-  F77_FUNC (strtrs, STRTRS) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&,
-                             const F77_INT&, const F77_REAL*,
-                             const F77_INT&, F77_REAL*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (slartg, SLARTG) (const F77_REAL&, const F77_REAL&, F77_REAL&,
-                             F77_REAL&, F77_REAL&);
-
-  F77_RET_T
-  F77_FUNC (strsyl, STRSYL) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_INT&,
-                             const F77_INT&, const F77_REAL*,
-                             const F77_INT&, const F77_REAL*,
-                             const F77_INT&, const F77_REAL*,
-                             const F77_INT&, F77_REAL&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (xslange, XSLANGE) (F77_CONST_CHAR_ARG_DECL,
-                               const F77_INT&,
-                               const F77_INT&, const F77_REAL*,
-                               const F77_INT&, F77_REAL*, F77_REAL&
-                               F77_CHAR_ARG_LEN_DECL);
-}
-
 // Matrix class.
 
 FloatMatrix::FloatMatrix (const FloatRowVector& rv)
@@ -952,22 +773,7 @@
 
 #else
 
-extern "C"
-{
-  // Note that the original complex fft routines were not written for
-  // float complex arguments.  They have been modified by adding an
-  // implicit float precision (a-h,o-z) statement at the beginning of
-  // each subroutine.
-
-  F77_RET_T
-  F77_FUNC (cffti, CFFTI) (const F77_INT&, F77_CMPLX*);
-
-  F77_RET_T
-  F77_FUNC (cfftf, CFFTF) (const F77_INT&, F77_CMPLX*, F77_CMPLX*);
-
-  F77_RET_T
-  F77_FUNC (cfftb, CFFTB) (const F77_INT&, F77_CMPLX*, F77_CMPLX*);
-}
+#include "lo-fftpack-proto.h"
 
 FloatComplexMatrix
 FloatMatrix::fourier (void) const
--- a/liboctave/array/fNDArray.cc	Tue Aug 16 21:38:58 2016 -0700
+++ b/liboctave/array/fNDArray.cc	Wed Aug 17 00:18:08 2016 -0400
@@ -187,24 +187,7 @@
 
 #else
 
-extern "C"
-{
-  // Note that the original complex fft routines were not written for
-  // float complex arguments.  They have been modified by adding an
-  // implicit float precision (a-h,o-z) statement at the beginning of
-  // each subroutine.
-
-  F77_RET_T
-  F77_FUNC (cffti, CFFTI) (const F77_INT&, F77_CMPLX*);
-
-  F77_RET_T
-  F77_FUNC (cfftf, CFFTF) (const F77_INT&, F77_CMPLX*,
-                           F77_CMPLX*);
-
-  F77_RET_T
-  F77_FUNC (cfftb, CFFTB) (const F77_INT&, F77_CMPLX*,
-                           F77_CMPLX*);
-}
+#include "lo-fftpack-proto.h"
 
 FloatComplexNDArray
 FloatNDArray::fourier (int dim) const
--- a/liboctave/array/fRowVector.cc	Tue Aug 16 21:38:58 2016 -0700
+++ b/liboctave/array/fRowVector.cc	Wed Aug 17 00:18:08 2016 -0400
@@ -28,31 +28,13 @@
 #include <iostream>
 
 #include "Array-util.h"
-#include "f77-fcn.h"
 #include "functor.h"
+#include "lo-blas-proto.h"
 #include "lo-error.h"
 #include "mx-base.h"
 #include "mx-inlines.cc"
 #include "oct-cmplx.h"
 
-// Fortran functions we call.
-
-extern "C"
-{
-  F77_RET_T
-  F77_FUNC (sgemv, SGEMV) (F77_CONST_CHAR_ARG_DECL,
-                           const F77_INT&, const F77_INT&,
-                           const F77_REAL&, const F77_REAL*,
-                           const F77_INT&, const F77_REAL*,
-                           const F77_INT&, const F77_REAL&,
-                           F77_REAL*, const F77_INT&
-                           F77_CHAR_ARG_LEN_DECL);
-  F77_RET_T
-  F77_FUNC (xsdot, XSDOT) (const F77_INT&, const F77_REAL*,
-                           const F77_INT&, const F77_REAL*,
-                           const F77_INT&, F77_REAL&);
-}
-
 // Row Vector class.
 
 bool
--- a/liboctave/numeric/EIG.cc	Tue Aug 16 21:38:58 2016 -0700
+++ b/liboctave/numeric/EIG.cc	Wed Aug 17 00:18:08 2016 -0400
@@ -27,127 +27,8 @@
 
 #include "EIG.h"
 #include "dColVector.h"
-#include "f77-fcn.h"
 #include "lo-error.h"
-
-extern "C"
-{
-  F77_RET_T
-  F77_FUNC (dgeevx, DGEEVX) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_DBLE*,
-                             const F77_INT&, F77_DBLE*, F77_DBLE*,
-                             F77_DBLE*, const F77_INT&, F77_DBLE*,
-                             const F77_INT&, F77_INT&,
-                             F77_INT&, F77_DBLE*, F77_DBLE&,
-                             F77_DBLE*, F77_DBLE*, F77_DBLE*,
-                             const F77_INT&, F77_INT*,
-                             F77_INT&
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (zgeevx, ZGEEVX) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_DBLE_CMPLX*,
-                             F77_DBLE_CMPLX*, const F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_INT&,
-                             F77_INT&, F77_DBLE*, F77_DBLE&,
-                             F77_DBLE*, F77_DBLE*, F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_DBLE*,
-                             F77_INT&
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (dsyev, DSYEV) (F77_CONST_CHAR_ARG_DECL,
-                           F77_CONST_CHAR_ARG_DECL,
-                           const F77_INT&, F77_DBLE*,
-                           const F77_INT&, F77_DBLE*, F77_DBLE*,
-                           const F77_INT&, F77_INT&
-                           F77_CHAR_ARG_LEN_DECL
-                           F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (zheev, ZHEEV) (F77_CONST_CHAR_ARG_DECL,
-                           F77_CONST_CHAR_ARG_DECL,
-                           const F77_INT&, F77_DBLE_CMPLX*,
-                           const F77_INT&, F77_DBLE*,
-                           F77_DBLE_CMPLX*, const F77_INT&, F77_DBLE*,
-                           F77_INT&
-                           F77_CHAR_ARG_LEN_DECL
-                           F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (dpotrf, DPOTRF) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_DBLE*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (zpotrf, ZPOTRF) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&,
-                             F77_DBLE_CMPLX*, const F77_INT&,
-                             F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (dggev, DGGEV) (F77_CONST_CHAR_ARG_DECL,
-                           F77_CONST_CHAR_ARG_DECL,
-                           const F77_INT&,
-                           F77_DBLE*, const F77_INT&,
-                           F77_DBLE*, const F77_INT&,
-                           F77_DBLE*, F77_DBLE*, F77_DBLE *, F77_DBLE*,
-                           const F77_INT&, F77_DBLE*,
-                           const F77_INT&, F77_DBLE*,
-                           const F77_INT&, F77_INT&
-                           F77_CHAR_ARG_LEN_DECL
-                           F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (dsygv, DSYGV) (const F77_INT&,
-                           F77_CONST_CHAR_ARG_DECL,
-                           F77_CONST_CHAR_ARG_DECL,
-                           const F77_INT&, F77_DBLE*,
-                           const F77_INT&, F77_DBLE*,
-                           const F77_INT&, F77_DBLE*, F77_DBLE*,
-                           const F77_INT&, F77_INT&
-                           F77_CHAR_ARG_LEN_DECL
-                           F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (zggev, ZGGEV) (F77_CONST_CHAR_ARG_DECL,
-                           F77_CONST_CHAR_ARG_DECL,
-                           const F77_INT&,
-                           F77_DBLE_CMPLX*, const F77_INT&,
-                           F77_DBLE_CMPLX*, const F77_INT&,
-                           F77_DBLE_CMPLX*, F77_DBLE_CMPLX*, F77_DBLE_CMPLX*,
-                           const F77_INT&, F77_DBLE_CMPLX*,
-                           const F77_INT&, F77_DBLE_CMPLX*,
-                           const F77_INT&, F77_DBLE*, F77_INT&
-                           F77_CHAR_ARG_LEN_DECL
-                           F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (zhegv, ZHEGV) (const F77_INT&,
-                           F77_CONST_CHAR_ARG_DECL,
-                           F77_CONST_CHAR_ARG_DECL,
-                           const F77_INT&, F77_DBLE_CMPLX*,
-                           const F77_INT&, F77_DBLE_CMPLX*,
-                           const F77_INT&, F77_DBLE*, F77_DBLE_CMPLX*,
-                           const F77_INT&, F77_DBLE*, F77_INT&
-                           F77_CHAR_ARG_LEN_DECL
-                           F77_CHAR_ARG_LEN_DECL);
-}
+#include "lo-lapack-proto.h"
 
 octave_idx_type
 EIG::init (const Matrix& a, bool calc_rev, bool calc_lev, bool balance)
--- a/liboctave/numeric/aepbalance.cc	Tue Aug 16 21:38:58 2016 -0700
+++ b/liboctave/numeric/aepbalance.cc	Wed Aug 17 00:18:08 2016 -0400
@@ -32,82 +32,11 @@
 #include "aepbalance.h"
 #include "dColVector.h"
 #include "dMatrix.h"
-#include "f77-fcn.h"
 #include "fCColVector.h"
 #include "fCMatrix.h"
 #include "fColVector.h"
 #include "fMatrix.h"
-
-extern "C"
-{
-  F77_RET_T
-  F77_FUNC (dgebal, DGEBAL) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_DBLE*,
-                             const F77_INT&, F77_INT&,
-                             F77_INT&, F77_DBLE*, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (dgebak, DGEBAK) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_INT&,
-                             const F77_INT&, const F77_DBLE*,
-                             const F77_INT&, F77_DBLE*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (sgebal, SGEBAL) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_REAL*,
-                             const F77_INT&, F77_INT&,
-                             F77_INT&, F77_REAL*, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (sgebak, SGEBAK) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_INT&,
-                             const F77_INT&, const F77_REAL*,
-                             const F77_INT&, F77_REAL*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (zgebal, ZGEBAL) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_INT&,
-                             F77_INT&, F77_DBLE*, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (zgebak, ZGEBAK) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_INT&,
-                             const F77_INT&, const F77_DBLE*,
-                             const F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (cgebal, CGEBAL) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_CMPLX*,
-                             const F77_INT&, F77_INT&,
-                             F77_INT&, F77_REAL*, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (cgebak, CGEBAK) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_INT&,
-                             const F77_INT&, const F77_REAL*,
-                             const F77_INT&, F77_CMPLX*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-}
+#include "lo-lapack-proto.h"
 
 static inline char
 get_job (bool noperm, bool noscal)
--- a/liboctave/numeric/chol.cc	Tue Aug 16 21:38:58 2016 -0700
+++ b/liboctave/numeric/chol.cc	Wed Aug 17 00:18:08 2016 -0400
@@ -34,7 +34,6 @@
 #include "dColVector.h"
 #include "dMatrix.h"
 #include "dRowVector.h"
-#include "f77-fcn.h"
 #include "fCColVector.h"
 #include "fCMatrix.h"
 #include "fCRowVector.h"
@@ -42,6 +41,8 @@
 #include "fMatrix.h"
 #include "fRowVector.h"
 #include "lo-error.h"
+#include "lo-lapack-proto.h"
+#include "lo-qrupdate-proto.h"
 #include "oct-locbuf.h"
 #include "oct-norm.h"
 
@@ -49,189 +50,6 @@
 #  include "qr.h"
 #endif
 
-extern "C"
-{
-  F77_RET_T
-  F77_FUNC (dpotrf, DPOTRF) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_DBLE*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (dpotri, DPOTRI) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_DBLE*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (dpocon, DPOCON) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_DBLE*,
-                             const F77_INT&, const F77_DBLE&,
-                             F77_DBLE&, F77_DBLE*, F77_INT*,
-                             F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-#if defined (HAVE_QRUPDATE)
-
-  F77_RET_T
-  F77_FUNC (dch1up, DCH1UP) (const F77_INT&, F77_DBLE*,
-                             const F77_INT&, F77_DBLE*, F77_DBLE*);
-
-  F77_RET_T
-  F77_FUNC (dch1dn, DCH1DN) (const F77_INT&, F77_DBLE*,
-                             const F77_INT&, F77_DBLE*, F77_DBLE*,
-                             F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (dchinx, DCHINX) (const F77_INT&, F77_DBLE*,
-                             const F77_INT&, const F77_INT&,
-                             F77_DBLE*, F77_DBLE*, F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (dchdex, DCHDEX) (const F77_INT&, F77_DBLE*,
-                             const F77_INT&, const F77_INT&,
-                             F77_DBLE*);
-
-  F77_RET_T
-  F77_FUNC (dchshx, DCHSHX) (const F77_INT&, F77_DBLE*,
-                             const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_DBLE*);
-#endif
-
-  F77_RET_T
-  F77_FUNC (spotrf, SPOTRF) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_REAL*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (spotri, SPOTRI) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_REAL*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (spocon, SPOCON) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_REAL*,
-                             const F77_INT&, const F77_REAL&,
-                             F77_REAL&, F77_REAL*, F77_INT*,
-                             F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-#if defined (HAVE_QRUPDATE)
-
-  F77_RET_T
-  F77_FUNC (sch1up, SCH1UP) (const F77_INT&, F77_REAL*,
-                             const F77_INT&, F77_REAL*, F77_REAL*);
-
-  F77_RET_T
-  F77_FUNC (sch1dn, SCH1DN) (const F77_INT&, F77_REAL*,
-                             const F77_INT&, F77_REAL*, F77_REAL*,
-                             F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (schinx, SCHINX) (const F77_INT&, F77_REAL*,
-                             const F77_INT&, const F77_INT&,
-                             F77_REAL*, F77_REAL*, F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (schdex, SCHDEX) (const F77_INT&, F77_REAL*,
-                             const F77_INT&, const F77_INT&,
-                             F77_REAL*);
-
-  F77_RET_T
-  F77_FUNC (schshx, SCHSHX) (const F77_INT&, F77_REAL*,
-                             const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_REAL*);
-#endif
-
-  F77_RET_T
-  F77_FUNC (zpotrf, ZPOTRF) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-  F77_RET_T
-  F77_FUNC (zpotri, ZPOTRI) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (zpocon, ZPOCON) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, const F77_DBLE&,
-                             F77_DBLE&, F77_DBLE_CMPLX*, F77_DBLE*, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-#if defined (HAVE_QRUPDATE)
-
-  F77_RET_T
-  F77_FUNC (zch1up, ZCH1UP) (const F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_DBLE_CMPLX*, F77_DBLE*);
-
-  F77_RET_T
-  F77_FUNC (zch1dn, ZCH1DN) (const F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_DBLE_CMPLX*, F77_DBLE*,
-                             F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (zchinx, ZCHINX) (const F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, const F77_INT&,
-                             F77_DBLE_CMPLX*, F77_DBLE*, F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (zchdex, ZCHDEX) (const F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, const F77_INT&,
-                             F77_DBLE*);
-
-  F77_RET_T
-  F77_FUNC (zchshx, ZCHSHX) (const F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_DBLE_CMPLX*, F77_DBLE*);
-#endif
-
-  F77_RET_T
-  F77_FUNC (cpotrf, CPOTRF) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_CMPLX*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-  F77_RET_T
-  F77_FUNC (cpotri, CPOTRI) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_CMPLX*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (cpocon, CPOCON) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_CMPLX*,
-                             const F77_INT&, const F77_REAL&,
-                             F77_REAL&, F77_CMPLX*, F77_REAL*, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-#if defined (HAVE_QRUPDATE)
-
-  F77_RET_T
-  F77_FUNC (cch1up, CCH1UP) (const F77_INT&, F77_CMPLX*,
-                             const F77_INT&, F77_CMPLX*, F77_REAL*);
-
-  F77_RET_T
-  F77_FUNC (cch1dn, CCH1DN) (const F77_INT&, F77_CMPLX*,
-                             const F77_INT&, F77_CMPLX*,
-                             F77_REAL*, F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (cchinx, CCHINX) (const F77_INT&, F77_CMPLX*,
-                             const F77_INT&, const F77_INT&,
-                             F77_CMPLX*, F77_REAL*, F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (cchdex, CCHDEX) (const F77_INT&, F77_CMPLX*,
-                             const F77_INT&, const F77_INT&,
-                             F77_REAL*);
-
-  F77_RET_T
-  F77_FUNC (cchshx, CCHSHX) (const F77_INT&, F77_CMPLX*,
-                             const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_CMPLX*, F77_REAL*);
-#endif
-}
-
 static Matrix
 chol2inv_internal (const Matrix& r, bool is_upper = true)
 {
--- a/liboctave/numeric/eigs-base.cc	Tue Aug 16 21:38:58 2016 -0700
+++ b/liboctave/numeric/eigs-base.cc	Wed Aug 17 00:18:08 2016 -0400
@@ -36,6 +36,8 @@
 #include "dSparse.h"
 #include "eigs-base.h"
 #include "f77-fcn.h"
+#include "lo-arpack-proto.h"
+#include "lo-blas-proto.h"
 #include "mx-ops.h"
 #include "oct-locbuf.h"
 #include "oct-rand.h"
@@ -45,120 +47,6 @@
 
 #if defined (HAVE_ARPACK)
 
-// Arpack and blas fortran functions we call.
-extern "C"
-{
-  F77_RET_T
-  F77_FUNC (dsaupd, DSAUPD) (F77_INT&,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_DBLE&,
-                             F77_DBLE*, const F77_INT&, F77_DBLE*,
-                             const F77_INT&, F77_INT*,
-                             F77_INT*, F77_DBLE*, F77_DBLE*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (dseupd, DSEUPD) (const F77_INT&,
-                             F77_CONST_CHAR_ARG_DECL,
-                             F77_INT*, F77_DBLE*, F77_DBLE*,
-                             const F77_INT&, const F77_DBLE&,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_DBLE&, F77_DBLE*,
-                             const F77_INT&, F77_DBLE*,
-                             const F77_INT&, F77_INT*,
-                             F77_INT*, F77_DBLE*, F77_DBLE*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (dnaupd, DNAUPD) (F77_INT&,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&,
-                             F77_CONST_CHAR_ARG_DECL,
-                             F77_INT&, const F77_DBLE&,
-                             F77_DBLE*, const F77_INT&, F77_DBLE*,
-                             const F77_INT&, F77_INT*,
-                             F77_INT*, F77_DBLE*, F77_DBLE*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (dneupd, DNEUPD) (const F77_INT&,
-                             F77_CONST_CHAR_ARG_DECL,
-                             F77_INT*, F77_DBLE*, F77_DBLE*,
-                             F77_DBLE*, const F77_INT&, const F77_DBLE&,
-                             const F77_DBLE&, F77_DBLE*,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&,
-                             F77_CONST_CHAR_ARG_DECL,
-                             F77_INT&, const F77_DBLE&, F77_DBLE*,
-                             const F77_INT&, F77_DBLE*,
-                             const F77_INT&, F77_INT*,
-                             F77_INT*, F77_DBLE*, F77_DBLE*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (znaupd, ZNAUPD) (F77_INT&,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_DBLE&,
-                             F77_DBLE_CMPLX*, const F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_INT*,
-                             F77_INT*, F77_DBLE_CMPLX*, F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_DBLE *, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (zneupd, ZNEUPD) (const F77_INT&,
-                             F77_CONST_CHAR_ARG_DECL,
-                             F77_INT*, F77_DBLE_CMPLX*, F77_DBLE_CMPLX*,
-                             const F77_INT&, const F77_DBLE_CMPLX*, F77_DBLE_CMPLX*,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_DBLE&,
-                             F77_DBLE_CMPLX*, const F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_INT*,
-                             F77_INT*, F77_DBLE_CMPLX*, F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_DBLE *, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (dgemv, DGEMV) (F77_CONST_CHAR_ARG_DECL,
-                           const F77_INT&, const F77_INT&,
-                           const F77_DBLE&, const F77_DBLE*,
-                           const F77_INT&, const F77_DBLE*,
-                           const F77_INT&, const F77_DBLE&, F77_DBLE*,
-                           const F77_INT&
-                           F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (zgemv, ZGEMV) (F77_CONST_CHAR_ARG_DECL,
-                           const F77_INT&, const F77_INT&,
-                           const F77_DBLE_CMPLX&, const F77_DBLE_CMPLX*,
-                           const F77_INT&, const F77_DBLE_CMPLX*,
-                           const F77_INT&, const F77_DBLE_CMPLX&, F77_DBLE_CMPLX*,
-                           const F77_INT&
-                           F77_CHAR_ARG_LEN_DECL);
-
-}
-
 static void
 warn_convergence (void)
 {
--- a/liboctave/numeric/fEIG.cc	Tue Aug 16 21:38:58 2016 -0700
+++ b/liboctave/numeric/fEIG.cc	Wed Aug 17 00:18:08 2016 -0400
@@ -27,122 +27,8 @@
 
 #include "fEIG.h"
 #include "fColVector.h"
-#include "f77-fcn.h"
 #include "lo-error.h"
-
-extern "C"
-{
-  F77_RET_T
-  F77_FUNC (sgeevx, SGEEVX) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_REAL*,
-                             const F77_INT&, F77_REAL*, F77_REAL*, F77_REAL*,
-                             const F77_INT&, F77_REAL*,
-                             const F77_INT&, F77_INT&,
-                             F77_INT&, F77_REAL*, F77_REAL&, F77_REAL*,
-                             F77_REAL*, F77_REAL*, const F77_INT&,
-                             F77_INT*, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (cgeevx, CGEEVX) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_CMPLX*,
-                             const F77_INT&, F77_CMPLX*, F77_CMPLX*,
-                             const F77_INT&, F77_CMPLX*,
-                             const F77_INT&, F77_INT&,
-                             F77_INT&, F77_REAL*, F77_REAL&, F77_REAL*,
-                             F77_REAL*, F77_CMPLX*, const F77_INT&,
-                             F77_REAL*, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (ssyev, SSYEV) (F77_CONST_CHAR_ARG_DECL,
-                           F77_CONST_CHAR_ARG_DECL,
-                           const F77_INT&, F77_REAL*,
-                           const F77_INT&, F77_REAL*, F77_REAL*,
-                           const F77_INT&, F77_INT&
-                           F77_CHAR_ARG_LEN_DECL
-                           F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (cheev, CHEEV) (F77_CONST_CHAR_ARG_DECL,
-                           F77_CONST_CHAR_ARG_DECL,
-                           const F77_INT&, F77_CMPLX*,
-                           const F77_INT&, F77_REAL*, F77_CMPLX*,
-                           const F77_INT&, F77_REAL*, F77_INT&
-                           F77_CHAR_ARG_LEN_DECL
-                           F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (spotrf, SPOTRF) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_REAL*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (cpotrf, CPOTRF) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_CMPLX*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (sggev, SGGEV) (F77_CONST_CHAR_ARG_DECL,
-                           F77_CONST_CHAR_ARG_DECL,
-                           const F77_INT&, F77_REAL*,
-                           const F77_INT&, F77_REAL*,
-                           const F77_INT&, F77_REAL*, F77_REAL*, F77_REAL*,
-                           F77_REAL*, const F77_INT&, F77_REAL*,
-                           const F77_INT&, F77_REAL*,
-                           const F77_INT&, F77_INT&
-                           F77_CHAR_ARG_LEN_DECL
-                           F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (ssygv, SSYGV) (const F77_INT&,
-                           F77_CONST_CHAR_ARG_DECL,
-                           F77_CONST_CHAR_ARG_DECL,
-                           const F77_INT&, F77_REAL*,
-                           const F77_INT&, F77_REAL*,
-                           const F77_INT&, F77_REAL*, F77_REAL*,
-                           const F77_INT&, F77_INT&
-                           F77_CHAR_ARG_LEN_DECL
-                           F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (cggev, CGGEV) (F77_CONST_CHAR_ARG_DECL,
-                           F77_CONST_CHAR_ARG_DECL,
-                           const F77_INT&, F77_CMPLX*,
-                           const F77_INT&, F77_CMPLX*,
-                           const F77_INT&, F77_CMPLX*,
-                           F77_CMPLX*, F77_CMPLX*,
-                           const F77_INT&, F77_CMPLX*,
-                           const F77_INT&, F77_CMPLX*,
-                           const F77_INT&, F77_REAL*, F77_INT&
-                           F77_CHAR_ARG_LEN_DECL
-                           F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (chegv, CHEGV) (const F77_INT&,
-                           F77_CONST_CHAR_ARG_DECL,
-                           F77_CONST_CHAR_ARG_DECL,
-                           const F77_INT&, F77_CMPLX*,
-                           const F77_INT&, F77_CMPLX*,
-                           const F77_INT&, F77_REAL*, F77_CMPLX*,
-                           const F77_INT&, F77_REAL*, F77_INT&
-                           F77_CHAR_ARG_LEN_DECL
-                           F77_CHAR_ARG_LEN_DECL);
-}
+#include "lo-lapack-proto.h"
 
 octave_idx_type
 FloatEIG::init (const FloatMatrix& a, bool calc_rev, bool calc_lev, bool balance)
--- a/liboctave/numeric/gepbalance.cc	Tue Aug 16 21:38:58 2016 -0700
+++ b/liboctave/numeric/gepbalance.cc	Wed Aug 17 00:18:08 2016 -0400
@@ -30,79 +30,12 @@
 #include "Array-util.h"
 #include "CMatrix.h"
 #include "dMatrix.h"
-#include "f77-fcn.h"
 #include "fCMatrix.h"
 #include "fMatrix.h"
 #include "gepbalance.h"
+#include "lo-lapack-proto.h"
 #include "oct-locbuf.h"
 
-extern "C"
-{
-  F77_RET_T
-  F77_FUNC (dggbal, DGGBAL) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT& N,
-                             F77_DBLE* A, const F77_INT& LDA,
-                             F77_DBLE* B, const F77_INT& LDB,
-                             F77_INT& ILO, F77_INT& IHI,
-                             F77_DBLE* LSCALE, F77_DBLE* RSCALE,
-                             F77_DBLE* WORK, F77_INT& INFO
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (dggbak, DGGBAK) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT& N,
-                             const F77_INT& ILO,
-                             const F77_INT& IHI,
-                             const F77_DBLE* LSCALE, const F77_DBLE* RSCALE,
-                             F77_INT& M, F77_DBLE* V,
-                             const F77_INT& LDV, F77_INT& INFO
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (sggbal, SGGBAL) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT& N, F77_REAL* A,
-                             const F77_INT& LDA, F77_REAL* B,
-                             const F77_INT& LDB,
-                             F77_INT& ILO, F77_INT& IHI,
-                             F77_REAL* LSCALE, F77_REAL* RSCALE,
-                             F77_REAL* WORK, F77_INT& INFO
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (sggbak, SGGBAK) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT& N,
-                             const F77_INT& ILO,
-                             const F77_INT& IHI,
-                             const F77_REAL* LSCALE, const F77_REAL* RSCALE,
-                             F77_INT& M, F77_REAL* V,
-                             const F77_INT& LDV, F77_INT& INFO
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (zggbal, ZGGBAL) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT& N, F77_DBLE_CMPLX* A,
-                             const F77_INT& LDA, F77_DBLE_CMPLX* B,
-                             const F77_INT& LDB,
-                             F77_INT& ILO, F77_INT& IHI,
-                             F77_DBLE* LSCALE, F77_DBLE* RSCALE,
-                             F77_DBLE* WORK, F77_INT& INFO
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (cggbal, CGGBAL) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT& N,
-                             F77_CMPLX* A, const F77_INT& LDA,
-                             F77_CMPLX* B, const F77_INT& LDB,
-                             F77_INT& ILO, F77_INT& IHI,
-                             F77_REAL* LSCALE, F77_REAL* RSCALE,
-                             F77_REAL* WORK, F77_INT& INFO
-                             F77_CHAR_ARG_LEN_DECL);
-}
-
 namespace octave
 {
 namespace math
--- a/liboctave/numeric/gsvd.cc	Tue Aug 16 21:38:58 2016 -0700
+++ b/liboctave/numeric/gsvd.cc	Wed Aug 17 00:18:08 2016 -0400
@@ -20,80 +20,14 @@
 #endif
 
 #include "gsvd.h"
-#include "f77-fcn.h"
 #include "lo-error.h"
+#include "lo-lapack-proto.h"
 #include "CMatrix.h"
 #include "dDiagMatrix.h"
 #include "dMatrix.h"
 
 #include <vector>
 
-extern "C"
-{
-  F77_RET_T
-  F77_FUNC (dggsvd, DGGSVD)
-   (
-     F77_CONST_CHAR_ARG_DECL,   // JOBU    (input) CHARACTER*1
-     F77_CONST_CHAR_ARG_DECL,   // JOBV    (input) CHARACTER*1
-     F77_CONST_CHAR_ARG_DECL,   // JOBQ    (input) CHARACTER*1
-     const F77_INT&,            // M       (input) INTEGER
-     const F77_INT&,            // N       (input) INTEGER
-     const F77_INT&,            // P       (input) INTEGER
-     F77_INT &,                 // K       (output) INTEGER
-     F77_INT &,                 // L       (output) INTEGER
-     F77_DBLE*,                 // A       (input/output) DOUBLE PRECISION array, dimension (LDA,N)
-     const F77_INT&,            // LDA     (input) INTEGER
-     F77_DBLE*,                 // B       (input/output) DOUBLE PRECISION array, dimension (LDB,N)
-     const F77_INT&,            // LDB     (input) INTEGER
-     F77_DBLE*,                 // ALPHA   (output) DOUBLE PRECISION array, dimension (N)
-     F77_DBLE*,                 // BETA    (output) DOUBLE PRECISION array, dimension (N)
-     F77_DBLE*,                 // U       (output) DOUBLE PRECISION array, dimension (LDU,M)
-     const F77_INT&,            // LDU     (input) INTEGER
-     F77_DBLE*,                 // V       (output) DOUBLE PRECISION array, dimension (LDV,P)
-     const F77_INT&,            // LDV     (input) INTEGER
-     F77_DBLE*,                 // Q       (output) DOUBLE PRECISION array, dimension (LDQ,N)
-     const F77_INT&,            // LDQ     (input) INTEGER
-     F77_DBLE*,                 // WORK    (workspace) DOUBLE PRECISION array
-     F77_INT*,                  // IWORK   (workspace/output) INTEGER array, dimension (N)
-     F77_INT&                   // INFO    (output)INTEGER
-     F77_CHAR_ARG_LEN_DECL
-     F77_CHAR_ARG_LEN_DECL
-     F77_CHAR_ARG_LEN_DECL
-     );
-
-  F77_RET_T
-  F77_FUNC (zggsvd, ZGGSVD)
-   (
-     F77_CONST_CHAR_ARG_DECL,   // JOBU    (input) CHARACTER*1
-     F77_CONST_CHAR_ARG_DECL,   // JOBV    (input) CHARACTER*1
-     F77_CONST_CHAR_ARG_DECL,   // JOBQ    (input) CHARACTER*1
-     const F77_INT&,            // M       (input) INTEGER
-     const F77_INT&,            // N       (input) INTEGER
-     const F77_INT&,            // P       (input) INTEGER
-     F77_INT &,                 // K       (output) INTEGER
-     F77_INT &,                 // L       (output) INTEGER
-     F77_DBLE_CMPLX*,           // A       (input/output) COMPLEX*16 array, dimension (LDA,N)
-     const F77_INT&,            // LDA     (input) INTEGER
-     F77_DBLE_CMPLX*,           // B       (input/output) COMPLEX*16 array, dimension (LDB,N)
-     const F77_INT&,            // LDB     (input) INTEGER
-     F77_DBLE*,                 // ALPHA   (output) DOUBLE PRECISION array, dimension (N)
-     F77_DBLE*,                 // BETA    (output) DOUBLE PRECISION array, dimension (N)
-     F77_DBLE_CMPLX*,           // U       (output) COMPLEX*16 array, dimension (LDU,M)
-     const F77_INT&,            // LDU     (input) INTEGER
-     F77_DBLE_CMPLX*,           // V       (output) COMPLEX*16 array, dimension (LDV,P)
-     const F77_INT&,            // LDV     (input) INTEGER
-     F77_DBLE_CMPLX*,           // Q       (output) COMPLEX*16 array, dimension (LDQ,N)
-     const F77_INT&,            // LDQ     (input) INTEGER
-     F77_DBLE_CMPLX*,           // WORK    (workspace) COMPLEX*16 array
-     F77_DBLE*,                 // RWORK   (workspace) DOUBLE PRECISION array
-     F77_INT*,                  // IWORK   (workspace/output) INTEGER array, dimension (N)
-     F77_INT&                   // INFO    (output)INTEGER
-     F77_CHAR_ARG_LEN_DECL
-     F77_CHAR_ARG_LEN_DECL
-     F77_CHAR_ARG_LEN_DECL
-     );
-}
-
 template <>
 void
 gsvd<Matrix>::ggsvd (char& jobu, char& jobv, char& jobq, octave_idx_type m,
--- a/liboctave/numeric/hess.cc	Tue Aug 16 21:38:58 2016 -0700
+++ b/liboctave/numeric/hess.cc	Wed Aug 17 00:18:08 2016 -0400
@@ -26,132 +26,11 @@
 
 #include "CMatrix.h"
 #include "dMatrix.h"
-#include "f77-fcn.h"
 #include "fCMatrix.h"
 #include "fMatrix.h"
 #include "hess.h"
 #include "lo-error.h"
-
-extern "C"
-{
-  F77_RET_T
-  F77_FUNC (dgebal, DGEBAL) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_DBLE*,
-                             const F77_INT&, F77_INT&,
-                             F77_INT&, F77_DBLE*, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (dgehrd, DGEHRD) (const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_DBLE*,
-                             const F77_INT&, F77_DBLE*, F77_DBLE*,
-                             const F77_INT&, F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (dorghr, DORGHR) (const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_DBLE*,
-                             const F77_INT&, F77_DBLE*, F77_DBLE*,
-                             const F77_INT&, F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (dgebak, DGEBAK) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_DBLE*,
-                             const F77_INT&, F77_DBLE*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (sgebal, SGEBAL) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_REAL*,
-                             const F77_INT&, F77_INT&,
-                             F77_INT&, F77_REAL*, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (sgehrd, SGEHRD) (const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_REAL*,
-                             const F77_INT&, F77_REAL*, F77_REAL*,
-                             const F77_INT&, F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (sorghr, SORGHR) (const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_REAL*,
-                             const F77_INT&, F77_REAL*, F77_REAL*,
-                             const F77_INT&, F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (sgebak, SGEBAK) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_REAL*,
-                             const F77_INT&, F77_REAL*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (zgebal, ZGEBAL) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_INT&,
-                             F77_INT&, F77_DBLE*, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (zgehrd, ZGEHRD) (const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_DBLE_CMPLX*, F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (zunghr, ZUNGHR) (const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_DBLE_CMPLX*, F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (zgebak, ZGEBAK) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_DBLE*,
-                             const F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (cgebal, CGEBAL) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_CMPLX*,
-                             const F77_INT&, F77_INT&,
-                             F77_INT&, F77_REAL*, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (cgehrd, CGEHRD) (const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_CMPLX*,
-                             const F77_INT&, F77_CMPLX*,
-                             F77_CMPLX*, const F77_INT&,
-                             F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (cunghr, CUNGHR) (const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_CMPLX*,
-                             const F77_INT&, F77_CMPLX*,
-                             F77_CMPLX*, const F77_INT&,
-                             F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (cgebak, CGEBAK) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_REAL*,
-                             const F77_INT&, F77_CMPLX*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-}
+#include "lo-lapack-proto.h"
 
 namespace octave
 {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/liboctave/numeric/lo-amos-proto.h	Wed Aug 17 00:18:08 2016 -0400
@@ -0,0 +1,124 @@
+/*
+
+Copyright (C) 2016 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_lo_amos_proto_h)
+#define octave_lo_amos_proto_h 1
+
+#include "octave-config.h"
+
+#include "f77-fcn.h"
+
+extern "C"
+{
+  // AIRY
+
+  F77_RET_T
+  F77_FUNC (cairy, CAIRY) (const F77_CMPLX*, const F77_INT&,
+                           const F77_INT&, F77_CMPLX*,
+                           F77_INT&, F77_INT&);
+
+  F77_RET_T
+  F77_FUNC (zairy, ZAIRY) (const F77_DBLE&, const F77_DBLE&,
+                           const F77_INT&, const F77_INT&,
+                           F77_DBLE&, F77_DBLE&, F77_INT&,
+                           F77_INT&);
+
+  // BESH
+
+  F77_RET_T
+  F77_FUNC (cbesh, CBESH) (const F77_CMPLX*, const F77_REAL&,
+                           const F77_INT&, const F77_INT&,
+                           const F77_INT&, F77_CMPLX*,
+                           F77_INT&, F77_INT&);
+
+  F77_RET_T
+  F77_FUNC (zbesh, ZBESH) (const F77_DBLE&, const F77_DBLE&, const F77_DBLE&,
+                           const F77_INT&, const F77_INT&,
+                           const F77_INT&, F77_DBLE*, F77_DBLE*,
+                           F77_INT&, F77_INT&);
+
+  // BESI
+
+  F77_RET_T
+  F77_FUNC (cbesi, CBESI) (const F77_CMPLX*, const F77_REAL&,
+                           const F77_INT&, const F77_INT&,
+                           F77_CMPLX*, F77_INT&, F77_INT&);
+
+  F77_RET_T
+  F77_FUNC (zbesi, ZBESI) (const F77_DBLE&, const F77_DBLE&, const F77_DBLE&,
+                           const F77_INT&, const F77_INT&,
+                           F77_DBLE*, F77_DBLE*, F77_INT&,
+                           F77_INT&);
+
+  // BESJ
+
+  F77_RET_T
+  F77_FUNC (cbesj, cBESJ) (const F77_CMPLX*, const F77_REAL&,
+                           const F77_INT&, const F77_INT&,
+                           F77_CMPLX*, F77_INT&, F77_INT&);
+
+  F77_RET_T
+  F77_FUNC (zbesj, ZBESJ) (const F77_DBLE&, const F77_DBLE&, const F77_DBLE&,
+                           const F77_INT&, const F77_INT&,
+                           F77_DBLE*, F77_DBLE*, F77_INT&,
+                           F77_INT&);
+
+  // BESK
+
+  F77_RET_T
+  F77_FUNC (cbesk, CBESK) (const F77_CMPLX*, const F77_REAL&,
+                           const F77_INT&, const F77_INT&,
+                           F77_CMPLX*, F77_INT&, F77_INT&);
+
+  F77_RET_T
+  F77_FUNC (zbesk, ZBESK) (const F77_DBLE&, const F77_DBLE&, const F77_DBLE&,
+                           const F77_INT&, const F77_INT&,
+                           F77_DBLE*, F77_DBLE*, F77_INT&,
+                           F77_INT&);
+
+  // BESY
+
+  F77_RET_T
+  F77_FUNC (cbesy, CBESY) (const F77_CMPLX*, const F77_REAL&,
+                           const F77_INT&, const F77_INT&,
+                           F77_CMPLX*, F77_INT&,
+                           F77_CMPLX*, F77_INT&);
+
+  F77_RET_T
+  F77_FUNC (zbesy, ZBESY) (const F77_DBLE&, const F77_DBLE&, const F77_DBLE&,
+                           const F77_INT&, const F77_INT&,
+                           F77_DBLE*, F77_DBLE*, F77_INT&, F77_DBLE*,
+                           F77_DBLE*, F77_INT&);
+
+  // BIRY
+
+  F77_RET_T
+  F77_FUNC (cbiry, CBIRY) (const F77_CMPLX*, const F77_INT&, const F77_INT&,
+                           const F77_CMPLX*, F77_INT&);
+
+  F77_RET_T
+  F77_FUNC (zbiry, ZBIRY) (const F77_DBLE&, const F77_DBLE&,
+                           const F77_INT&, const F77_INT&,
+                           F77_DBLE&, F77_DBLE&, F77_INT&);
+}
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/liboctave/numeric/lo-arpack-proto.h	Wed Aug 17 00:18:08 2016 -0400
@@ -0,0 +1,139 @@
+/*
+
+Copyright (C) 2016 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_lo_arpack_proto_h)
+#define octave_lo_arpack_proto_h 1
+
+#include "octave-config.h"
+
+#include "f77-fcn.h"
+
+extern "C"
+{
+
+#if defined (HAVE_ARPACK)
+
+  // NAUPD
+
+  F77_RET_T
+  F77_FUNC (dnaupd, DNAUPD) (F77_INT&,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&,
+                             F77_CONST_CHAR_ARG_DECL,
+                             F77_INT&, const F77_DBLE&,
+                             F77_DBLE*, const F77_INT&, F77_DBLE*,
+                             const F77_INT&, F77_INT*,
+                             F77_INT*, F77_DBLE*, F77_DBLE*,
+                             const F77_INT&, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (znaupd, ZNAUPD) (F77_INT&,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_DBLE&,
+                             F77_DBLE_CMPLX*, const F77_INT&, F77_DBLE_CMPLX*,
+                             const F77_INT&, F77_INT*,
+                             F77_INT*, F77_DBLE_CMPLX*, F77_DBLE_CMPLX*,
+                             const F77_INT&, F77_DBLE *, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+
+  // NEUPD
+
+  F77_RET_T
+  F77_FUNC (dneupd, DNEUPD) (const F77_INT&,
+                             F77_CONST_CHAR_ARG_DECL,
+                             F77_INT*, F77_DBLE*, F77_DBLE*,
+                             F77_DBLE*, const F77_INT&, const F77_DBLE&,
+                             const F77_DBLE&, F77_DBLE*,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&,
+                             F77_CONST_CHAR_ARG_DECL,
+                             F77_INT&, const F77_DBLE&, F77_DBLE*,
+                             const F77_INT&, F77_DBLE*,
+                             const F77_INT&, F77_INT*,
+                             F77_INT*, F77_DBLE*, F77_DBLE*,
+                             const F77_INT&, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (zneupd, ZNEUPD) (const F77_INT&,
+                             F77_CONST_CHAR_ARG_DECL,
+                             F77_INT*, F77_DBLE_CMPLX*, F77_DBLE_CMPLX*,
+                             const F77_INT&, const F77_DBLE_CMPLX*,
+                             F77_DBLE_CMPLX*,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_DBLE&,
+                             F77_DBLE_CMPLX*, const F77_INT&, F77_DBLE_CMPLX*,
+                             const F77_INT&, F77_INT*,
+                             F77_INT*, F77_DBLE_CMPLX*, F77_DBLE_CMPLX*,
+                             const F77_INT&, F77_DBLE *, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+
+  // SAUPD
+
+  F77_RET_T
+  F77_FUNC (dsaupd, DSAUPD) (F77_INT&,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_DBLE&,
+                             F77_DBLE*, const F77_INT&, F77_DBLE*,
+                             const F77_INT&, F77_INT*,
+                             F77_INT*, F77_DBLE*, F77_DBLE*,
+                             const F77_INT&, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+
+  // SEUPD
+
+  F77_RET_T
+  F77_FUNC (dseupd, DSEUPD) (const F77_INT&,
+                             F77_CONST_CHAR_ARG_DECL,
+                             F77_INT*, F77_DBLE*, F77_DBLE*,
+                             const F77_INT&, const F77_DBLE&,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_DBLE&, F77_DBLE*,
+                             const F77_INT&, F77_DBLE*,
+                             const F77_INT&, F77_INT*,
+                             F77_INT*, F77_DBLE*, F77_DBLE*,
+                             const F77_INT&, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+
+#endif
+
+}
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/liboctave/numeric/lo-blas-proto.h	Wed Aug 17 00:18:08 2016 -0400
@@ -0,0 +1,208 @@
+/*
+
+Copyright (C) 2016 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_lo_blas_proto_h)
+#define octave_lo_blas_proto_h 1
+
+#include "octave-config.h"
+
+#include "f77-fcn.h"
+
+extern "C"
+{
+  // DOT (liboctave/cruft/blas-xtra)
+
+  F77_RET_T
+  F77_FUNC (xddot, XDDOT) (const F77_INT&, const F77_DBLE*,
+                           const F77_INT&, const F77_DBLE*,
+                           const F77_INT&, F77_DBLE&);
+
+  F77_RET_T
+  F77_FUNC (xsdot, XSDOT) (const F77_INT&, const F77_REAL*,
+                           const F77_INT&, const F77_REAL*,
+                           const F77_INT&, F77_REAL&);
+
+  // DOT3
+
+  F77_RET_T
+  F77_FUNC (ddot3, DDOT3) (const F77_INT&, const F77_INT&,
+                           const F77_INT&, const F77_DBLE*,
+                           const F77_DBLE*, F77_DBLE*);
+
+  F77_RET_T
+  F77_FUNC (sdot3, SDOT3) (const F77_INT&, const F77_INT&,
+                           const F77_INT&, const F77_REAL*,
+                           const F77_REAL*, F77_REAL*);
+
+  // DOTC (liboctave/cruft/blas-xtra)
+
+  F77_RET_T
+  F77_FUNC (xcdotc, XCDOTC) (const F77_INT&, const F77_CMPLX*,
+                             const F77_INT&, const F77_CMPLX*,
+                             const F77_INT&, F77_CMPLX*);
+
+  F77_RET_T
+  F77_FUNC (xzdotc, XZDOTC) (const F77_INT&, const F77_DBLE_CMPLX*,
+                             const F77_INT&, const F77_DBLE_CMPLX*,
+                             const F77_INT&, F77_DBLE_CMPLX*);
+
+  // DOTC3
+
+  F77_RET_T
+  F77_FUNC (cdotc3, CDOTC3) (const F77_INT&, const F77_INT&,
+                             const F77_INT&, const F77_CMPLX*,
+                             const F77_CMPLX*, F77_CMPLX*);
+
+  F77_RET_T
+  F77_FUNC (zdotc3, ZDOTC3) (const F77_INT&, const F77_INT&,
+                             const F77_INT&, const F77_DBLE_CMPLX*,
+                             const F77_DBLE_CMPLX*, F77_DBLE_CMPLX*);
+
+  // DOTU (liboctave/cruft/blas-xtra)
+
+  F77_RET_T
+  F77_FUNC (xcdotu, XCDOTU) (const F77_INT&, const F77_CMPLX*,
+                             const F77_INT&, const F77_CMPLX*,
+                             const F77_INT&, F77_CMPLX*);
+
+  F77_RET_T
+  F77_FUNC (xzdotu, XZDOTU) (const F77_INT&, const F77_DBLE_CMPLX*,
+                             const F77_INT&, const F77_DBLE_CMPLX*,
+                             const F77_INT&, F77_DBLE_CMPLX*);
+
+  // GEMM
+
+  F77_RET_T
+  F77_FUNC (cgemm, CGEMM) (F77_CONST_CHAR_ARG_DECL,
+                           F77_CONST_CHAR_ARG_DECL,
+                           const F77_INT&, const F77_INT&,
+                           const F77_INT&, const F77_CMPLX&,
+                           const F77_CMPLX*, const F77_INT&,
+                           const F77_CMPLX*, const F77_INT&,
+                           const F77_CMPLX&, F77_CMPLX*,
+                           const F77_INT&
+                           F77_CHAR_ARG_LEN_DECL
+                           F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (dgemm, DGEMM) (F77_CONST_CHAR_ARG_DECL,
+                           F77_CONST_CHAR_ARG_DECL,
+                           const F77_INT&, const F77_INT&,
+                           const F77_INT&, const F77_DBLE&,
+                           const F77_DBLE*, const F77_INT&,
+                           const F77_DBLE*, const F77_INT&,
+                           const F77_DBLE&, F77_DBLE*, const F77_INT&
+                           F77_CHAR_ARG_LEN_DECL
+                           F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (sgemm, SGEMM) (F77_CONST_CHAR_ARG_DECL,
+                           F77_CONST_CHAR_ARG_DECL,
+                           const F77_INT&, const F77_INT&,
+                           const F77_INT&, const F77_REAL&,
+                           const F77_REAL*, const F77_INT&,
+                           const F77_REAL*, const F77_INT&,
+                           const F77_REAL&, F77_REAL*,
+                           const F77_INT&
+                           F77_CHAR_ARG_LEN_DECL
+                           F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (zgemm, ZGEMM) (F77_CONST_CHAR_ARG_DECL,
+                           F77_CONST_CHAR_ARG_DECL,
+                           const F77_INT&, const F77_INT&,
+                           const F77_INT&, const F77_DBLE_CMPLX&,
+                           const F77_DBLE_CMPLX*, const F77_INT&,
+                           const F77_DBLE_CMPLX*, const F77_INT&,
+                           const F77_DBLE_CMPLX&, F77_DBLE_CMPLX*, const F77_INT&
+                           F77_CHAR_ARG_LEN_DECL
+                           F77_CHAR_ARG_LEN_DECL);
+
+  // GEMV
+
+  F77_RET_T
+  F77_FUNC (cgemv, CGEMV) (F77_CONST_CHAR_ARG_DECL,
+                           const F77_INT&, const F77_INT&,
+                           const F77_CMPLX&, const F77_CMPLX*,
+                           const F77_INT&, const F77_CMPLX*,
+                           const F77_INT&, const F77_CMPLX&,
+                           F77_CMPLX*, const F77_INT&
+                           F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (dgemv, DGEMV) (F77_CONST_CHAR_ARG_DECL,
+                           const F77_INT&, const F77_INT&,
+                           const F77_DBLE&, const F77_DBLE*,
+                           const F77_INT&, const F77_DBLE*,
+                           const F77_INT&, const F77_DBLE&,
+                           F77_DBLE*, const F77_INT&
+                           F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (sgemv, SGEMV) (F77_CONST_CHAR_ARG_DECL,
+                           const F77_INT&, const F77_INT&,
+                           const F77_REAL&, const F77_REAL*,
+                           const F77_INT&, const F77_REAL*,
+                           const F77_INT&, const F77_REAL&,
+                           F77_REAL*, const F77_INT&
+                           F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (zgemv, ZGEMV) (F77_CONST_CHAR_ARG_DECL,
+                           const F77_INT&, const F77_INT&,
+                           const F77_DBLE_CMPLX&, const F77_DBLE_CMPLX*,
+                           const F77_INT&, const F77_DBLE_CMPLX*,
+                           const F77_INT&, const F77_DBLE_CMPLX&,
+                           F77_DBLE_CMPLX*, const F77_INT&
+                           F77_CHAR_ARG_LEN_DECL);
+
+  // MATM3
+
+  F77_RET_T
+  F77_FUNC (cmatm3, CMATM3) (const F77_INT&, const F77_INT&,
+                             const F77_INT&, const F77_INT&,
+                             const F77_CMPLX*, const F77_CMPLX*,
+                             F77_CMPLX*);
+  F77_RET_T
+  F77_FUNC (dmatm3, DMATM3) (const F77_INT&, const F77_INT&,
+                             const F77_INT&, const F77_INT&,
+                             const F77_DBLE*, const F77_DBLE*, F77_DBLE*);
+
+  F77_RET_T
+  F77_FUNC (smatm3, SMATM3) (const F77_INT&, const F77_INT&,
+                             const F77_INT&, const F77_INT&,
+                             const F77_REAL*, const F77_REAL*, F77_REAL*);
+
+  F77_RET_T
+  F77_FUNC (zmatm3, ZMATM3) (const F77_INT&, const F77_INT&,
+                             const F77_INT&, const F77_INT&,
+                             const F77_DBLE_CMPLX*, const F77_DBLE_CMPLX*,
+                             F77_DBLE_CMPLX*);
+
+  // XERBLA
+
+  F77_RET_T
+  F77_FUNC (xerbla, XERBLA) (F77_CONST_CHAR_ARG_DECL, const F77_INT&
+                             F77_CHAR_ARG_LEN_DECL);
+}
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/liboctave/numeric/lo-fftpack-proto.h	Wed Aug 17 00:18:08 2016 -0400
@@ -0,0 +1,60 @@
+/*
+
+Copyright (C) 2016 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_lo_fftpack_proto_h)
+#define octave_lo_fftpack_proto_h 1
+
+#include "octave-config.h"
+
+#include "f77-fcn.h"
+
+extern "C"
+{
+  // Note that the original complex fft routines were not written for
+  // float or double complex arguments.  They have been modified by
+  // adding an implicit float or double precision (a-h,o-z) statement
+  // at the beginning of each subroutine.
+
+  // FFTB
+
+  F77_RET_T
+  F77_FUNC (cfftb, CFFTB) (const F77_INT&, F77_CMPLX*, F77_CMPLX*);
+
+  F77_RET_T
+  F77_FUNC (zfftb, ZFFTB) (const F77_INT&, F77_DBLE_CMPLX*, F77_DBLE_CMPLX*);
+
+  // FFTF
+
+  F77_RET_T
+  F77_FUNC (cfftf, CFFTF) (const F77_INT&, F77_CMPLX*, F77_CMPLX*);
+
+  F77_RET_T
+  F77_FUNC (zfftf, ZFFTF) (const F77_INT&, F77_DBLE_CMPLX*, F77_DBLE_CMPLX*);
+
+  // FFTI
+
+  F77_RET_T
+  F77_FUNC (cffti, CFFTI) (const F77_INT&, F77_CMPLX*);
+
+  F77_RET_T
+  F77_FUNC (zffti, ZFFTI) (const F77_INT&, F77_DBLE_CMPLX*);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/liboctave/numeric/lo-lapack-proto.h	Wed Aug 17 00:18:08 2016 -0400
@@ -0,0 +1,1668 @@
+/*
+
+Copyright (C) 2016 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_lo_lapack_proto_h)
+#define octave_lo_lapack_proto_h 1
+
+#include "octave-config.h"
+
+#include "f77-fcn.h"
+#include "oct-cmplx.h"
+
+extern "C"
+{
+  // GBCON
+
+  F77_RET_T
+  F77_FUNC (dgbcon, DGBCON) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_DBLE*,
+                             const F77_INT&, const F77_INT*,
+                             const F77_DBLE&, F77_DBLE&, F77_DBLE*,
+                             F77_INT*, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (zgbcon, ZGBCON) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_DBLE_CMPLX*,
+                             const F77_INT&, const F77_INT*,
+                             const F77_DBLE&, F77_DBLE&, F77_DBLE_CMPLX*, F77_DBLE*,
+                             F77_INT&
+                             F77_CHAR_ARG_LEN_DECL);
+
+  // GBTRF
+
+  F77_RET_T
+  F77_FUNC (dgbtrf, DGBTRF) (const F77_INT&, const F77_INT&,
+                             const F77_INT&, const F77_INT&,
+                             F77_DBLE*, const F77_INT&,
+                             F77_INT*, F77_INT&);
+
+  F77_RET_T
+  F77_FUNC (zgbtrf, ZGBTRF) (const F77_INT&, const F77_INT&,
+                             const F77_INT&, const F77_INT&,
+                             F77_DBLE_CMPLX*, const F77_INT&,
+                             F77_INT*, F77_INT&);
+
+  // GBTRS
+
+  F77_RET_T
+  F77_FUNC (dgbtrs, DGBTRS) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_INT&,
+                             const F77_INT&, const F77_INT&,
+                             const F77_DBLE*, const F77_INT&,
+                             const F77_INT*, F77_DBLE*,
+                             const F77_INT&, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (zgbtrs, ZGBTRS) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_INT&,
+                             const F77_INT&, const F77_INT&,
+                             const F77_DBLE_CMPLX*, const F77_INT&,
+                             const F77_INT*, F77_DBLE_CMPLX*,
+                             const F77_INT&, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL);
+
+  // GEBAL
+
+  F77_RET_T
+  F77_FUNC (cgebal, CGEBAL) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, F77_CMPLX*,
+                             const F77_INT&, F77_INT&,
+                             F77_INT&, F77_REAL*, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (dgebal, DGEBAL) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, F77_DBLE*,
+                             const F77_INT&, F77_INT&,
+                             F77_INT&, F77_DBLE*, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (sgebal, SGEBAL) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, F77_REAL*,
+                             const F77_INT&, F77_INT&,
+                             F77_INT&, F77_REAL*, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (zgebal, ZGEBAL) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, F77_DBLE_CMPLX*,
+                             const F77_INT&, F77_INT&,
+                             F77_INT&, F77_DBLE*, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL);
+
+  // GEBAK
+
+  F77_RET_T
+  F77_FUNC (cgebak, CGEBAK) (F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_INT&,
+                             const F77_INT&, const F77_REAL*,
+                             const F77_INT&, F77_CMPLX*,
+                             const F77_INT&, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (dgebak, DGEBAK) (F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_INT&,
+                             const F77_INT&, const F77_DBLE*,
+                             const F77_INT&, F77_DBLE*,
+                             const F77_INT&, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (sgebak, SGEBAK) (F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_INT&,
+                             const F77_INT&, const F77_REAL*,
+                             const F77_INT&, F77_REAL*,
+                             const F77_INT&, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (zgebak, ZGEBAK) (F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_INT&,
+                             const F77_INT&, const F77_DBLE*,
+                             const F77_INT&, F77_DBLE_CMPLX*,
+                             const F77_INT&, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+
+  // GECON
+
+  F77_RET_T
+  F77_FUNC (cgecon, CGECON) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, F77_CMPLX*,
+                             const F77_INT&, const F77_REAL&, F77_REAL&,
+                             F77_CMPLX*, F77_REAL*, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (dgecon, DGECON) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, F77_DBLE*,
+                             const F77_INT&, const F77_DBLE&, F77_DBLE&,
+                             F77_DBLE*, F77_INT*, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (sgecon, SGECON) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, F77_REAL*,
+                             const F77_INT&, const F77_REAL&, F77_REAL&,
+                             F77_REAL*, F77_INT*, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (zgecon, ZGECON) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, F77_DBLE_CMPLX*,
+                             const F77_INT&, const F77_DBLE&, F77_DBLE&,
+                             F77_DBLE_CMPLX*, F77_DBLE*, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL);
+
+  // GEHRD
+
+  F77_RET_T
+  F77_FUNC (cgehrd, CGEHRD) (const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_CMPLX*,
+                             const F77_INT&, F77_CMPLX*,
+                             F77_CMPLX*, const F77_INT&,
+                             F77_INT&);
+
+  F77_RET_T
+  F77_FUNC (dgehrd, DGEHRD) (const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_DBLE*,
+                             const F77_INT&, F77_DBLE*, F77_DBLE*,
+                             const F77_INT&, F77_INT&);
+
+  F77_RET_T
+  F77_FUNC (sgehrd, SGEHRD) (const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_REAL*,
+                             const F77_INT&, F77_REAL*, F77_REAL*,
+                             const F77_INT&, F77_INT&);
+
+  F77_RET_T
+  F77_FUNC (zgehrd, ZGEHRD) (const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_DBLE_CMPLX*,
+                             const F77_INT&, F77_DBLE_CMPLX*, F77_DBLE_CMPLX*,
+                             const F77_INT&, F77_INT&);
+
+  // GEQP3
+
+  F77_RET_T
+  F77_FUNC (cgeqp3, CGEQP3) (const F77_INT&, const F77_INT&,
+                             F77_CMPLX*, const F77_INT&,
+                             F77_INT*, F77_CMPLX*, F77_CMPLX*,
+                             const F77_INT&, F77_REAL*, F77_INT&);
+
+  F77_RET_T
+  F77_FUNC (dgeqp3, DGEQP3) (const F77_INT&, const F77_INT&,
+                             F77_DBLE*, const F77_INT&,
+                             F77_INT*, F77_DBLE*, F77_DBLE*,
+                             const F77_INT&, F77_INT&);
+
+  F77_RET_T
+  F77_FUNC (sgeqp3, SGEQP3) (const F77_INT&, const F77_INT&,
+                             F77_REAL*, const F77_INT&, F77_INT*,
+                             F77_REAL*, F77_REAL*, const F77_INT&,
+                             F77_INT&);
+  F77_RET_T
+  F77_FUNC (zgeqp3, ZGEQP3) (const F77_INT&, const F77_INT&,
+                             F77_DBLE_CMPLX*, const F77_INT&,
+                             F77_INT*, F77_DBLE_CMPLX*, F77_DBLE_CMPLX*,
+                             const F77_INT&, F77_DBLE*,
+                             F77_INT&);
+
+  // GEQRF
+
+  F77_RET_T
+  F77_FUNC (cgeqrf, CGEQRF) (const F77_INT&, const F77_INT&,
+                             F77_CMPLX*, const F77_INT&,
+                             F77_CMPLX*, F77_CMPLX*,
+                             const F77_INT&, F77_INT&);
+
+  F77_RET_T
+  F77_FUNC (dgeqrf, DGEQRF) (const F77_INT&, const F77_INT&,
+                             F77_DBLE*, const F77_INT&, F77_DBLE*,
+                             F77_DBLE*, const F77_INT&,
+                             F77_INT&);
+
+  F77_RET_T
+  F77_FUNC (sgeqrf, SGEQRF) (const F77_INT&, const F77_INT&,
+                             F77_REAL*, const F77_INT&, F77_REAL*, F77_REAL*,
+                             const F77_INT&, F77_INT&);
+
+  F77_RET_T
+  F77_FUNC (zgeqrf, ZGEQRF) (const F77_INT&, const F77_INT&,
+                             F77_DBLE_CMPLX*, const F77_INT&, F77_DBLE_CMPLX*,
+                             F77_DBLE_CMPLX*, const F77_INT&,
+                             F77_INT&);
+
+  // GESDD
+
+  F77_RET_T
+  F77_FUNC (cgesdd, CGESDD) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_INT&,
+                             F77_CMPLX*, const F77_INT&, F77_REAL*,
+                             F77_CMPLX*, const F77_INT&,
+                             F77_CMPLX*, const F77_INT&,
+                             F77_CMPLX*, const F77_INT&,
+                             F77_REAL*, F77_INT *, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (dgesdd, DGESDD) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_INT&,
+                             F77_DBLE*, const F77_INT&, F77_DBLE*,
+                             F77_DBLE*, const F77_INT&, F77_DBLE*,
+                             const F77_INT&, F77_DBLE*,
+                             const F77_INT&, F77_INT *,
+                             F77_INT&
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (sgesdd, SGESDD) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_INT&,
+                             F77_REAL*, const F77_INT&, F77_REAL*,
+                             F77_REAL*, const F77_INT&, F77_REAL*,
+                             const F77_INT&, F77_REAL*,
+                             const F77_INT&, F77_INT *,
+                             F77_INT&
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (zgesdd, ZGESDD) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_INT&,
+                             F77_DBLE_CMPLX*, const F77_INT&,
+                             F77_DBLE*, F77_DBLE_CMPLX*, const F77_INT&,
+                             F77_DBLE_CMPLX*, const F77_INT&, F77_DBLE_CMPLX*,
+                             const F77_INT&, F77_DBLE*,
+                             F77_INT *, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL);
+  // GESVD
+
+  F77_RET_T
+  F77_FUNC (cgesvd, CGESVD) (F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_INT&,
+                             F77_CMPLX*, const F77_INT&, F77_REAL*,
+                             F77_CMPLX*, const F77_INT&,
+                             F77_CMPLX*, const F77_INT&,
+                             F77_CMPLX*, const F77_INT&,
+                             F77_REAL*, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (dgesvd, DGESVD) (F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_INT&,
+                             F77_DBLE*, const F77_INT&, F77_DBLE*,
+                             F77_DBLE*, const F77_INT&, F77_DBLE*,
+                             const F77_INT&, F77_DBLE*,
+                             const F77_INT&, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (sgesvd, SGESVD) (F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_INT&,
+                             F77_REAL*, const F77_INT&, F77_REAL*,
+                             F77_REAL*, const F77_INT&, F77_REAL*,
+                             const F77_INT&, F77_REAL*,
+                             const F77_INT&, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (zgesvd, ZGESVD) (F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_INT&,
+                             F77_DBLE_CMPLX*, const F77_INT&,
+                             F77_DBLE*, F77_DBLE_CMPLX*, const F77_INT&,
+                             F77_DBLE_CMPLX*, const F77_INT&, F77_DBLE_CMPLX*,
+                             const F77_INT&, F77_DBLE*, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+
+  // GEESX
+
+  typedef octave_idx_type (*double_selector) (const double&, const double&);
+  typedef octave_idx_type (*float_selector) (const float&, const float&);
+  typedef octave_idx_type (*complex_selector) (const Complex&);
+  typedef octave_idx_type (*float_complex_selector) (const FloatComplex&);
+
+  F77_RET_T
+  F77_FUNC (cgeesx, CGEESX) (F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             float_complex_selector,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, F77_CMPLX*,
+                             const F77_INT&, F77_INT&,
+                             F77_CMPLX*, F77_CMPLX*,
+                             const F77_INT&, F77_REAL&, F77_REAL&,
+                             F77_CMPLX*, const F77_INT&,
+                             F77_REAL*, F77_INT*, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (dgeesx, DGEESX) (F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             double_selector,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, F77_DBLE*,
+                             const F77_INT&, F77_INT&,
+                             F77_DBLE*, F77_DBLE*, F77_DBLE*, const F77_INT&,
+                             F77_DBLE&, F77_DBLE&, F77_DBLE*, const F77_INT&,
+                             F77_INT*, const F77_INT&,
+                             F77_INT*, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (sgeesx, SGEESX) (F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             float_selector,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, F77_REAL*,
+                             const F77_INT&, F77_INT&,
+                             F77_REAL*, F77_REAL*, F77_REAL*, const F77_INT&,
+                             F77_REAL&, F77_REAL&, F77_REAL*, const F77_INT&,
+                             F77_INT*, const F77_INT&,
+                             F77_INT*, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (zgeesx, ZGEESX) (F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             complex_selector,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, F77_DBLE_CMPLX*,
+                             const F77_INT&, F77_INT&,
+                             F77_DBLE_CMPLX*, F77_DBLE_CMPLX*, const F77_INT&,
+                             F77_DBLE&, F77_DBLE&, F77_DBLE_CMPLX*,
+                             const F77_INT&, F77_DBLE*,
+                             F77_INT*, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+
+  // GEEVX
+
+  F77_RET_T
+  F77_FUNC (cgeevx, CGEEVX) (F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, F77_CMPLX*,
+                             const F77_INT&, F77_CMPLX*, F77_CMPLX*,
+                             const F77_INT&, F77_CMPLX*,
+                             const F77_INT&, F77_INT&,
+                             F77_INT&, F77_REAL*, F77_REAL&, F77_REAL*,
+                             F77_REAL*, F77_CMPLX*, const F77_INT&,
+                             F77_REAL*, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (dgeevx, DGEEVX) (F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, F77_DBLE*,
+                             const F77_INT&, F77_DBLE*, F77_DBLE*,
+                             F77_DBLE*, const F77_INT&, F77_DBLE*,
+                             const F77_INT&, F77_INT&,
+                             F77_INT&, F77_DBLE*, F77_DBLE&,
+                             F77_DBLE*, F77_DBLE*, F77_DBLE*,
+                             const F77_INT&, F77_INT*,
+                             F77_INT&
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (sgeevx, SGEEVX) (F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, F77_REAL*,
+                             const F77_INT&, F77_REAL*, F77_REAL*, F77_REAL*,
+                             const F77_INT&, F77_REAL*,
+                             const F77_INT&, F77_INT&,
+                             F77_INT&, F77_REAL*, F77_REAL&, F77_REAL*,
+                             F77_REAL*, F77_REAL*, const F77_INT&,
+                             F77_INT*, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (zgeevx, ZGEEVX) (F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, F77_DBLE_CMPLX*,
+                             const F77_INT&, F77_DBLE_CMPLX*,
+                             F77_DBLE_CMPLX*, const F77_INT&, F77_DBLE_CMPLX*,
+                             const F77_INT&, F77_INT&,
+                             F77_INT&, F77_DBLE*, F77_DBLE&,
+                             F77_DBLE*, F77_DBLE*, F77_DBLE_CMPLX*,
+                             const F77_INT&, F77_DBLE*,
+                             F77_INT&
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+
+  // GELSD
+
+  F77_RET_T
+  F77_FUNC (cgelsd, CGELSD) (const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_CMPLX*,
+                             const F77_INT&, F77_CMPLX*,
+                             const F77_INT&, F77_REAL*, F77_REAL&,
+                             F77_INT&, F77_CMPLX*,
+                             const F77_INT&, F77_REAL*,
+                             F77_INT*, F77_INT&);
+
+  F77_RET_T
+  F77_FUNC (dgelsd, DGELSD) (const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_DBLE*,
+                             const F77_INT&, F77_DBLE*,
+                             const F77_INT&, F77_DBLE*, F77_DBLE&,
+                             F77_INT&, F77_DBLE*,
+                             const F77_INT&, F77_INT*,
+                             F77_INT&);
+
+  F77_RET_T
+  F77_FUNC (sgelsd, SGELSD) (const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_REAL*,
+                             const F77_INT&, F77_REAL*,
+                             const F77_INT&, F77_REAL*, F77_REAL&,
+                             F77_INT&, F77_REAL*,
+                             const F77_INT&, F77_INT*,
+                             F77_INT&);
+
+  F77_RET_T
+  F77_FUNC (zgelsd, ZGELSD) (const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_DBLE_CMPLX*,
+                             const F77_INT&, F77_DBLE_CMPLX*,
+                             const F77_INT&, F77_DBLE*, F77_DBLE&,
+                             F77_INT&, F77_DBLE_CMPLX*,
+                             const F77_INT&, F77_DBLE*,
+                             F77_INT*, F77_INT&);
+
+  // GELSY
+
+  F77_RET_T
+  F77_FUNC (cgelsy, CGELSY) (const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_CMPLX*,
+                             const F77_INT&, F77_CMPLX*,
+                             const F77_INT&, F77_INT*,
+                             F77_REAL&, F77_INT&, F77_CMPLX*,
+                             const F77_INT&, F77_REAL*, F77_INT&);
+
+  F77_RET_T
+  F77_FUNC (dgelsy, DGELSY) (const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_DBLE*,
+                             const F77_INT&, F77_DBLE*,
+                             const F77_INT&, F77_INT*,
+                             F77_DBLE&, F77_INT&, F77_DBLE*,
+                             const F77_INT&, F77_INT&);
+
+  F77_RET_T
+  F77_FUNC (sgelsy, SGELSY) (const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_REAL*,
+                             const F77_INT&, F77_REAL*,
+                             const F77_INT&, F77_INT*,
+                             F77_REAL&, F77_INT&, F77_REAL*,
+                             const F77_INT&, F77_INT&);
+
+  F77_RET_T
+  F77_FUNC (zgelsy, ZGELSY) (const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_DBLE_CMPLX*,
+                             const F77_INT&, F77_DBLE_CMPLX*,
+                             const F77_INT&, F77_INT*,
+                             F77_DBLE&, F77_INT&, F77_DBLE_CMPLX*,
+                             const F77_INT&, F77_DBLE*,
+                             F77_INT&);
+
+  // GETRF
+
+  F77_RET_T
+  F77_FUNC (cgetrf, CGETRF) (const F77_INT&, const F77_INT&,
+                             F77_CMPLX*, const F77_INT&,
+                             F77_INT*, F77_INT&);
+
+  F77_RET_T
+  F77_FUNC (dgetrf, DGETRF) (const F77_INT&, const F77_INT&,
+                             F77_DBLE*, const F77_INT&,
+                             F77_INT*, F77_INT&);
+
+  F77_RET_T
+  F77_FUNC (sgetrf, SGETRF) (const F77_INT&,
+                             const F77_INT&, F77_REAL*,
+                             const F77_INT&,
+                             F77_INT*, F77_INT&);
+
+  F77_RET_T
+  F77_FUNC (zgetrf, ZGETRF) (const F77_INT&, const F77_INT&,
+                             F77_DBLE_CMPLX*, const F77_INT&,
+                             F77_INT*, F77_INT&);
+
+  // GETRI
+
+  F77_RET_T
+  F77_FUNC (cgetri, CGETRI) (const F77_INT&, F77_CMPLX*,
+                             const F77_INT&, const F77_INT*,
+                             F77_CMPLX*, const F77_INT&,
+                             F77_INT&);
+
+  F77_RET_T
+  F77_FUNC (dgetri, DGETRI) (const F77_INT&, F77_DBLE*,
+                             const F77_INT&, const F77_INT*,
+                             F77_DBLE*, const F77_INT&,
+                             F77_INT&);
+
+  F77_RET_T
+  F77_FUNC (sgetri, SGETRI) (const F77_INT&, F77_REAL*,
+                             const F77_INT&, const F77_INT*,
+                             F77_REAL*, const F77_INT&, F77_INT&);
+
+  F77_RET_T
+  F77_FUNC (zgetri, ZGETRI) (const F77_INT&, F77_DBLE_CMPLX*,
+                             const F77_INT&, const F77_INT*,
+                             F77_DBLE_CMPLX*, const F77_INT&,
+                             F77_INT&);
+
+  // GETRS
+
+  F77_RET_T
+  F77_FUNC (cgetrs, CGETRS) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_INT&,
+                             F77_CMPLX*, const F77_INT&,
+                             const F77_INT*, F77_CMPLX*,
+                             const F77_INT&, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (dgetrs, DGETRS) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_INT&,
+                             const F77_DBLE*, const F77_INT&,
+                             const F77_INT*, F77_DBLE*,
+                             const F77_INT&, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (sgetrs, SGETRS) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_INT&,
+                             const F77_REAL*, const F77_INT&,
+                             const F77_INT*, F77_REAL*,
+                             const F77_INT&, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (zgetrs, ZGETRS) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_INT&,
+                             F77_DBLE_CMPLX*, const F77_INT&,
+                             const F77_INT*, F77_DBLE_CMPLX*,
+                             const F77_INT&, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL);
+
+  // GGBAL
+
+  F77_RET_T
+  F77_FUNC (cggbal, CGGBAL) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT& N,
+                             F77_CMPLX* A, const F77_INT& LDA,
+                             F77_CMPLX* B, const F77_INT& LDB,
+                             F77_INT& ILO, F77_INT& IHI,
+                             F77_REAL* LSCALE, F77_REAL* RSCALE,
+                             F77_REAL* WORK, F77_INT& INFO
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (dggbal, DGGBAL) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT& N, F77_DBLE* A,
+                             const F77_INT& LDA, F77_DBLE* B,
+                             const F77_INT& LDB, F77_INT& ILO,
+                             F77_INT& IHI, F77_DBLE* LSCALE,
+                             F77_DBLE* RSCALE, F77_DBLE* WORK,
+                             F77_INT& INFO
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (sggbal, SGGBAL) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT& N, F77_REAL* A,
+                             const F77_INT& LDA, F77_REAL* B,
+                             const F77_INT& LDB,
+                             F77_INT& ILO, F77_INT& IHI,
+                             F77_REAL* LSCALE, F77_REAL* RSCALE,
+                             F77_REAL* WORK, F77_INT& INFO
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (zggbal, ZGGBAL) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT& N, F77_DBLE_CMPLX* A,
+                             const F77_INT& LDA, F77_DBLE_CMPLX* B,
+                             const F77_INT& LDB, F77_INT& ILO,
+                             F77_INT& IHI, F77_DBLE* LSCALE,
+                             F77_DBLE* RSCALE, F77_DBLE* WORK,
+                             F77_INT& INFO
+                             F77_CHAR_ARG_LEN_DECL);
+
+  // GGBAK
+
+  F77_RET_T
+  F77_FUNC (dggbak, DGGBAK) (F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT& N,
+                             const F77_INT& ILO,
+                             const F77_INT& IHI,
+                             const F77_DBLE* LSCALE, const F77_DBLE* RSCALE,
+                             F77_INT& M, F77_DBLE* V,
+                             const F77_INT& LDV, F77_INT& INFO
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (sggbak, SGGBAK) (F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT& N,
+                             const F77_INT& ILO,
+                             const F77_INT& IHI,
+                             const F77_REAL* LSCALE, const F77_REAL* RSCALE,
+                             F77_INT& M, F77_REAL* V,
+                             const F77_INT& LDV, F77_INT& INFO
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (zggbak, ZGGBAK) (F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT& N,
+                             const F77_INT& ILO,
+                             const F77_INT& IHI,
+                             const F77_DBLE* LSCALE, const F77_DBLE* RSCALE,
+                             F77_INT& M, F77_DBLE_CMPLX* V,
+                             const F77_INT& LDV, F77_INT& INFO
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+
+  // GGEV
+
+  F77_RET_T
+  F77_FUNC (cggev, CGGEV) (F77_CONST_CHAR_ARG_DECL,
+                           F77_CONST_CHAR_ARG_DECL,
+                           const F77_INT&, F77_CMPLX*,
+                           const F77_INT&, F77_CMPLX*,
+                           const F77_INT&, F77_CMPLX*,
+                           F77_CMPLX*, F77_CMPLX*,
+                           const F77_INT&, F77_CMPLX*,
+                           const F77_INT&, F77_CMPLX*,
+                           const F77_INT&, F77_REAL*, F77_INT&
+                           F77_CHAR_ARG_LEN_DECL
+                           F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (dggev, DGGEV) (F77_CONST_CHAR_ARG_DECL,
+                           F77_CONST_CHAR_ARG_DECL,
+                           const F77_INT&,
+                           F77_DBLE*, const F77_INT&,
+                           F77_DBLE*, const F77_INT&,
+                           F77_DBLE*, F77_DBLE*, F77_DBLE *, F77_DBLE*,
+                           const F77_INT&, F77_DBLE*,
+                           const F77_INT&, F77_DBLE*,
+                           const F77_INT&, F77_INT&
+                           F77_CHAR_ARG_LEN_DECL
+                           F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (sggev, SGGEV) (F77_CONST_CHAR_ARG_DECL,
+                           F77_CONST_CHAR_ARG_DECL,
+                           const F77_INT&, F77_REAL*,
+                           const F77_INT&, F77_REAL*,
+                           const F77_INT&, F77_REAL*, F77_REAL*, F77_REAL*,
+                           F77_REAL*, const F77_INT&, F77_REAL*,
+                           const F77_INT&, F77_REAL*,
+                           const F77_INT&, F77_INT&
+                           F77_CHAR_ARG_LEN_DECL
+                           F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (zggev, ZGGEV) (F77_CONST_CHAR_ARG_DECL,
+                           F77_CONST_CHAR_ARG_DECL,
+                           const F77_INT&,
+                           F77_DBLE_CMPLX*, const F77_INT&,
+                           F77_DBLE_CMPLX*, const F77_INT&,
+                           F77_DBLE_CMPLX*, F77_DBLE_CMPLX*, F77_DBLE_CMPLX*,
+                           const F77_INT&, F77_DBLE_CMPLX*,
+                           const F77_INT&, F77_DBLE_CMPLX*,
+                           const F77_INT&, F77_DBLE*, F77_INT&
+                           F77_CHAR_ARG_LEN_DECL
+                           F77_CHAR_ARG_LEN_DECL);
+
+  // GGHRD
+
+  F77_RET_T
+  F77_FUNC (dgghrd, DGGHRD) (F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT& N,
+                             const F77_INT& ILO,
+                             const F77_INT& IHI, F77_DBLE* A,
+                             const F77_INT& LDA, F77_DBLE* B,
+                             const F77_INT& LDB, F77_DBLE* Q,
+                             const F77_INT& LDQ, F77_DBLE* Z,
+                             const F77_INT& LDZ, F77_INT& INFO
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (zgghrd, ZGGHRD) (F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT& N,
+                             const F77_INT& ILO,
+                             const F77_INT& IHI, F77_DBLE_CMPLX* A,
+                             const F77_INT& LDA, F77_DBLE_CMPLX* B,
+                             const F77_INT& LDB, F77_DBLE_CMPLX* Q,
+                             const F77_INT& LDQ, F77_DBLE_CMPLX* Z,
+                             const F77_INT& LDZ, F77_INT& INFO
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+
+  // GGSVD
+
+  F77_RET_T
+  F77_FUNC (dggsvd, DGGSVD)
+    (F77_CONST_CHAR_ARG_DECL,   // JOBU
+     F77_CONST_CHAR_ARG_DECL,   // JOBV
+     F77_CONST_CHAR_ARG_DECL,   // JOBQ
+     const F77_INT&,            // M
+     const F77_INT&,            // N
+     const F77_INT&,            // P
+     F77_INT &,                 // K
+     F77_INT &,                 // L
+     F77_DBLE*,                 // A(LDA,N)
+     const F77_INT&,            // LDA
+     F77_DBLE*,                 // B(LDB,N)
+     const F77_INT&,            // LDB
+     F77_DBLE*,                 // ALPHA(N)
+     F77_DBLE*,                 // BETA(N)
+     F77_DBLE*,                 // U(LDU,M)
+     const F77_INT&,            // LDU
+     F77_DBLE*,                 // V(LDV,P)
+     const F77_INT&,            // LDV
+     F77_DBLE*,                 // Q(LDQ,N)
+     const F77_INT&,            // LDQ
+     F77_DBLE*,                 // WORK
+     F77_INT*,                  // IWORK(N)
+     F77_INT&                   // INFO
+     F77_CHAR_ARG_LEN_DECL
+     F77_CHAR_ARG_LEN_DECL
+     F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (zggsvd, ZGGSVD)
+    (F77_CONST_CHAR_ARG_DECL,   // JOBU
+     F77_CONST_CHAR_ARG_DECL,   // JOBV
+     F77_CONST_CHAR_ARG_DECL,   // JOBQ
+     const F77_INT&,            // M
+     const F77_INT&,            // N
+     const F77_INT&,            // P
+     F77_INT &,                 // K
+     F77_INT &,                 // L
+     F77_DBLE_CMPLX*,           // A(LDA,N)
+     const F77_INT&,            // LDA
+     F77_DBLE_CMPLX*,           // B(LDB,N)
+     const F77_INT&,            // LDB
+     F77_DBLE*,                 // ALPHA(N)
+     F77_DBLE*,                 // BETA(N)
+     F77_DBLE_CMPLX*,           // U(LDU,M)
+     const F77_INT&,            // LDU
+     F77_DBLE_CMPLX*,           // V(LDV,P)
+     const F77_INT&,            // LDV
+     F77_DBLE_CMPLX*,           // Q(LDQ,N)
+     const F77_INT&,            // LDQ
+     F77_DBLE_CMPLX*,           // WORK
+     F77_DBLE*,                 // RWORK
+     F77_INT*,                  // IWORK(N)
+     F77_INT&                   // INFO
+     F77_CHAR_ARG_LEN_DECL
+     F77_CHAR_ARG_LEN_DECL
+     F77_CHAR_ARG_LEN_DECL);
+
+  // GTSV
+
+  F77_RET_T
+  F77_FUNC (dgtsv, DGTSV) (const F77_INT&, const F77_INT&,
+                           F77_DBLE*, F77_DBLE*, F77_DBLE*, F77_DBLE*,
+                           const F77_INT&, F77_INT&);
+
+  F77_RET_T
+  F77_FUNC (zgtsv, ZGTSV) (const F77_INT&, const F77_INT&,
+                           F77_DBLE_CMPLX*, F77_DBLE_CMPLX*,
+                           F77_DBLE_CMPLX*, F77_DBLE_CMPLX*,
+                           const F77_INT&, F77_INT&);
+
+  // GTTRF
+
+  F77_RET_T
+  F77_FUNC (dgttrf, DGTTRF) (const F77_INT&, F77_DBLE*, F77_DBLE*,
+                             F77_DBLE*, F77_DBLE*, F77_INT*,
+                             F77_INT&);
+
+  F77_RET_T
+  F77_FUNC (zgttrf, ZGTTRF) (const F77_INT&, F77_DBLE_CMPLX*, F77_DBLE_CMPLX*,
+                             F77_DBLE_CMPLX*, F77_DBLE_CMPLX*, F77_INT*,
+                             F77_INT&);
+
+  // GTTRS
+
+  F77_RET_T
+  F77_FUNC (dgttrs, DGTTRS) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_INT&,
+                             const F77_DBLE*, const F77_DBLE*,
+                             const F77_DBLE*, const F77_DBLE*,
+                             const F77_INT*, F77_DBLE *,
+                             const F77_INT&, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (zgttrs, ZGTTRS) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_INT&,
+                             const F77_DBLE_CMPLX*, const F77_DBLE_CMPLX*,
+                             const F77_DBLE_CMPLX*, const F77_DBLE_CMPLX*,
+                             const F77_INT*, F77_DBLE_CMPLX *,
+                             const F77_INT&, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL);
+
+  // HEEV
+
+  F77_RET_T
+  F77_FUNC (cheev, CHEEV) (F77_CONST_CHAR_ARG_DECL,
+                           F77_CONST_CHAR_ARG_DECL,
+                           const F77_INT&, F77_CMPLX*,
+                           const F77_INT&, F77_REAL*, F77_CMPLX*,
+                           const F77_INT&, F77_REAL*, F77_INT&
+                           F77_CHAR_ARG_LEN_DECL
+                           F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (zheev, ZHEEV) (F77_CONST_CHAR_ARG_DECL,
+                           F77_CONST_CHAR_ARG_DECL,
+                           const F77_INT&, F77_DBLE_CMPLX*,
+                           const F77_INT&, F77_DBLE*,
+                           F77_DBLE_CMPLX*, const F77_INT&, F77_DBLE*,
+                           F77_INT&
+                           F77_CHAR_ARG_LEN_DECL
+                           F77_CHAR_ARG_LEN_DECL);
+
+  // HEGV
+
+  F77_RET_T
+  F77_FUNC (chegv, CHEGV) (const F77_INT&,
+                           F77_CONST_CHAR_ARG_DECL,
+                           F77_CONST_CHAR_ARG_DECL,
+                           const F77_INT&, F77_CMPLX*,
+                           const F77_INT&, F77_CMPLX*,
+                           const F77_INT&, F77_REAL*, F77_CMPLX*,
+                           const F77_INT&, F77_REAL*, F77_INT&
+                           F77_CHAR_ARG_LEN_DECL
+                           F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (zhegv, ZHEGV) (const F77_INT&,
+                           F77_CONST_CHAR_ARG_DECL,
+                           F77_CONST_CHAR_ARG_DECL,
+                           const F77_INT&, F77_DBLE_CMPLX*,
+                           const F77_INT&, F77_DBLE_CMPLX*,
+                           const F77_INT&, F77_DBLE*, F77_DBLE_CMPLX*,
+                           const F77_INT&, F77_DBLE*, F77_INT&
+                           F77_CHAR_ARG_LEN_DECL
+                           F77_CHAR_ARG_LEN_DECL);
+
+  // HERK
+
+  F77_RET_T
+  F77_FUNC (cherk, CHERK) (F77_CONST_CHAR_ARG_DECL,
+                           F77_CONST_CHAR_ARG_DECL,
+                           const F77_INT&, const F77_INT&,
+                           const F77_REAL&, const F77_CMPLX*,
+                           const F77_INT&, const F77_REAL&,
+                           F77_CMPLX*, const F77_INT&
+                           F77_CHAR_ARG_LEN_DECL
+                           F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (zherk, ZHERK) (F77_CONST_CHAR_ARG_DECL,
+                           F77_CONST_CHAR_ARG_DECL,
+                           const F77_INT&, const F77_INT&,
+                           const F77_DBLE&, const F77_DBLE_CMPLX*,
+                           const F77_INT&, const F77_DBLE&, F77_DBLE_CMPLX*,
+                           const F77_INT&
+                           F77_CHAR_ARG_LEN_DECL
+                           F77_CHAR_ARG_LEN_DECL);
+
+  // HGEQZ
+
+  F77_RET_T
+  F77_FUNC (dhgeqz, DHGEQZ) (F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT& N,
+                             const F77_INT& ILO,
+                             const F77_INT& IHI,
+                             F77_DBLE* A, const F77_INT& LDA, F77_DBLE* B,
+                             const F77_INT& LDB, F77_DBLE* ALPHAR,
+                             F77_DBLE* ALPHAI, F77_DBLE* BETA, F77_DBLE* Q,
+                             const F77_INT& LDQ, F77_DBLE* Z,
+                             const F77_INT& LDZ, F77_DBLE* WORK,
+                             const F77_INT& LWORK,
+                             F77_INT& INFO
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (zhgeqz, ZHGEQZ) (F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT& N,
+                             const F77_INT& ILO,
+                             const F77_INT& IHI,
+                             F77_DBLE_CMPLX* A, const F77_INT& LDA,
+                             F77_DBLE_CMPLX* B, const F77_INT& LDB,
+                             F77_DBLE_CMPLX* ALPHA, F77_DBLE_CMPLX* BETA,
+                             F77_DBLE_CMPLX* CQ, const F77_INT& LDQ,
+                             F77_DBLE_CMPLX* CZ, const F77_INT& LDZ,
+                             F77_DBLE_CMPLX* WORK, const F77_INT& LWORK,
+                             F77_DBLE* RWORK, F77_INT& INFO
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+
+  // LAENV (liboctave/cruft/lapack-xtra)
+
+  F77_RET_T
+  F77_FUNC (xilaenv, XILAENV) (const F77_INT&,
+                               F77_CONST_CHAR_ARG_DECL,
+                               F77_CONST_CHAR_ARG_DECL,
+                               const F77_INT&, const F77_INT&,
+                               const F77_INT&, const F77_INT&,
+                               F77_INT&
+                               F77_CHAR_ARG_LEN_DECL
+                               F77_CHAR_ARG_LEN_DECL);
+
+  // LAG2
+
+  F77_RET_T
+  F77_FUNC (dlag2, DLAG2) (const F77_DBLE* A, const F77_INT& LDA,
+                           const F77_DBLE* B, const F77_INT& LDB,
+                           const F77_DBLE& SAFMIN, F77_DBLE& SCALE1,
+                           F77_DBLE& SCALE2, F77_DBLE& WR1, F77_DBLE& WR2,
+                           F77_DBLE& WI);
+
+  // LAMCH (liboctave/cruft/lapack-xtra)
+
+  F77_RET_T
+  F77_FUNC (xdlamch, XDLAMCH) (F77_CONST_CHAR_ARG_DECL,
+                               F77_DBLE& retval
+                               F77_CHAR_ARG_LEN_DECL);
+
+  // LANGE (liboctave/cruft/lapack-xtra)
+
+  F77_RET_T
+  F77_FUNC (xclange, XCLANGE) (F77_CONST_CHAR_ARG_DECL,
+                               const F77_INT&, const F77_INT&,
+                               const F77_CMPLX*, const F77_INT&,
+                               F77_REAL*, F77_REAL&
+                               F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (xdlange, XDLANGE) (F77_CONST_CHAR_ARG_DECL,
+                               const F77_INT&, const F77_INT&,
+                               const F77_DBLE*, const F77_INT&,
+                               F77_DBLE*, F77_DBLE&
+                               F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (xslange, XSLANGE) (F77_CONST_CHAR_ARG_DECL,
+                               const F77_INT&,
+                               const F77_INT&, const F77_REAL*,
+                               const F77_INT&, F77_REAL*, F77_REAL&
+                               F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (xzlange, XZLANGE) (F77_CONST_CHAR_ARG_DECL,
+                               const F77_INT&, const F77_INT&,
+                               const F77_DBLE_CMPLX*, const F77_INT&,
+                               F77_DBLE*, F77_DBLE&
+                               F77_CHAR_ARG_LEN_DECL);
+  // LARTG
+
+  F77_RET_T
+  F77_FUNC (clartg, CLARTG) (const F77_CMPLX*, const F77_CMPLX*,
+                             F77_REAL&, F77_CMPLX*, F77_CMPLX*);
+
+  F77_RET_T
+  F77_FUNC (dlartg, DLARTG) (const F77_DBLE&, const F77_DBLE&, F77_DBLE&,
+                             F77_DBLE&, F77_DBLE&);
+
+  F77_RET_T
+  F77_FUNC (slartg, SLARTG) (const F77_REAL&, const F77_REAL&, F77_REAL&,
+                             F77_REAL&, F77_REAL&);
+
+  F77_RET_T
+  F77_FUNC (zlartg, ZLARTG) (const F77_DBLE_CMPLX*, const F77_DBLE_CMPLX*, F77_DBLE&,
+                             F77_DBLE_CMPLX*, F77_DBLE_CMPLX*);
+
+  // ORGHR
+
+  F77_RET_T
+  F77_FUNC (dorghr, DORGHR) (const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_DBLE*,
+                             const F77_INT&, F77_DBLE*, F77_DBLE*,
+                             const F77_INT&, F77_INT&);
+
+  F77_RET_T
+  F77_FUNC (sorghr, SORGHR) (const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_REAL*,
+                             const F77_INT&, F77_REAL*, F77_REAL*,
+                             const F77_INT&, F77_INT&);
+
+  // ORGQR
+
+  F77_RET_T
+  F77_FUNC (dorgqr, DORGQR) (const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_DBLE*,
+                             const F77_INT&, F77_DBLE*, F77_DBLE*,
+                             const F77_INT&, F77_INT&);
+
+  F77_RET_T
+  F77_FUNC (sorgqr, SORGQR) (const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_REAL*,
+                             const F77_INT&, F77_REAL*, F77_REAL*,
+                             const F77_INT&, F77_INT&);
+
+  // PBCON
+
+  F77_RET_T
+  F77_FUNC (dpbcon, DPBCON) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_INT&,
+                             F77_DBLE*, const F77_INT&,
+                             const F77_DBLE&, F77_DBLE&, F77_DBLE*,
+                             F77_INT*, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (zpbcon, ZPBCON) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_INT&,
+                             F77_DBLE_CMPLX*, const F77_INT&, const F77_DBLE&,
+                             F77_DBLE&, F77_DBLE_CMPLX*, F77_DBLE*, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL);
+
+  // PBTRF
+
+  F77_RET_T
+  F77_FUNC (dpbtrf, DPBTRF) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_INT&,
+                             F77_DBLE*, const F77_INT&, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (zpbtrf, ZPBTRF) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_INT&,
+                             F77_DBLE_CMPLX*, const F77_INT&, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL);
+
+  // PBTRS
+
+  F77_RET_T
+  F77_FUNC (dpbtrs, DPBTRS) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_DBLE*,
+                             const F77_INT&, F77_DBLE*,
+                             const F77_INT&, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (zpbtrs, ZPBTRS) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_DBLE_CMPLX*,
+                             const F77_INT&, F77_DBLE_CMPLX*,
+                             const F77_INT&, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL);
+
+  // POCON
+
+  F77_RET_T
+  F77_FUNC (cpocon, CPOCON) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, F77_CMPLX*,
+                             const F77_INT&, const F77_REAL&, F77_REAL&,
+                             F77_CMPLX*, F77_REAL*, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (dpocon, DPOCON) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, F77_DBLE*,
+                             const F77_INT&, const F77_DBLE&,
+                             F77_DBLE&, F77_DBLE*, F77_INT*,
+                             F77_INT&
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (spocon, SPOCON) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, F77_REAL*,
+                             const F77_INT&, const F77_REAL&,
+                             F77_REAL&, F77_REAL*, F77_INT*,
+                             F77_INT&
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (zpocon, ZPOCON) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, F77_DBLE_CMPLX*,
+                             const F77_INT&, const F77_DBLE&,
+                             F77_DBLE&, F77_DBLE_CMPLX*, F77_DBLE*, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL);
+
+  // POTRF
+
+  F77_RET_T
+  F77_FUNC (cpotrf, CPOTRF) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, F77_CMPLX*,
+                             const F77_INT&, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (dpotrf, DPOTRF) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, F77_DBLE*,
+                             const F77_INT&, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (spotrf, SPOTRF) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, F77_REAL*,
+                             const F77_INT&, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (zpotrf, ZPOTRF) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, F77_DBLE_CMPLX*,
+                             const F77_INT&, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL);
+
+  // POTRI
+
+  F77_RET_T
+  F77_FUNC (cpotri, CPOTRI) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, F77_CMPLX*,
+                             const F77_INT&, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (dpotri, DPOTRI) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, F77_DBLE*,
+                             const F77_INT&, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (spotri, SPOTRI) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, F77_REAL*,
+                             const F77_INT&, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (zpotri, ZPOTRI) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, F77_DBLE_CMPLX*,
+                             const F77_INT&, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL);
+
+  // POTRS
+
+  F77_RET_T
+  F77_FUNC (spotrs, SPOTRS) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_INT&,
+                             const F77_REAL*, const F77_INT&, F77_REAL*,
+                             const F77_INT&, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (cpotrs, CPOTRS) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&,
+                             const F77_INT&, const F77_CMPLX*,
+                             const F77_INT&, F77_CMPLX*,
+                             const F77_INT&, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (dpotrs, DPOTRS) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_INT&,
+                             const F77_DBLE*, const F77_INT&, F77_DBLE*,
+                             const F77_INT&, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (zpotrs, ZPOTRS) (F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_INT&,
+                             const F77_DBLE_CMPLX*, const F77_INT&,
+                             F77_DBLE_CMPLX*, const F77_INT&, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL);
+
+  // PTSV
+
+  F77_RET_T
+  F77_FUNC (dptsv, DPTSV) (const F77_INT&, const F77_INT&,
+                           F77_DBLE*, F77_DBLE*, F77_DBLE*, const F77_INT&,
+                           F77_INT&);
+
+  F77_RET_T
+  F77_FUNC (zptsv, ZPTSV) (const F77_INT&, const F77_INT&,
+                           F77_DBLE*, F77_DBLE_CMPLX*, F77_DBLE_CMPLX*,
+                           const F77_INT&, F77_INT&);
+
+  // RSF2CSF (liboctave/cruft/lapack-xtra)
+
+  F77_RET_T
+  F77_FUNC (zrsf2csf, ZRSF2CSF) (const F77_INT&, F77_DBLE_CMPLX *,
+                                 F77_DBLE_CMPLX *, F77_DBLE *, F77_DBLE *);
+
+  F77_RET_T
+  F77_FUNC (crsf2csf, CRSF2CSF) (const F77_INT&, F77_CMPLX *,
+                                 F77_CMPLX *, F77_REAL *, F77_REAL *);
+
+  // SYEV
+
+  F77_RET_T
+  F77_FUNC (dsyev, DSYEV) (F77_CONST_CHAR_ARG_DECL,
+                           F77_CONST_CHAR_ARG_DECL,
+                           const F77_INT&, F77_DBLE*,
+                           const F77_INT&, F77_DBLE*, F77_DBLE*,
+                           const F77_INT&, F77_INT&
+                           F77_CHAR_ARG_LEN_DECL
+                           F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (ssyev, SSYEV) (F77_CONST_CHAR_ARG_DECL,
+                           F77_CONST_CHAR_ARG_DECL,
+                           const F77_INT&, F77_REAL*,
+                           const F77_INT&, F77_REAL*, F77_REAL*,
+                           const F77_INT&, F77_INT&
+                           F77_CHAR_ARG_LEN_DECL
+                           F77_CHAR_ARG_LEN_DECL);
+
+  // SYGV
+
+  F77_RET_T
+  F77_FUNC (dsygv, DSYGV) (const F77_INT&,
+                           F77_CONST_CHAR_ARG_DECL,
+                           F77_CONST_CHAR_ARG_DECL,
+                           const F77_INT&, F77_DBLE*,
+                           const F77_INT&, F77_DBLE*,
+                           const F77_INT&, F77_DBLE*, F77_DBLE*,
+                           const F77_INT&, F77_INT&
+                           F77_CHAR_ARG_LEN_DECL
+                           F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (ssygv, SSYGV) (const F77_INT&,
+                           F77_CONST_CHAR_ARG_DECL,
+                           F77_CONST_CHAR_ARG_DECL,
+                           const F77_INT&, F77_REAL*,
+                           const F77_INT&, F77_REAL*,
+                           const F77_INT&, F77_REAL*, F77_REAL*,
+                           const F77_INT&, F77_INT&
+                           F77_CHAR_ARG_LEN_DECL
+                           F77_CHAR_ARG_LEN_DECL);
+
+  // SYRK
+
+  F77_RET_T
+  F77_FUNC (csyrk, CSYRK) (F77_CONST_CHAR_ARG_DECL,
+                           F77_CONST_CHAR_ARG_DECL,
+                           const F77_INT&, const F77_INT&,
+                           const F77_CMPLX&, const F77_CMPLX*,
+                           const F77_INT&, const F77_CMPLX&,
+                           F77_CMPLX*, const F77_INT&
+                           F77_CHAR_ARG_LEN_DECL
+                           F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (dsyrk, DSYRK) (F77_CONST_CHAR_ARG_DECL,
+                           F77_CONST_CHAR_ARG_DECL,
+                           const F77_INT&, const F77_INT&,
+                           const F77_DBLE&, const F77_DBLE*, const F77_INT&,
+                           const F77_DBLE&, F77_DBLE*, const F77_INT&
+                           F77_CHAR_ARG_LEN_DECL
+                           F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (ssyrk, SSYRK) (F77_CONST_CHAR_ARG_DECL,
+                           F77_CONST_CHAR_ARG_DECL,
+                           const F77_INT&, const F77_INT&,
+                           const F77_REAL&, const F77_REAL*, const F77_INT&,
+                           const F77_REAL&, F77_REAL*, const F77_INT&
+                           F77_CHAR_ARG_LEN_DECL
+                           F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (zsyrk, ZSYRK) (F77_CONST_CHAR_ARG_DECL,
+                           F77_CONST_CHAR_ARG_DECL,
+                           const F77_INT&, const F77_INT&,
+                           const F77_DBLE_CMPLX&, const F77_DBLE_CMPLX*,
+                           const F77_INT&, const F77_DBLE_CMPLX&,
+                           F77_DBLE_CMPLX*, const F77_INT&
+                           F77_CHAR_ARG_LEN_DECL
+                           F77_CHAR_ARG_LEN_DECL);
+
+  // TGEVC
+
+  // Documentation for DTGEVC incorrectly states that VR, VL are
+  // complex*16; they are declared in DTGEVC as double precision
+  // (probably a cut and paste problem fro ZTGEVC).
+  F77_RET_T
+  F77_FUNC (dtgevc, DTGEVC) (F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             F77_INT* SELECT,
+                             const F77_INT& N, F77_DBLE* A,
+                             const F77_INT& LDA, F77_DBLE* B,
+                             const F77_INT& LDB, F77_DBLE* VL,
+                             const F77_INT& LDVL, F77_DBLE* VR,
+                             const F77_INT& LDVR,
+                             const F77_INT& MM, F77_INT& M,
+                             F77_DBLE* WORK, F77_INT& INFO
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (ztgevc, ZTGEVC) (F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             F77_INT* SELECT,
+                             const F77_INT& N, const F77_DBLE_CMPLX* A,
+                             const F77_INT& LDA,const F77_DBLE_CMPLX* B,
+                             const F77_INT& LDB, F77_DBLE_CMPLX* xVL,
+                             const F77_INT& LDVL, F77_DBLE_CMPLX* xVR,
+                             const F77_INT& LDVR,
+                             const F77_INT& MM, F77_INT& M,
+                             F77_DBLE_CMPLX* CWORK, F77_DBLE* RWORK,
+                             F77_INT& INFO
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+
+  // TRCON
+
+  F77_RET_T
+  F77_FUNC (ctrcon, CTRCON) (F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_CMPLX*,
+                             const F77_INT&, F77_REAL&, F77_CMPLX*,
+                             F77_REAL*, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (dtrcon, DTRCON) (F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_DBLE*,
+                             const F77_INT&, F77_DBLE&,
+                             F77_DBLE*, F77_INT*, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+  F77_RET_T
+  F77_FUNC (strcon, STRCON) (F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_REAL*,
+                             const F77_INT&, F77_REAL&,
+                             F77_REAL*, F77_INT*, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (ztrcon, ZTRCON) (F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_DBLE_CMPLX*,
+                             const F77_INT&, F77_DBLE&,
+                             F77_DBLE_CMPLX*, F77_DBLE*, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+
+  // TRSEN
+
+  F77_RET_T
+  F77_FUNC (ctrsen, CTRSEN) (F77_CONST_CHAR_ARG_DECL, F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT*, const F77_INT&,
+                             F77_CMPLX*, const F77_INT&, F77_CMPLX*,
+                             const F77_INT&, F77_CMPLX*, F77_INT&,
+                             F77_REAL&, F77_REAL&, F77_CMPLX*,
+                             const F77_INT&, F77_INT &);
+
+  F77_RET_T
+  F77_FUNC (dtrsen, DTRSEN) (F77_CONST_CHAR_ARG_DECL, F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT*, const F77_INT&,
+                             F77_DBLE*, const F77_INT&, F77_DBLE*,
+                             const F77_INT&, F77_DBLE*, F77_DBLE*,
+                             F77_INT&, F77_DBLE&, F77_DBLE&, F77_DBLE*,
+                             const F77_INT&, F77_INT*,
+                             const F77_INT&, F77_INT&);
+
+  F77_RET_T
+  F77_FUNC (strsen, STRSEN) (F77_CONST_CHAR_ARG_DECL, F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT*, const F77_INT&,
+                             F77_REAL*, const F77_INT&, F77_REAL*,
+                             const F77_INT&, F77_REAL*, F77_REAL*,
+                             F77_INT&, F77_REAL&, F77_REAL&, F77_REAL*,
+                             const F77_INT&, F77_INT*,
+                             const F77_INT&, F77_INT&);
+
+  F77_RET_T
+  F77_FUNC (ztrsen, ZTRSEN) (F77_CONST_CHAR_ARG_DECL, F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT*, const F77_INT&,
+                             F77_DBLE_CMPLX*, const F77_INT&,
+                             F77_DBLE_CMPLX*, const F77_INT&,
+                             F77_DBLE_CMPLX*, F77_INT&, F77_DBLE&,
+                             F77_DBLE&, F77_DBLE_CMPLX*,
+                             const F77_INT&, F77_INT &);
+
+  // TRSYL
+
+  F77_RET_T
+  F77_FUNC (ctrsyl, CTRSYL) (F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_INT&,
+                             const F77_INT&, const F77_CMPLX*,
+                             const F77_INT&, const F77_CMPLX*,
+                             const F77_INT&, const F77_CMPLX*,
+                             const F77_INT&, F77_REAL&, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (dtrsyl, DTRSYL) (F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_INT&,
+                             const F77_INT&, const F77_DBLE*,
+                             const F77_INT&, const F77_DBLE*,
+                             const F77_INT&, const F77_DBLE*,
+                             const F77_INT&, F77_DBLE&, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (strsyl, STRSYL) (F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_INT&,
+                             const F77_INT&, const F77_REAL*,
+                             const F77_INT&, const F77_REAL*,
+                             const F77_INT&, const F77_REAL*,
+                             const F77_INT&, F77_REAL&, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (ztrsyl, ZTRSYL) (F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_INT&,
+                             const F77_INT&, const F77_DBLE_CMPLX*,
+                             const F77_INT&, const F77_DBLE_CMPLX*,
+                             const F77_INT&, const F77_DBLE_CMPLX*,
+                             const F77_INT&, F77_DBLE&, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+
+  // TRTRI
+
+  F77_RET_T
+  F77_FUNC (ctrtri, CTRTRI) (F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_CMPLX*,
+                             const F77_INT&, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (dtrtri, DTRTRI) (F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_DBLE*,
+                             const F77_INT&, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (strtri, STRTRI) (F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_REAL*,
+                             const F77_INT&, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (ztrtri, ZTRTRI) (F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_DBLE_CMPLX*,
+                             const F77_INT&, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+
+  // TRTRS
+
+  F77_RET_T
+  F77_FUNC (ctrtrs, CTRTRS) (F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_INT&,
+                             const F77_CMPLX*, const F77_INT&,
+                             F77_CMPLX*, const F77_INT&,
+                             F77_INT&
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (dtrtrs, DTRTRS) (F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_INT&,
+                             const F77_DBLE*, const F77_INT&, F77_DBLE*,
+                             const F77_INT&, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (strtrs, STRTRS) (F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&,
+                             const F77_INT&, const F77_REAL*,
+                             const F77_INT&, F77_REAL*,
+                             const F77_INT&, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+
+  F77_RET_T
+  F77_FUNC (ztrtrs, ZTRTRS) (F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             F77_CONST_CHAR_ARG_DECL,
+                             const F77_INT&, const F77_INT&,
+                             const F77_DBLE_CMPLX*, const F77_INT&, F77_DBLE_CMPLX*,
+                             const F77_INT&, F77_INT&
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL
+                             F77_CHAR_ARG_LEN_DECL);
+
+  // UNGHR
+
+  F77_RET_T
+  F77_FUNC (cunghr, CUNGHR) (const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_CMPLX*,
+                             const F77_INT&, F77_CMPLX*,
+                             F77_CMPLX*, const F77_INT&,
+                             F77_INT&);
+
+  F77_RET_T
+  F77_FUNC (zunghr, ZUNGHR) (const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_DBLE_CMPLX*,
+                             const F77_INT&, F77_DBLE_CMPLX*, F77_DBLE_CMPLX*,
+                             const F77_INT&, F77_INT&);
+  // UNGQR
+
+  F77_RET_T
+  F77_FUNC (cungqr, CUNGQR) (const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_CMPLX*,
+                             const F77_INT&, F77_CMPLX*,
+                             F77_CMPLX*, const F77_INT&,
+                             F77_INT&);
+
+  F77_RET_T
+  F77_FUNC (zungqr, ZUNGQR) (const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_DBLE_CMPLX*,
+                             const F77_INT&, F77_DBLE_CMPLX*, F77_DBLE_CMPLX*,
+                             const F77_INT&, F77_INT&);
+}
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/liboctave/numeric/lo-qrupdate-proto.h	Wed Aug 17 00:18:08 2016 -0400
@@ -0,0 +1,376 @@
+/*
+
+Copyright (C) 2016 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_lo_qrupdate_proto_h)
+#define octave_lo_qrupdate_proto_h 1
+
+#include "octave-config.h"
+
+#include "f77-fcn.h"
+
+extern "C"
+{
+
+#if defined (HAVE_QRUPDATE)
+
+  // CH1DN
+
+  F77_RET_T
+  F77_FUNC (cch1dn, CCH1DN) (const F77_INT&, F77_CMPLX*,
+                             const F77_INT&, F77_CMPLX*,
+                             F77_REAL*, F77_INT&);
+
+  F77_RET_T
+  F77_FUNC (dch1dn, DCH1DN) (const F77_INT&, F77_DBLE*,
+                             const F77_INT&, F77_DBLE*, F77_DBLE*,
+                             F77_INT&);
+
+  F77_RET_T
+  F77_FUNC (sch1dn, SCH1DN) (const F77_INT&, F77_REAL*,
+                             const F77_INT&, F77_REAL*, F77_REAL*,
+                             F77_INT&);
+
+  F77_RET_T
+  F77_FUNC (zch1dn, ZCH1DN) (const F77_INT&, F77_DBLE_CMPLX*,
+                             const F77_INT&, F77_DBLE_CMPLX*, F77_DBLE*,
+                             F77_INT&);
+
+  // CH1UP
+
+  F77_RET_T
+  F77_FUNC (cch1up, CCH1UP) (const F77_INT&, F77_CMPLX*,
+                             const F77_INT&, F77_CMPLX*, F77_REAL*);
+
+  F77_RET_T
+  F77_FUNC (dch1up, DCH1UP) (const F77_INT&, F77_DBLE*,
+                             const F77_INT&, F77_DBLE*, F77_DBLE*);
+
+  F77_RET_T
+  F77_FUNC (sch1up, SCH1UP) (const F77_INT&, F77_REAL*,
+                             const F77_INT&, F77_REAL*, F77_REAL*);
+
+  F77_RET_T
+  F77_FUNC (zch1up, ZCH1UP) (const F77_INT&, F77_DBLE_CMPLX*,
+                             const F77_INT&, F77_DBLE_CMPLX*, F77_DBLE*);
+
+  // CHDEX
+
+  F77_RET_T
+  F77_FUNC (dchdex, DCHDEX) (const F77_INT&, F77_DBLE*,
+                             const F77_INT&, const F77_INT&,
+                             F77_DBLE*);
+
+  F77_RET_T
+  F77_FUNC (schdex, SCHDEX) (const F77_INT&, F77_REAL*,
+                             const F77_INT&, const F77_INT&,
+                             F77_REAL*);
+
+  F77_RET_T
+  F77_FUNC (cchdex, CCHDEX) (const F77_INT&, F77_CMPLX*,
+                             const F77_INT&, const F77_INT&,
+                             F77_REAL*);
+
+  F77_RET_T
+  F77_FUNC (zchdex, ZCHDEX) (const F77_INT&, F77_DBLE_CMPLX*,
+                             const F77_INT&, const F77_INT&,
+                             F77_DBLE*);
+
+  // CHINX
+
+  F77_RET_T
+  F77_FUNC (cchinx, CCHINX) (const F77_INT&, F77_CMPLX*,
+                             const F77_INT&, const F77_INT&,
+                             F77_CMPLX*, F77_REAL*, F77_INT&);
+
+  F77_RET_T
+  F77_FUNC (dchinx, DCHINX) (const F77_INT&, F77_DBLE*,
+                             const F77_INT&, const F77_INT&,
+                             F77_DBLE*, F77_DBLE*, F77_INT&);
+
+  F77_RET_T
+  F77_FUNC (schinx, SCHINX) (const F77_INT&, F77_REAL*,
+                             const F77_INT&, const F77_INT&,
+                             F77_REAL*, F77_REAL*, F77_INT&);
+
+  F77_RET_T
+  F77_FUNC (zchinx, ZCHINX) (const F77_INT&, F77_DBLE_CMPLX*,
+                             const F77_INT&, const F77_INT&,
+                             F77_DBLE_CMPLX*, F77_DBLE*, F77_INT&);
+
+  // CHSHX
+
+  F77_RET_T
+  F77_FUNC (cchshx, CCHSHX) (const F77_INT&, F77_CMPLX*,
+                             const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_CMPLX*, F77_REAL*);
+
+  F77_RET_T
+  F77_FUNC (dchshx, DCHSHX) (const F77_INT&, F77_DBLE*,
+                             const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_DBLE*);
+
+  F77_RET_T
+  F77_FUNC (schshx, SCHSHX) (const F77_INT&, F77_REAL*,
+                             const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_REAL*);
+
+  F77_RET_T
+  F77_FUNC (zchshx, ZCHSHX) (const F77_INT&, F77_DBLE_CMPLX*,
+                             const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_DBLE_CMPLX*, F77_DBLE*);
+
+  // QR1UP
+
+  F77_RET_T
+  F77_FUNC (cqr1up, CQR1UP) (const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_CMPLX*,
+                             const F77_INT&, F77_CMPLX*,
+                             const F77_INT&, F77_CMPLX*,
+                             F77_CMPLX*, F77_CMPLX*, F77_REAL*);
+
+  F77_RET_T
+  F77_FUNC (dqr1up, DQR1UP) (const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_DBLE*,
+                             const F77_INT&, F77_DBLE*,
+                             const F77_INT&, F77_DBLE*, F77_DBLE*, F77_DBLE*);
+
+  F77_RET_T
+  F77_FUNC (sqr1up, SQR1UP) (const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_REAL*,
+                             const F77_INT&, F77_REAL*,
+                             const F77_INT&, F77_REAL*, F77_REAL*, F77_REAL*);
+
+  F77_RET_T
+  F77_FUNC (zqr1up, ZQR1UP) (const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_DBLE_CMPLX*,
+                             const F77_INT&, F77_DBLE_CMPLX*,
+                             const F77_INT&, F77_DBLE_CMPLX*,
+                             F77_DBLE_CMPLX*, F77_DBLE_CMPLX*, F77_DBLE*);
+
+  // QRDEC
+
+  F77_RET_T
+  F77_FUNC (cqrdec, CQRDEC) (const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_CMPLX*,
+                             const F77_INT&, F77_CMPLX*,
+                             const F77_INT&, const F77_INT&,
+                             F77_REAL*);
+
+  F77_RET_T
+  F77_FUNC (dqrdec, DQRDEC) (const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_DBLE*,
+                             const F77_INT&, F77_DBLE*,
+                             const F77_INT&, const F77_INT&,
+                             F77_DBLE*);
+
+  F77_RET_T
+  F77_FUNC (sqrdec, SQRDEC) (const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_REAL*,
+                             const F77_INT&, F77_REAL*,
+                             const F77_INT&,
+                             const F77_INT&, F77_REAL*);
+
+  F77_RET_T
+  F77_FUNC (zqrdec, ZQRDEC) (const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_DBLE_CMPLX*,
+                             const F77_INT&, F77_DBLE_CMPLX*,
+                             const F77_INT&, const F77_INT&,
+                             F77_DBLE*);
+
+  // QRDER
+
+  F77_RET_T
+  F77_FUNC (cqrder, CQRDER) (const F77_INT&, const F77_INT&,
+                             F77_CMPLX*, const F77_INT&,
+                             F77_CMPLX*, const F77_INT&,
+                             const F77_INT&, F77_CMPLX*, F77_REAL*);
+
+  F77_RET_T
+  F77_FUNC (dqrder, DQRDER) (const F77_INT&, const F77_INT&,
+                             F77_DBLE*, const F77_INT&, F77_DBLE*,
+                             const F77_INT&, const F77_INT&,
+                             F77_DBLE*);
+
+  F77_RET_T
+  F77_FUNC (sqrder, SQRDER) (const F77_INT&, const F77_INT&,
+                             F77_REAL*, const F77_INT&,
+                             F77_REAL*, const F77_INT&,
+                             const F77_INT&, F77_REAL*);
+
+  F77_RET_T
+  F77_FUNC (zqrder, ZQRDER) (const F77_INT&, const F77_INT&,
+                             F77_DBLE_CMPLX*, const F77_INT&, F77_DBLE_CMPLX*,
+                             const F77_INT&, const F77_INT&,
+                             F77_DBLE_CMPLX*, F77_DBLE*);
+
+  // QRINC
+
+  F77_RET_T
+  F77_FUNC (cqrinc, CQRINC) (const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_CMPLX*,
+                             const F77_INT&, F77_CMPLX*,
+                             const F77_INT&,const F77_INT&,
+                             const F77_CMPLX*, F77_REAL*);
+
+  F77_RET_T
+  F77_FUNC (dqrinc, DQRINC) (const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_DBLE*,
+                             const F77_INT&, F77_DBLE*,
+                             const F77_INT&, const F77_INT&,
+                             const F77_DBLE*, F77_DBLE*);
+
+  F77_RET_T
+  F77_FUNC (sqrinc, SQRINC) (const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_REAL*,
+                             const F77_INT&, F77_REAL*,
+                             const F77_INT&,
+                             const F77_INT&, const F77_REAL*, F77_REAL*);
+
+  F77_RET_T
+  F77_FUNC (zqrinc, ZQRINC) (const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_DBLE_CMPLX*,
+                             const F77_INT&, F77_DBLE_CMPLX*,
+                             const F77_INT&, const F77_INT&,
+                             const F77_DBLE_CMPLX*, F77_DBLE*);
+
+  // QRINR
+
+  F77_RET_T
+  F77_FUNC (cqrinr, CQRINR) (const F77_INT&, const F77_INT&,
+                             F77_CMPLX*, const F77_INT&,
+                             F77_CMPLX*, const F77_INT&,
+                             const F77_INT&, const F77_CMPLX*,
+                             F77_REAL*);
+
+  F77_RET_T
+  F77_FUNC (dqrinr, DQRINR) (const F77_INT&, const F77_INT&,
+                             F77_DBLE*, const F77_INT&, F77_DBLE*,
+                             const F77_INT&, const F77_INT&,
+                             const F77_DBLE*, F77_DBLE*);
+
+  F77_RET_T
+  F77_FUNC (sqrinr, SQRINR) (const F77_INT&, const F77_INT&,
+                             F77_REAL*, const F77_INT&,
+                             F77_REAL*, const F77_INT&,
+                             const F77_INT&, const F77_REAL*, F77_REAL*);
+
+  F77_RET_T
+  F77_FUNC (zqrinr, ZQRINR) (const F77_INT&, const F77_INT&,
+                             F77_DBLE_CMPLX*, const F77_INT&, F77_DBLE_CMPLX*,
+                             const F77_INT&, const F77_INT&,
+                             const F77_DBLE_CMPLX*, F77_DBLE*);
+
+  // QRSHC
+
+  F77_RET_T
+  F77_FUNC (cqrshc, CQRSHC) (const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_CMPLX*,
+                             const F77_INT&, F77_CMPLX*,
+                             const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_CMPLX*,
+                             F77_REAL*);
+  F77_RET_T
+  F77_FUNC (dqrshc, DQRSHC) (const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_DBLE*,
+                             const F77_INT&, F77_DBLE*,
+                             const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_DBLE*);
+
+  F77_RET_T
+  F77_FUNC (sqrshc, SQRSHC) (const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_REAL*,
+                             const F77_INT&, F77_REAL*,
+                             const F77_INT&,
+                             const F77_INT&, const F77_INT&,
+                             F77_REAL*);
+
+  F77_RET_T
+  F77_FUNC (zqrshc, ZQRSHC) (const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_DBLE_CMPLX*,
+                             const F77_INT&, F77_DBLE_CMPLX*,
+                             const F77_INT&, const F77_INT&,
+                             const F77_INT&, F77_DBLE_CMPLX*, F77_DBLE*);
+
+#endif
+
+#if defined (HAVE_QRUPDATE_LUU)
+
+  // LU1UP
+
+  F77_RET_T
+  F77_FUNC (clu1up, CLU1UP) (const F77_INT&, const F77_INT&,
+                             F77_CMPLX *, const F77_INT&,
+                             F77_CMPLX *, const F77_INT&,
+                             F77_CMPLX *, F77_CMPLX *);
+
+  F77_RET_T
+  F77_FUNC (dlu1up, DLU1UP) (const F77_INT&, const F77_INT&,
+                             F77_DBLE *, const F77_INT&,
+                             F77_DBLE *, const F77_INT&,
+                             F77_DBLE *, F77_DBLE *);
+
+  F77_RET_T
+  F77_FUNC (slu1up, SLU1UP) (const F77_INT&, const F77_INT&,
+                             F77_REAL *, const F77_INT&,
+                             F77_REAL *, const F77_INT&,
+                             F77_REAL *, F77_REAL *);
+
+  F77_RET_T
+  F77_FUNC (zlu1up, ZLU1UP) (const F77_INT&, const F77_INT&,
+                             F77_DBLE_CMPLX *, const F77_INT&,
+                             F77_DBLE_CMPLX *, const F77_INT&,
+                             F77_DBLE_CMPLX *, F77_DBLE_CMPLX *);
+
+  // LUP1UP
+
+  F77_RET_T
+  F77_FUNC (clup1up, CLUP1UP) (const F77_INT&, const F77_INT&,
+                               F77_CMPLX *, const F77_INT&,
+                               F77_CMPLX *, const F77_INT&,
+                               F77_INT *, const F77_CMPLX *,
+                               const F77_CMPLX *, F77_CMPLX *);
+  F77_RET_T
+  F77_FUNC (dlup1up, DLUP1UP) (const F77_INT&, const F77_INT&,
+                               F77_DBLE *, const F77_INT&,
+                               F77_DBLE *, const F77_INT&,
+                               F77_INT *, const F77_DBLE *,
+                               const F77_DBLE *, F77_DBLE *);
+
+  F77_RET_T
+  F77_FUNC (slup1up, SLUP1UP) (const F77_INT&, const F77_INT&,
+                               F77_REAL *, const F77_INT&,
+                               F77_REAL *, const F77_INT&,
+                               F77_INT *, const F77_REAL *,
+                               const F77_REAL *, F77_REAL *);
+
+  F77_RET_T
+  F77_FUNC (zlup1up, ZLUP1UP) (const F77_INT&, const F77_INT&,
+                               F77_DBLE_CMPLX *, const F77_INT&,
+                               F77_DBLE_CMPLX *, const F77_INT&,
+                               F77_INT *, const F77_DBLE_CMPLX *,
+                               const F77_DBLE_CMPLX *, F77_DBLE_CMPLX *);
+
+#endif
+
+}
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/liboctave/numeric/lo-ranlib-proto.h	Wed Aug 17 00:18:08 2016 -0400
@@ -0,0 +1,60 @@
+/*
+
+Copyright (C) 2016 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_lo_ranlib_proto_h)
+#define octave_lo_ranlib_proto_h 1
+
+#include "octave-config.h"
+
+#include "f77-fcn.h"
+
+extern "C"
+{
+  F77_RET_T
+  F77_FUNC (dgenexp, DGENEXP) (const F77_DBLE&, F77_DBLE&);
+
+  F77_RET_T
+  F77_FUNC (dgengam, DGENGAM) (const F77_DBLE&, const F77_DBLE&, F77_DBLE&);
+
+  F77_RET_T
+  F77_FUNC (dgennor, DGENNOR) (const F77_DBLE&, const F77_DBLE&, F77_DBLE&);
+
+  F77_RET_T
+  F77_FUNC (dgenunf, DGENUNF) (const F77_DBLE&, const F77_DBLE&, F77_DBLE&);
+
+  F77_RET_T
+  F77_FUNC (dignpoi, DIGNPOI) (const F77_DBLE&, F77_DBLE&);
+
+  F77_RET_T
+  F77_FUNC (getsd, GETSD) (F77_INT4&, F77_INT4&);
+
+  F77_RET_T
+  F77_FUNC (setall, SETALL) (const F77_INT4&, const F77_INT4&);
+
+  F77_RET_T
+  F77_FUNC (setcgn, SETCGN) (const F77_INT4&);
+
+  F77_RET_T
+  F77_FUNC (setsd, SETSD) (const F77_INT4&, const F77_INT4&);
+}
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/liboctave/numeric/lo-slatec-proto.h	Wed Aug 17 00:18:08 2016 -0400
@@ -0,0 +1,133 @@
+/*
+
+Copyright (C) 2016 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_lo_slatec_proto_h)
+#define octave_lo_slatec_proto_h 1
+
+#include "octave-config.h"
+
+#include "f77-fcn.h"
+
+extern "C"
+{
+  // ACOSH
+
+  F77_RET_T
+  F77_FUNC (xacosh, XACOSH) (const F77_REAL&, F77_REAL&);
+
+  F77_RET_T
+  F77_FUNC (xdacosh, XDACOSH) (const F77_DBLE&, F77_DBLE&);
+
+  // ASINH
+
+  F77_RET_T
+  F77_FUNC (xasinh, XASINH) (const F77_REAL&, F77_REAL&);
+
+  F77_RET_T
+  F77_FUNC (xdasinh, XDASINH) (const F77_DBLE&, F77_DBLE&);
+
+  // ATANH
+
+  F77_RET_T
+  F77_FUNC (xatanh, XATANH) (const F77_REAL&, F77_REAL&);
+
+  F77_RET_T
+  F77_FUNC (xdatanh, XDATANH) (const F77_DBLE&, F77_DBLE&);
+
+  // BETAI
+
+  F77_RET_T
+  F77_FUNC (xbetai, XBETAI) (const F77_REAL&, const F77_REAL&,
+                             const F77_REAL&, F77_REAL&);
+
+  F77_RET_T
+  F77_FUNC (xdbetai, XDBETAI) (const F77_DBLE&, const F77_DBLE&,
+                               const F77_DBLE&, F77_DBLE&);
+
+  // ERF
+
+  F77_RET_T
+  F77_FUNC (xerf, XERF) (const F77_REAL&, F77_REAL&);
+
+  F77_RET_T
+  F77_FUNC (xderf, XDERF) (const F77_DBLE&, F77_DBLE&);
+
+  // ERFC
+
+  F77_RET_T
+  F77_FUNC (xderfc, XDERFC) (const F77_DBLE&, F77_DBLE&);
+
+  F77_RET_T
+  F77_FUNC (xerfc, XERFC) (const F77_REAL&, F77_REAL&);
+
+  // GAMMA
+
+  F77_RET_T
+  F77_FUNC (xgamma, XGAMMA) (const F77_REAL&, F77_REAL&);
+
+  F77_RET_T
+  F77_FUNC (xdgamma, XDGAMMA) (const F77_DBLE&, F77_DBLE&);
+
+  // GAMMAINC
+
+  F77_RET_T
+  F77_FUNC (xgammainc, XGAMMAINC) (const F77_DBLE&, const F77_DBLE&, F77_DBLE&);
+
+  F77_RET_T
+  F77_FUNC (xsgammainc, XSGAMMAINC) (const F77_REAL&, const F77_REAL&, F77_REAL&);
+
+  // LGAMS
+
+  F77_RET_T
+  F77_FUNC (algams, ALGAMS) (const F77_REAL&, F77_REAL&, F77_REAL&);
+
+  F77_RET_T
+  F77_FUNC (dlgams, DLGAMS) (const F77_DBLE&, F77_DBLE&, F77_DBLE&);
+
+  // PCHIM
+
+  F77_RET_T
+  F77_FUNC (dpchim, DPCHIM) (const F77_INT& n, const F77_DBLE *x,
+                             const F77_DBLE *f, F77_DBLE *d,
+                             const F77_INT &incfd,
+                             F77_INT *ierr);
+
+  F77_RET_T
+  F77_FUNC (pchim, PCHIM) (const F77_INT& n, const F77_REAL *x,
+                           const F77_REAL *f, F77_REAL *d,
+                           const F77_INT& incfd,
+                           F77_INT *ierr);
+
+  // PSIFN
+
+  F77_RET_T
+  F77_FUNC (psifn, PSIFN) (const F77_REAL*, const F77_INT&,
+                           const F77_INT&, const F77_INT&,
+                           F77_REAL*, F77_INT*, F77_INT*);
+
+  F77_RET_T
+  F77_FUNC (dpsifn, DPSIFN) (const F77_DBLE*, const F77_INT&,
+                             const F77_INT&, const F77_INT&,
+                             F77_DBLE*, F77_INT*, F77_INT*);
+}
+
+#endif
--- a/liboctave/numeric/lo-specfun.cc	Tue Aug 16 21:38:58 2016 -0700
+++ b/liboctave/numeric/lo-specfun.cc	Wed Aug 17 00:18:08 2016 -0400
@@ -42,8 +42,10 @@
 #include "fNDArray.h"
 #include "fCNDArray.h"
 #include "f77-fcn.h"
+#include "lo-amos-proto.h"
 #include "lo-error.h"
 #include "lo-ieee.h"
+#include "lo-slatec-proto.h"
 #include "lo-specfun.h"
 #include "mx-inlines.cc"
 #include "lo-mappers.h"
@@ -51,152 +53,6 @@
 
 #include "Faddeeva.hh"
 
-extern "C"
-{
-  F77_RET_T
-  F77_FUNC (zbesj, ZBESJ) (const F77_DBLE&, const F77_DBLE&, const F77_DBLE&,
-                           const F77_INT&, const F77_INT&,
-                           F77_DBLE*, F77_DBLE*, F77_INT&,
-                           F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (zbesy, ZBESY) (const F77_DBLE&, const F77_DBLE&, const F77_DBLE&,
-                           const F77_INT&, const F77_INT&,
-                           F77_DBLE*, F77_DBLE*, F77_INT&, F77_DBLE*,
-                           F77_DBLE*, F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (zbesi, ZBESI) (const F77_DBLE&, const F77_DBLE&, const F77_DBLE&,
-                           const F77_INT&, const F77_INT&,
-                           F77_DBLE*, F77_DBLE*, F77_INT&,
-                           F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (zbesk, ZBESK) (const F77_DBLE&, const F77_DBLE&, const F77_DBLE&,
-                           const F77_INT&, const F77_INT&,
-                           F77_DBLE*, F77_DBLE*, F77_INT&,
-                           F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (zbesh, ZBESH) (const F77_DBLE&, const F77_DBLE&, const F77_DBLE&,
-                           const F77_INT&, const F77_INT&,
-                           const F77_INT&, F77_DBLE*, F77_DBLE*,
-                           F77_INT&, F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (cbesj, cBESJ) (const F77_CMPLX*, const F77_REAL&,
-                           const F77_INT&, const F77_INT&,
-                           F77_CMPLX*, F77_INT&, F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (cbesy, CBESY) (const F77_CMPLX*, const F77_REAL&,
-                           const F77_INT&, const F77_INT&,
-                           F77_CMPLX*, F77_INT&,
-                           F77_CMPLX*, F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (cbesi, CBESI) (const F77_CMPLX*, const F77_REAL&,
-                           const F77_INT&, const F77_INT&,
-                           F77_CMPLX*, F77_INT&, F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (cbesk, CBESK) (const F77_CMPLX*, const F77_REAL&,
-                           const F77_INT&, const F77_INT&,
-                           F77_CMPLX*, F77_INT&, F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (cbesh, CBESH) (const F77_CMPLX*, const F77_REAL&,
-                           const F77_INT&, const F77_INT&,
-                           const F77_INT&, F77_CMPLX*,
-                           F77_INT&, F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (zairy, ZAIRY) (const F77_DBLE&, const F77_DBLE&,
-                           const F77_INT&, const F77_INT&,
-                           F77_DBLE&, F77_DBLE&, F77_INT&,
-                           F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (cairy, CAIRY) (const F77_CMPLX*, const F77_INT&,
-                           const F77_INT&, F77_CMPLX*,
-                           F77_INT&, F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (zbiry, ZBIRY) (const F77_DBLE&, const F77_DBLE&,
-                           const F77_INT&, const F77_INT&,
-                           F77_DBLE&, F77_DBLE&, F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (cbiry, CBIRY) (const F77_CMPLX*, const F77_INT&, const F77_INT&,
-                           const F77_CMPLX*, F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (xdacosh, XDACOSH) (const F77_DBLE&, F77_DBLE&);
-
-  F77_RET_T
-  F77_FUNC (xacosh, XACOSH) (const F77_REAL&, F77_REAL&);
-
-  F77_RET_T
-  F77_FUNC (xdasinh, XDASINH) (const F77_DBLE&, F77_DBLE&);
-
-  F77_RET_T
-  F77_FUNC (xasinh, XASINH) (const F77_REAL&, F77_REAL&);
-
-  F77_RET_T
-  F77_FUNC (xdatanh, XDATANH) (const F77_DBLE&, F77_DBLE&);
-
-  F77_RET_T
-  F77_FUNC (xatanh, XATANH) (const F77_REAL&, F77_REAL&);
-
-  F77_RET_T
-  F77_FUNC (xderf, XDERF) (const F77_DBLE&, F77_DBLE&);
-
-  F77_RET_T
-  F77_FUNC (xerf, XERF) (const F77_REAL&, F77_REAL&);
-
-  F77_RET_T
-  F77_FUNC (xderfc, XDERFC) (const F77_DBLE&, F77_DBLE&);
-
-  F77_RET_T
-  F77_FUNC (xerfc, XERFC) (const F77_REAL&, F77_REAL&);
-
-  F77_RET_T
-  F77_FUNC (xdbetai, XDBETAI) (const F77_DBLE&, const F77_DBLE&,
-                               const F77_DBLE&, F77_DBLE&);
-
-  F77_RET_T
-  F77_FUNC (xbetai, XBETAI) (const F77_REAL&, const F77_REAL&,
-                             const F77_REAL&, F77_REAL&);
-
-  F77_RET_T
-  F77_FUNC (xdgamma, XDGAMMA) (const F77_DBLE&, F77_DBLE&);
-
-  F77_RET_T
-  F77_FUNC (xgamma, XGAMMA) (const F77_REAL&, F77_REAL&);
-
-  F77_RET_T
-  F77_FUNC (xgammainc, XGAMMAINC) (const F77_DBLE&, const F77_DBLE&, F77_DBLE&);
-
-  F77_RET_T
-  F77_FUNC (xsgammainc, XSGAMMAINC) (const F77_REAL&, const F77_REAL&, F77_REAL&);
-
-  F77_RET_T
-  F77_FUNC (dlgams, DLGAMS) (const F77_DBLE&, F77_DBLE&, F77_DBLE&);
-
-  F77_RET_T
-  F77_FUNC (algams, ALGAMS) (const F77_REAL&, F77_REAL&, F77_REAL&);
-
-  F77_RET_T
-  F77_FUNC (psifn, PSIFN) (const F77_REAL*, const F77_INT&,
-                           const F77_INT&, const F77_INT&,
-                           F77_REAL*, F77_INT*, F77_INT*);
-
-  F77_RET_T
-  F77_FUNC (dpsifn, DPSIFN) (const F77_DBLE*, const F77_INT&,
-                             const F77_INT&, const F77_INT&,
-                             F77_DBLE*, F77_INT*, F77_INT*);
-}
-
 namespace octave
 {
   namespace math
--- a/liboctave/numeric/lu.cc	Tue Aug 16 21:38:58 2016 -0700
+++ b/liboctave/numeric/lu.cc	Wed Aug 17 00:18:08 2016 -0400
@@ -29,98 +29,16 @@
 #include "CMatrix.h"
 #include "dColVector.h"
 #include "dMatrix.h"
-#include "f77-fcn.h"
 #include "fCColVector.h"
 #include "fCMatrix.h"
 #include "fColVector.h"
 #include "fMatrix.h"
 #include "lo-error.h"
+#include "lo-lapack-proto.h"
+#include "lo-qrupdate-proto.h"
 #include "lu.h"
 #include "oct-locbuf.h"
 
-extern "C"
-{
-  F77_RET_T
-  F77_FUNC (dgetrf, DGETRF) (const F77_INT&, const F77_INT&,
-                             F77_DBLE*, const F77_INT&,
-                             F77_INT*, F77_INT&);
-
-#if defined (HAVE_QRUPDATE_LUU)
-  F77_RET_T
-  F77_FUNC (dlu1up, DLU1UP) (const F77_INT&, const F77_INT&,
-                             F77_DBLE *, const F77_INT&,
-                             F77_DBLE *, const F77_INT&,
-                             F77_DBLE *, F77_DBLE *);
-
-  F77_RET_T
-  F77_FUNC (dlup1up, DLUP1UP) (const F77_INT&, const F77_INT&,
-                               F77_DBLE *, const F77_INT&,
-                               F77_DBLE *, const F77_INT&,
-                               F77_INT *, const F77_DBLE *,
-                               const F77_DBLE *, F77_DBLE *);
-#endif
-
-  F77_RET_T
-  F77_FUNC (sgetrf, SGETRF) (const F77_INT&, const F77_INT&,
-                             F77_REAL*, const F77_INT&, F77_INT*,
-                             F77_INT&);
-
-#if defined (HAVE_QRUPDATE_LUU)
-  F77_RET_T
-  F77_FUNC (slu1up, SLU1UP) (const F77_INT&, const F77_INT&,
-                             F77_REAL *, const F77_INT&,
-                             F77_REAL *, const F77_INT&,
-                             F77_REAL *, F77_REAL *);
-
-  F77_RET_T
-  F77_FUNC (slup1up, SLUP1UP) (const F77_INT&, const F77_INT&,
-                               F77_REAL *, const F77_INT&,
-                               F77_REAL *, const F77_INT&,
-                               F77_INT *, const F77_REAL *,
-                               const F77_REAL *, F77_REAL *);
-#endif
-
-  F77_RET_T
-  F77_FUNC (zgetrf, ZGETRF) (const F77_INT&, const F77_INT&,
-                             F77_DBLE_CMPLX*, const F77_INT&,
-                             F77_INT*, F77_INT&);
-
-#if defined (HAVE_QRUPDATE_LUU)
-  F77_RET_T
-  F77_FUNC (zlu1up, ZLU1UP) (const F77_INT&, const F77_INT&,
-                             F77_DBLE_CMPLX *, const F77_INT&,
-                             F77_DBLE_CMPLX *, const F77_INT&,
-                             F77_DBLE_CMPLX *, F77_DBLE_CMPLX *);
-
-  F77_RET_T
-  F77_FUNC (zlup1up, ZLUP1UP) (const F77_INT&, const F77_INT&,
-                               F77_DBLE_CMPLX *, const F77_INT&,
-                               F77_DBLE_CMPLX *, const F77_INT&,
-                               F77_INT *, const F77_DBLE_CMPLX *,
-                               const F77_DBLE_CMPLX *, F77_DBLE_CMPLX *);
-#endif
-
-  F77_RET_T
-  F77_FUNC (cgetrf, CGETRF) (const F77_INT&, const F77_INT&,
-                             F77_CMPLX*, const F77_INT&,
-                             F77_INT*, F77_INT&);
-
-#if defined (HAVE_QRUPDATE_LUU)
-  F77_RET_T
-  F77_FUNC (clu1up, CLU1UP) (const F77_INT&, const F77_INT&,
-                             F77_CMPLX *, const F77_INT&,
-                             F77_CMPLX *, const F77_INT&,
-                             F77_CMPLX *, F77_CMPLX *);
-
-  F77_RET_T
-  F77_FUNC (clup1up, CLUP1UP) (const F77_INT&, const F77_INT&,
-                               F77_CMPLX *, const F77_INT&,
-                               F77_CMPLX *, const F77_INT&,
-                               F77_INT *, const F77_CMPLX *,
-                               const F77_CMPLX *, F77_CMPLX *);
-#endif
-}
-
 namespace octave
 {
 namespace math
--- a/liboctave/numeric/module.mk	Tue Aug 16 21:38:58 2016 -0700
+++ b/liboctave/numeric/module.mk	Wed Aug 17 00:18:08 2016 -0400
@@ -36,7 +36,15 @@
   liboctave/numeric/fEIG.h \
   liboctave/numeric/gepbalance.h \
   liboctave/numeric/hess.h \
+  liboctave/numeric/lo-amos-proto.h \
+  liboctave/numeric/lo-arpack-proto.h \
+  liboctave/numeric/lo-blas-proto.h \
+  liboctave/numeric/lo-fftpack-proto.h \
+  liboctave/numeric/lo-lapack-proto.h \
   liboctave/numeric/lo-mappers.h \
+  liboctave/numeric/lo-qrupdate-proto.h \
+  liboctave/numeric/lo-ranlib-proto.h \
+  liboctave/numeric/lo-slatec-proto.h \
   liboctave/numeric/lo-specfun.h \
   liboctave/numeric/lu.h \
   liboctave/numeric/oct-convn.h \
--- a/liboctave/numeric/oct-rand.cc	Tue Aug 16 21:38:58 2016 -0700
+++ b/liboctave/numeric/oct-rand.cc	Wed Aug 17 00:18:08 2016 -0400
@@ -34,6 +34,7 @@
 #include "lo-error.h"
 #include "lo-ieee.h"
 #include "lo-mappers.h"
+#include "lo-ranlib-proto.h"
 #include "mach-info.h"
 #include "oct-locbuf.h"
 #include "oct-rand.h"
@@ -43,36 +44,6 @@
 #include "randpoisson.h"
 #include "singleton-cleanup.h"
 
-extern "C"
-{
-  F77_RET_T
-  F77_FUNC (dgennor, DGENNOR) (const F77_DBLE&, const F77_DBLE&, F77_DBLE&);
-
-  F77_RET_T
-  F77_FUNC (dgenunf, DGENUNF) (const F77_DBLE&, const F77_DBLE&, F77_DBLE&);
-
-  F77_RET_T
-  F77_FUNC (dgenexp, DGENEXP) (const F77_DBLE&, F77_DBLE&);
-
-  F77_RET_T
-  F77_FUNC (dignpoi, DIGNPOI) (const F77_DBLE&, F77_DBLE&);
-
-  F77_RET_T
-  F77_FUNC (dgengam, DGENGAM) (const F77_DBLE&, const F77_DBLE&, F77_DBLE&);
-
-  F77_RET_T
-  F77_FUNC (setall, SETALL) (const F77_INT4&, const F77_INT4&);
-
-  F77_RET_T
-  F77_FUNC (getsd, GETSD) (F77_INT4&, F77_INT4&);
-
-  F77_RET_T
-  F77_FUNC (setsd, SETSD) (const F77_INT4&, const F77_INT4&);
-
-  F77_RET_T
-  F77_FUNC (setcgn, SETCGN) (const F77_INT4&);
-}
-
 octave_rand *octave_rand::instance = 0;
 
 octave_rand::octave_rand (void)
--- a/liboctave/numeric/qr.cc	Tue Aug 16 21:38:58 2016 -0700
+++ b/liboctave/numeric/qr.cc	Wed Aug 17 00:18:08 2016 -0400
@@ -41,237 +41,11 @@
 #include "fRowVector.h"
 #include "idx-vector.h"
 #include "lo-error.h"
+#include "lo-lapack-proto.h"
+#include "lo-qrupdate-proto.h"
 #include "oct-locbuf.h"
 #include "qr.h"
 
-extern "C"
-{
-  F77_RET_T
-  F77_FUNC (dgeqrf, DGEQRF) (const F77_INT&, const F77_INT&,
-                             F77_DBLE*, const F77_INT&, F77_DBLE*,
-                             F77_DBLE*, const F77_INT&,
-                             F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (dorgqr, DORGQR) (const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_DBLE*,
-                             const F77_INT&, F77_DBLE*, F77_DBLE*,
-                             const F77_INT&, F77_INT&);
-
-#if defined (HAVE_QRUPDATE)
-
-  F77_RET_T
-  F77_FUNC (dqr1up, DQR1UP) (const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_DBLE*,
-                             const F77_INT&, F77_DBLE*,
-                             const F77_INT&, F77_DBLE*, F77_DBLE*, F77_DBLE*);
-
-  F77_RET_T
-  F77_FUNC (dqrinc, DQRINC) (const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_DBLE*,
-                             const F77_INT&, F77_DBLE*,
-                             const F77_INT&, const F77_INT&,
-                             const F77_DBLE*, F77_DBLE*);
-
-  F77_RET_T
-  F77_FUNC (dqrdec, DQRDEC) (const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_DBLE*,
-                             const F77_INT&, F77_DBLE*,
-                             const F77_INT&, const F77_INT&,
-                             F77_DBLE*);
-
-  F77_RET_T
-  F77_FUNC (dqrinr, DQRINR) (const F77_INT&, const F77_INT&,
-                             F77_DBLE*, const F77_INT&, F77_DBLE*,
-                             const F77_INT&, const F77_INT&,
-                             const F77_DBLE*, F77_DBLE*);
-
-  F77_RET_T
-  F77_FUNC (dqrder, DQRDER) (const F77_INT&, const F77_INT&,
-                             F77_DBLE*, const F77_INT&, F77_DBLE*,
-                             const F77_INT&, const F77_INT&,
-                             F77_DBLE*);
-
-  F77_RET_T
-  F77_FUNC (dqrshc, DQRSHC) (const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_DBLE*,
-                             const F77_INT&, F77_DBLE*,
-                             const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_DBLE*);
-
-#endif
-
-  F77_RET_T
-  F77_FUNC (sgeqrf, SGEQRF) (const F77_INT&, const F77_INT&,
-                             F77_REAL*, const F77_INT&, F77_REAL*, F77_REAL*,
-                             const F77_INT&, F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (sorgqr, SORGQR) (const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_REAL*,
-                             const F77_INT&, F77_REAL*, F77_REAL*,
-                             const F77_INT&, F77_INT&);
-
-#if defined (HAVE_QRUPDATE)
-
-  F77_RET_T
-  F77_FUNC (sqr1up, SQR1UP) (const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_REAL*,
-                             const F77_INT&, F77_REAL*,
-                             const F77_INT&, F77_REAL*, F77_REAL*, F77_REAL*);
-
-  F77_RET_T
-  F77_FUNC (sqrinc, SQRINC) (const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_REAL*,
-                             const F77_INT&, F77_REAL*,
-                             const F77_INT&,
-                             const F77_INT&, const F77_REAL*, F77_REAL*);
-
-  F77_RET_T
-  F77_FUNC (sqrdec, SQRDEC) (const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_REAL*,
-                             const F77_INT&, F77_REAL*,
-                             const F77_INT&,
-                             const F77_INT&, F77_REAL*);
-
-  F77_RET_T
-  F77_FUNC (sqrinr, SQRINR) (const F77_INT&, const F77_INT&,
-                             F77_REAL*, const F77_INT&,
-                             F77_REAL*, const F77_INT&,
-                             const F77_INT&, const F77_REAL*, F77_REAL*);
-
-  F77_RET_T
-  F77_FUNC (sqrder, SQRDER) (const F77_INT&, const F77_INT&,
-                             F77_REAL*, const F77_INT&,
-                             F77_REAL*, const F77_INT&,
-                             const F77_INT&, F77_REAL*);
-
-  F77_RET_T
-  F77_FUNC (sqrshc, SQRSHC) (const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_REAL*,
-                             const F77_INT&, F77_REAL*,
-                             const F77_INT&,
-                             const F77_INT&, const F77_INT&,
-                             F77_REAL*);
-
-#endif
-
-  F77_RET_T
-  F77_FUNC (zgeqrf, ZGEQRF) (const F77_INT&, const F77_INT&,
-                             F77_DBLE_CMPLX*, const F77_INT&, F77_DBLE_CMPLX*,
-                             F77_DBLE_CMPLX*, const F77_INT&,
-                             F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (zungqr, ZUNGQR) (const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_DBLE_CMPLX*, F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_INT&);
-
-#if defined (HAVE_QRUPDATE)
-
-  F77_RET_T
-  F77_FUNC (zqr1up, ZQR1UP) (const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_DBLE_CMPLX*,
-                             F77_DBLE_CMPLX*, F77_DBLE_CMPLX*, F77_DBLE*);
-
-  F77_RET_T
-  F77_FUNC (zqrinc, ZQRINC) (const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, const F77_INT&,
-                             const F77_DBLE_CMPLX*, F77_DBLE*);
-
-  F77_RET_T
-  F77_FUNC (zqrdec, ZQRDEC) (const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, const F77_INT&,
-                             F77_DBLE*);
-
-  F77_RET_T
-  F77_FUNC (zqrinr, ZQRINR) (const F77_INT&, const F77_INT&,
-                             F77_DBLE_CMPLX*, const F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, const F77_INT&,
-                             const F77_DBLE_CMPLX*, F77_DBLE*);
-
-  F77_RET_T
-  F77_FUNC (zqrder, ZQRDER) (const F77_INT&, const F77_INT&,
-                             F77_DBLE_CMPLX*, const F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, const F77_INT&,
-                             F77_DBLE_CMPLX*, F77_DBLE*);
-
-  F77_RET_T
-  F77_FUNC (zqrshc, ZQRSHC) (const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_DBLE_CMPLX*, F77_DBLE*);
-
-#endif
-
-  F77_RET_T
-  F77_FUNC (cgeqrf, CGEQRF) (const F77_INT&, const F77_INT&,
-                             F77_CMPLX*, const F77_INT&,
-                             F77_CMPLX*, F77_CMPLX*,
-                             const F77_INT&, F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (cungqr, CUNGQR) (const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_CMPLX*,
-                             const F77_INT&, F77_CMPLX*,
-                             F77_CMPLX*, const F77_INT&,
-                             F77_INT&);
-
-#if defined (HAVE_QRUPDATE)
-
-  F77_RET_T
-  F77_FUNC (cqr1up, CQR1UP) (const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_CMPLX*,
-                             const F77_INT&, F77_CMPLX*,
-                             const F77_INT&, F77_CMPLX*,
-                             F77_CMPLX*, F77_CMPLX*, F77_REAL*);
-
-  F77_RET_T
-  F77_FUNC (cqrinc, CQRINC) (const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_CMPLX*,
-                             const F77_INT&, F77_CMPLX*,
-                             const F77_INT&,const F77_INT&,
-                             const F77_CMPLX*, F77_REAL*);
-
-  F77_RET_T
-  F77_FUNC (cqrdec, CQRDEC) (const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_CMPLX*,
-                             const F77_INT&, F77_CMPLX*,
-                             const F77_INT&, const F77_INT&,
-                             F77_REAL*);
-
-  F77_RET_T
-  F77_FUNC (cqrinr, CQRINR) (const F77_INT&, const F77_INT&,
-                             F77_CMPLX*, const F77_INT&,
-                             F77_CMPLX*, const F77_INT&,
-                             const F77_INT&, const F77_CMPLX*,
-                             F77_REAL*);
-
-  F77_RET_T
-  F77_FUNC (cqrder, CQRDER) (const F77_INT&, const F77_INT&,
-                             F77_CMPLX*, const F77_INT&,
-                             F77_CMPLX*, const F77_INT&,
-                             const F77_INT&, F77_CMPLX*, F77_REAL*);
-
-  F77_RET_T
-  F77_FUNC (cqrshc, CQRSHC) (const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_CMPLX*,
-                             const F77_INT&, F77_CMPLX*,
-                             const F77_INT&, const F77_INT&,
-                             const F77_INT&, F77_CMPLX*,
-                             F77_REAL*);
-
-#endif
-}
-
 namespace octave
 {
 namespace math
--- a/liboctave/numeric/qrp.cc	Tue Aug 16 21:38:58 2016 -0700
+++ b/liboctave/numeric/qrp.cc	Wed Aug 17 00:18:08 2016 -0400
@@ -30,40 +30,14 @@
 #include "CMatrix.h"
 #include "dMatrix.h"
 #include "dRowVector.h"
-#include "f77-fcn.h"
 #include "fCMatrix.h"
 #include "fMatrix.h"
 #include "fRowVector.h"
 #include "lo-error.h"
+#include "lo-lapack-proto.h"
 #include "oct-locbuf.h"
 #include "qrp.h"
 
-extern "C"
-{
-  F77_RET_T
-  F77_FUNC (dgeqp3, DGEQP3) (const F77_INT&, const F77_INT&,
-                             F77_DBLE*, const F77_INT&,
-                             F77_INT*, F77_DBLE*, F77_DBLE*,
-                             const F77_INT&, F77_INT&);
-
-  F77_RET_T
-  F77_FUNC (sgeqp3, SGEQP3) (const F77_INT&, const F77_INT&,
-                             F77_REAL*, const F77_INT&, F77_INT*,
-                             F77_REAL*, F77_REAL*, const F77_INT&,
-                             F77_INT&);
-  F77_RET_T
-  F77_FUNC (zgeqp3, ZGEQP3) (const F77_INT&, const F77_INT&,
-                             F77_DBLE_CMPLX*, const F77_INT&,
-                             F77_INT*, F77_DBLE_CMPLX*, F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_DBLE*,
-                             F77_INT&);
-  F77_RET_T
-  F77_FUNC (cgeqp3, CGEQP3) (const F77_INT&, const F77_INT&,
-                             F77_CMPLX*, const F77_INT&,
-                             F77_INT*, F77_CMPLX*, F77_CMPLX*,
-                             const F77_INT&, F77_REAL*, F77_INT&);
-}
-
 namespace octave
 {
 namespace math
--- a/liboctave/numeric/randpoisson.cc	Tue Aug 16 21:38:58 2016 -0700
+++ b/liboctave/numeric/randpoisson.cc	Wed Aug 17 00:18:08 2016 -0400
@@ -39,6 +39,7 @@
 #include "lo-error.h"
 #include "lo-ieee.h"
 #include "lo-math.h"
+#include "lo-slatec-proto.h"
 #include "randmtzig.h"
 #include "randpoisson.h"
 
@@ -48,12 +49,6 @@
 #define RNOR oct_randn()
 #define LGAMMA xlgamma
 
-extern "C"
-{
-  F77_RET_T
-  F77_FUNC (dlgams, DLGAMS) (const F77_DBLE *, F77_DBLE *, F77_DBLE *);
-}
-
 static double
 xlgamma (double x)
 {
--- a/liboctave/numeric/schur.cc	Tue Aug 16 21:38:58 2016 -0700
+++ b/liboctave/numeric/schur.cc	Wed Aug 17 00:18:08 2016 -0400
@@ -26,87 +26,12 @@
 
 #include "CMatrix.h"
 #include "dMatrix.h"
-#include "f77-fcn.h"
 #include "fCMatrix.h"
 #include "fMatrix.h"
 #include "lo-error.h"
+#include "lo-lapack-proto.h"
 #include "schur.h"
 
-typedef octave_idx_type (*double_selector) (const double&, const double&);
-typedef octave_idx_type (*float_selector) (const float&, const float&);
-typedef octave_idx_type (*complex_selector) (const Complex&);
-typedef octave_idx_type (*float_complex_selector) (const FloatComplex&);
-
-extern "C"
-{
-  F77_RET_T
-  F77_FUNC (dgeesx, DGEESX) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             double_selector,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_DBLE*,
-                             const F77_INT&, F77_INT&,
-                             F77_DBLE*, F77_DBLE*, F77_DBLE*, const F77_INT&,
-                             F77_DBLE&, F77_DBLE&, F77_DBLE*, const F77_INT&,
-                             F77_INT*, const F77_INT&,
-                             F77_INT*, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (sgeesx, SGEESX) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             float_selector,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_REAL*,
-                             const F77_INT&, F77_INT&,
-                             F77_REAL*, F77_REAL*, F77_REAL*, const F77_INT&,
-                             F77_REAL&, F77_REAL&, F77_REAL*, const F77_INT&,
-                             F77_INT*, const F77_INT&,
-                             F77_INT*, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (zgeesx, ZGEESX) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             complex_selector,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_INT&,
-                             F77_DBLE_CMPLX*, F77_DBLE_CMPLX*, const F77_INT&,
-                             F77_DBLE&, F77_DBLE&, F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_DBLE*,
-                             F77_INT*, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (zrsf2csf, ZRSF2CSF) (const F77_INT&, F77_DBLE_CMPLX *,
-                                 F77_DBLE_CMPLX *, F77_DBLE *, F77_DBLE *);
-  F77_RET_T
-  F77_FUNC (cgeesx, CGEESX) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             float_complex_selector,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, F77_CMPLX*,
-                             const F77_INT&, F77_INT&,
-                             F77_CMPLX*, F77_CMPLX*,
-                             const F77_INT&, F77_REAL&, F77_REAL&,
-                             F77_CMPLX*, const F77_INT&,
-                             F77_REAL*, F77_INT*, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (crsf2csf, CRSF2CSF) (const F77_INT&, F77_CMPLX *,
-                                 F77_CMPLX *, F77_REAL *, F77_REAL *);
-}
-
 namespace octave
 {
 namespace math
--- a/liboctave/numeric/sparse-qr.cc	Tue Aug 16 21:38:58 2016 -0700
+++ b/liboctave/numeric/sparse-qr.cc	Wed Aug 17 00:18:08 2016 -0400
@@ -34,7 +34,7 @@
 {
 namespace math
 {
-  
+
 template <typename SPARSE_T>
 class
 cxsparse_types
--- a/liboctave/numeric/svd.cc	Tue Aug 16 21:38:58 2016 -0700
+++ b/liboctave/numeric/svd.cc	Wed Aug 17 00:18:08 2016 -0400
@@ -34,99 +34,12 @@
 #include "dDiagMatrix.h"
 #include "fDiagMatrix.h"
 #include "dMatrix.h"
-#include "f77-fcn.h"
 #include "fCMatrix.h"
 #include "fMatrix.h"
 #include "lo-error.h"
+#include "lo-lapack-proto.h"
 #include "oct-locbuf.h"
 
-extern "C"
-{
-  F77_RET_T
-  F77_FUNC (dgesvd, DGESVD) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_INT&,
-                             F77_DBLE*, const F77_INT&, F77_DBLE*,
-                             F77_DBLE*, const F77_INT&, F77_DBLE*,
-                             const F77_INT&, F77_DBLE*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (dgesdd, DGESDD) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_INT&,
-                             F77_DBLE*, const F77_INT&, F77_DBLE*,
-                             F77_DBLE*, const F77_INT&, F77_DBLE*,
-                             const F77_INT&, F77_DBLE*,
-                             const F77_INT&, F77_INT *,
-                             F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (sgesvd, SGESVD) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_INT&,
-                             F77_REAL*, const F77_INT&, F77_REAL*,
-                             F77_REAL*, const F77_INT&, F77_REAL*,
-                             const F77_INT&, F77_REAL*,
-                             const F77_INT&, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (sgesdd, SGESDD) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_INT&,
-                             F77_REAL*, const F77_INT&, F77_REAL*,
-                             F77_REAL*, const F77_INT&, F77_REAL*,
-                             const F77_INT&, F77_REAL*,
-                             const F77_INT&, F77_INT *,
-                             F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (zgesvd, ZGESVD) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_INT&,
-                             F77_DBLE_CMPLX*, const F77_INT&,
-                             F77_DBLE*, F77_DBLE_CMPLX*, const F77_INT&,
-                             F77_DBLE_CMPLX*, const F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_DBLE*, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (zgesdd, ZGESDD) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_INT&,
-                             F77_DBLE_CMPLX*, const F77_INT&,
-                             F77_DBLE*, F77_DBLE_CMPLX*, const F77_INT&,
-                             F77_DBLE_CMPLX*, const F77_INT&, F77_DBLE_CMPLX*,
-                             const F77_INT&, F77_DBLE*,
-                             F77_INT *, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-  F77_RET_T
-  F77_FUNC (cgesvd, CGESVD) (F77_CONST_CHAR_ARG_DECL,
-                             F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_INT&,
-                             F77_CMPLX*, const F77_INT&, F77_REAL*,
-                             F77_CMPLX*, const F77_INT&,
-                             F77_CMPLX*, const F77_INT&,
-                             F77_CMPLX*, const F77_INT&,
-                             F77_REAL*, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL
-                             F77_CHAR_ARG_LEN_DECL);
-
-  F77_RET_T
-  F77_FUNC (cgesdd, CGESDD) (F77_CONST_CHAR_ARG_DECL,
-                             const F77_INT&, const F77_INT&,
-                             F77_CMPLX*, const F77_INT&, F77_REAL*,
-                             F77_CMPLX*, const F77_INT&,
-                             F77_CMPLX*, const F77_INT&,
-                             F77_CMPLX*, const F77_INT&,
-                             F77_REAL*, F77_INT *, F77_INT&
-                             F77_CHAR_ARG_LEN_DECL);
-}
-
 namespace octave
 {
 namespace math