TODO

These are the public domain packages we should convert to C and put
under the GPL:

fftpack -- mostly done (sine and cosine transforms still to do, want
           to add 2-d ffts, N-d ffts, convolutions)
quadpack -- in progress (Brian)
specfun -- in progress (Jerry)
ranlib --  add the stuff we don't have
minpack -- 
odepack --
blas --  
starpac -- 
dassl --
eispack --
lapack  -- 
linpack -- 
any others ???

(At the present rate we'll be into the next century before we get to
the end of that list).

* More tests. We should (at least) have a test for every error
condition. Write a perl script to check for error conditions that
aren't tested. Actually GCOV does a better job -- use that for
coverage testing.

* We need support for general N-d arrays. Currently we have only
vectors and matrices, which are two-dimensional.

* BLAS, we should have something tunable like ATLAS but less
complicated so we can run a few quick tests at configure time to find
out how much cache there is and how many registers. Give people a way
to do the full tuning if they want to.

* Clean up 'roots' directory. 

* Change return 0 to return GSL_SUCCESS, and return -1 to GSL_FAILURE
throughout, where appropriate

* Make sure GNUDL will be able to do everything that PAW can do
(non-trivial).

* We have to make SWIG wrappers work.

* Write a C++ interface to replace Rogue Wave's Math.h++
  (Brian has started this)

* Some header files for physical constants (?).

* Other stuff we might want: filters, wavelets, coordinate system
transformations, grids and fields, ...

* Make sure gsl_config.h is used consistently. This is especially
  relevant for HAVE_INLINE use in installed headers.

* Public domain mapping tools http://www.soest.hawaii.edu/gmt/
  Actually some discussion on debian-devel says they may not be so 
  public domain as they claim. Look into it.

* Allow the user to test which version they are using, so that a specific
version can be required.

* Add swig.i files and swig demos so that swig can be run more easily

* Change the use of function pointers to allow parameters, needed for
multi-threaded programs and also to allow the use of scripting
language objects instead of compiled C functions.

* Redesign the interface to iterative function to use an init/do-while
construct
 
* Make the return value EINVAL vs EDOM consistent for invalid parameters

* Constant objects (like gsl_roots_fsolver_brent) ought to have
constant pointers (const gsl_roots_fsolver_type * const
gsl_roots_fsolver_brent)??
