Octave PROJECTS                                          -*- text -*-
===============

Check with bug-octave@che.utexas.edu for a possibly more current copy.
Also, if you start working steadily on a project, please let
bug-octave@che.utexas.edu know.  We might have information that could
help you; we'd also like to send you the GNU coding standards.

This list is not exclusive -- there are many other things that might
be good projects, but it might instead be something we already have,
so check with bug-octave@che.utexas.edu before you start.


  * Improve the Texinfo Documentation for the interpreter.  It would
    be useful to have lots more examples, and to not have so many
    forward references.

  * Texinfo documentation for the C++ classes.

  * Improve logm, and sqrtm.

  * Improve complex mapper functions.

  * More functions to implement:
    - atan2        - delete/rm    - erf/erfc
    - qz           - type         - what
    - diary

  * Share more code among the various *_options functions.

  * Support for lp_solve for linear programming problems.

  * Optional inputs for lp_solve.

  * Support for FSQP.

  * Convert FSQP style NLP statement to NPSOL style.

  * Convert NPSOL style NLP statement to FSQP style.
    - Look for linear equality constraints, extract corresponding rows
	of C.  The rest are inequality constraints.
    - Look for Nonlinear equality constraints and set up a vector of
	pointers for shuffling.
    - Transform lb <= C*x <= ub, lb != ub, to C*x - ub <= 0 and
	lb - C*x <= 0.  Likewise for lb <= g(x) <= ub.
    - Call FSQP.

  * Optional inputs for fsqp.

  * Support for sparse matrices.

  * Arrange for builtin functions to be called with argv[0] == function
    name.  Same for user-defined functions (add another variable like
    nargin and nargout to hold the function name?).

  * Optional recursive search of subdirectories for M-files, like TeX
    does for macro files.  [Kurt Hornik <hornik@neuro.tuwien.ac.at>]

  * Fix CollocWt to handle Laguerre polynomials.  Make it easy to
    extend it to other polynomial types.

  * Add optional arguments to colloc so that it's not restricted to
    Legendre polynomials.

  * More C++/Fortran cleanups.

  * Translate Fortran routines to C/C++, or replace them entirely.

  * Use matherr() (or whatever -- this is system dependent) to allow
    users to suppress errors from log(), sqrt(), etc.

  * Send usage messages to cout to avoid cerr character buffering?

  * It is likely that there are still some memory leaks.  Hunt then down
    and plug them. 

  * Too much time is spent allocating and freeing memory.  What can be
    done to improve performance?

  * Add an `autoload' function to simplify builtin functions that need
    to look for user-defined functions in m-files.

  * Error output from Fortran code is ugly.  Something should be done to
    make it look better.

  * It would be nice if output from the Fortran routines could be
    passed through the pager.

  * In an X11 or other windowing environment, allow the user to pop up
    windows for menus and other purposes.

  * Add a way to handle events, like alarms, mouse clicks, etc.

  * Implement some form of constant folding in the parser.  This
    shouldn't be too difficult for simple binary and unary operations.

  * Make load work for files saved by Matlab.

  * Allow save to store data in binary format.

  * Allow functions to be loaded dynamically, and allow linking of
    user functions written in C++, C or Fortran.  Some work has been
    done to use dld for this, but other methods would be considered
    if a consistent interface can be designed.

  * Remove the buffer size limit in octave_read() in input.cc.

  * Add a generic list type.  Maybe this should really be an
    associative array type like RLaB has.  Look at that to see what it
    is and how it works.

  * Add some sort of way to handle data structures.  Possibly
    something like:

      foo.a = bar;

    would set element `a' of the structure `foo' to the value of of
    the variable `bar'.  If `foo' does not have an element called `a',
    it would be added to the list.  Doing things this way would avoid
    having to declare structures in advance.

  * Either do something reasonable or remove all support for Inf and
    NaN for machines without IEEE math.

  * Fix eig to also be able to solve the generalized eigenvalue
    problem, and to solve for eigenvalues and eigenvectors without
    performing a balancing step first.

  * Improve assignment of [] so that Octave will handle cases like

      a = rand(4);
      a(2,[1,2,3,4]);
      a(2,[3,1,4,2]);

    not just a(2,:).  They are all equivalent, so we should allow all
    of them.  It would also be nice to handle special cases in the
    fortran_style_matrix_assignment function, but that is harder.

  * A better man page (this is only a secondary goal -- Texinfo
    documentation is what's really needed).

  * Handle arrays with more than two dimensions.

  * Fix the code that handles multiple assignments so that the
    following will behave as shown:

      octave:13> function [x, y, z] = f (u, s, v)
      >   x = u;
      >   z = v;
      > end
      octave:13> [a, b, c] = f (1, 2, 3)
      a = 1

      error: `b' undefined

      c = 2

  * The utils.cc file is getting too big?

  * Eliminate mx-kludge.{h,cc} in favor of MArray.{h,cc}.  (As of
    g++ 2.5.7, this appears to require bug fixes for g++.)

  * Only include config.h in files that actually need it, instead of
    including it in every .cc file.  Unfortunately, this might not be
    so easy to figure out.

  * Finish adapting the matlab.el file to work with Octave.

  * Make the `who' command do name globbing on any arguments that
    don't begin with a `-'.  Try to avoid printing headers unless
    there is at least one match.

  * Squash bugs.

                                --30--
