changeset 605:4f65175911a6

[project @ 1994-08-13 20:10:39 by jwe]
author jwe
date Sat, 13 Aug 1994 20:10:39 +0000
parents 1acdc9e50cd2
children 91ab3cfc2376
files src/builtins.cc src/pt-const.h src/symtab.cc src/symtab.h src/tc-rep.h src/user-prefs.cc src/user-prefs.h src/variables.cc
diffstat 8 files changed, 382 insertions(+), 2133 deletions(-) [+]
line wrap: on
line diff
--- a/src/builtins.cc
+++ b/src/builtins.cc
@@ -1,1165 +1,265 @@
-// builtins.cc                                           -*- C++ -*-
-/*
-
-Copyright (C) 1992, 1993, 1994 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 2, 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, write to the Free
-Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
-
-*/
+// DO NOT EDIT!  Generated automatically by mkbuiltins.
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
 
-#include <iostream.h>
-#include <strstream.h>
-#include <math.h>
-#include <float.h>
-
-#include "tree-const.h"
-#include "t-builtins.h"
-#include "g-builtins.h"
-#include "builtins.h"
-#include "octave.h"
-#include "utils.h"
-#include "tree.h"
-#include "help.h"
-#include "pager.h"
-#include "sysdep.h"
 #include "mappers.h"
 #include "variables.h"
-#include "user-prefs.h"
-#include "missing-math.h"
-
-// NOTE: nargin == 1 means that the function takes no arguments (just
-// like C, the first argument is (or should be, anyway) the function
-// name).  Also, -1 is shorthand for infinity.
-
-// The following initializations may eventually need to be reworked
-// like the builtin functions in bash were around version 1.12...
-
-static builtin_mapper_functions mapper_functions[] =
-{
-  { "abs", 0, 0.0, 0.0, fabs, abs, NULL,
-    "abs (X): compute abs (X) for each element of X", },
-
-  { "acos", 1, -1.0, 1.0, acos, NULL, acos,
-    "acos (X): compute acos (X) for each element of X", },
-
-  { "acosh", 1, 1.0, DBL_MAX, acosh, NULL, acosh,
-    "acosh (X): compute acosh (X) for each element of X", },
-
-  { "angle", 0, 0.0, 0.0, arg, arg, NULL,
-    "angle (X): compute arg (X) for each element of X", },
-
-  { "arg", 0, 0.0, 0.0, arg, arg, NULL,
-    "arg (X): compute arg (X) for each element of X", },
-
-  { "asin", 1, -1.0, 1.0, asin, NULL, asin,
-    "asin (X): compute asin (X) for each element of X", },
-
-  { "asinh", 0, 0.0, 0.0, asinh, NULL, asinh,
-    "asinh (X): compute asinh (X) for each element of X", },
-
-  { "atan", 0, 0.0, 0.0, atan, NULL, atan,
-    "atan (X): compute atan (X) for each element of X", },
-
-  { "atanh", 1, -1.0, 1.0, atanh, NULL, atanh,
-    "atanh (X): compute atanh (X) for each element of X", },
-
-  { "ceil", 0, 0.0, 0.0, ceil, NULL, ceil,
-    "ceil (X): round elements of X toward +Inf", },
-
-  { "conj", 0, 0.0, 0.0, conj, NULL, conj,
-    "conj (X): compute complex conjugate for each element of X", },
-
-  { "cos", 0, 0.0, 0.0, cos, NULL, cos,
-    "cos (X): compute cos (X) for each element of X", },
-
-  { "cosh", 0, 0.0, 0.0, cosh, NULL, cosh,
-    "cosh (X): compute cosh (X) for each element of X", },
-
-  { "exp", 0, 0.0, 0.0, exp, NULL, exp,
-    "exp (X): compute exp (X) for each element of X", },
-
-  { "finite", 0, 0.0, 0.0, xfinite, xfinite, NULL,
-    "finite (X): return 1 for finite elements of X", },
-
-  { "fix", 0, 0.0, 0.0, fix, NULL, fix,
-    "fix (X): round elements of X toward zero", },
-
-  { "floor", 0, 0.0, 0.0, floor, NULL, floor,
-    "floor (X): round elements of X toward -Inf", },
-
-  { "isinf", 0, 0.0, 0.0, xisinf, xisinf, NULL,
-    "isinf (X): return 1 for elements of X infinite", },
-
-  { "imag", 0, 0.0, 0.0, imag, imag, NULL,
-    "imag (X): return imaginary part for each elements of X", },
-
-#ifdef HAVE_ISNAN
-  { "isnan", 0, 0.0, 0.0, xisnan, xisnan, NULL,
-    "isnan (X): return 1 where elements of X are NaNs", },
-#endif
-
-  { "log", 1, 0.0, DBL_MAX, log, NULL, log,
-    "log (X): compute log (X) for each element of X", },
-
-  { "log10", 1, 0.0, DBL_MAX, log10, NULL, log10,
-    "log10 (X): compute log10 (X) for each element of X", },
-
-  { "real", 0, 0.0, 0.0, real, real, NULL,
-    "real (X): return real part for each element of X", },
-
-  { "round", 0, 0.0, 0.0, round, NULL, round,
-    "round (X): round elements of X to nearest integer", },
-
-  { "sign", 0, 0.0, 0.0, signum, NULL, signum,
-    "sign (X): apply signum function to elements of X", },
-
-  { "sin", 0, 0.0, 0.0, sin, NULL, sin,
-    "sin (X): compute sin (X) for each element of X", },
-
-  { "sinh", 0, 0.0, 0.0, sinh, NULL, sinh,
-    "sinh (X): compute sinh (X) for each element of X", },
+#include "builtins.h"
+#include "oct-obj.h"
 
-  { "sqrt", 1, 0.0, DBL_MAX, sqrt, NULL, sqrt,
-    "sqrt (X): compute sqrt (X) for each element of X", },
-
-  { "tan", 0, 0.0, 0.0, tan, NULL, tan,
-    "tan (X): compute tan (X) for each element of X", },
-
-  { "tanh", 0, 0.0, 0.0, tanh, NULL, tanh,
-    "tanh (X): compute tanh (X) for each element of X", },
-
-  { NULL, -1, 0.0, 0.0, NULL, NULL, NULL, NULL, },
-};
-
-static builtin_text_functions text_functions[] =
+static void
+install_builtin_functions (void)
 {
-  { "casesen", 2, builtin_casesen,
-    "casesen [on|off]", },
-
-  { "cd", 2, builtin_cd,
-    "cd [dir]\n\n\
-change current working directory\n\
-if no arguments are given, the current directory is changed to the\n\
-users home directory", },
-
-  { "clear", -1, builtin_clear,
-    "clear [name ...]\n\n\
-clear symbol(s) matching a list of regular expressions\n\
-if no arguments are given, clear all user-defined variables and functions", },
-
-  { "dir", -1, builtin_ls,
-    "dir [options]\n\nprint a directory listing", },
-
-  { "document", -1, builtin_document,
-    "document symbol string ...\n\n", },
-
-  { "edit_history", -1, builtin_edit_history,
-    "edit_history [first] [last]\n\nedit commands from the history list", },
-
-  { "format", -1, builtin_format,
-    "format [style]\n\nset output formatting style", },
-
-  { "help", -1, builtin_help,
-    "help [-i] [topic ...]\n\nprint cryptic yet witty messages", },
-
-  { "history", -1, builtin_history,
-    "history [N] [-w file] [-r file] [-q]\n\n\
-display, save, or load command history", },
-
-  { "hold", -1, builtin_hold,
-    "hold [on|off]\n\n\
-determine whether the plot window is cleared before the next line is drawn", },
-
-  { "load", -1, builtin_load,
-    "load [-force] file\n\nload variables from a file", },
-
-  { "ls", -1, builtin_ls,
-    "ls [options]\n\nprint a directory listing", },
-
-  { "run_history", -1, builtin_run_history,
-    "run_history [first] [last]\n\nrun commands from the history list", },
-
-  { "save", -1, builtin_save,
-    "save file [var ...]\n\nsave variables in a file", },
-
-  { "set", -1, builtin_set,
-    "set [options]\n\nset plotting options", },
-
-  { "show", -1, builtin_show,
-    "show [options]\n\nshow plotting options", },
-
-  { "who", -1, builtin_who,
-    "who [-all] [-builtins] [-functions] [-long] [-variables]\n\n\
-List currently defined symbol(s).  Options may be shortened to one\n\
-character, but may not be combined.", },
-
-  { NULL, -1, NULL, NULL, },
-};
-
-static builtin_general_functions general_functions[] =
-{
-  { "all", 2, 1, builtin_all,
-    "all (X): are all elements of X nonzero?", },
-
-  { "any", 2, 1, builtin_any,
-    "any (X): are any elements of X nonzero?", },
-
-  { "balance", 4, 4, builtin_balance,
-    "aa = balance (a [, opt]) or [[dd,] aa] =  balance (a [, opt])\n\
-  generalized eigenvalue problem:\n\
-    [cc, dd, aa, bb] = balance (a, b [, opt])\n\
-where \"opt\" is an optional single character argument as follows: \n\
-  \"N\" or \"n\": no balancing; arguments copied, transformation(s) \n\
-              set to identity\n\
-  \"P\" or \"p\": permute argument(s) to isolate eigenvalues where possible\n\
-  \"S\" or \"s\": scale to improve accuracy of computed eigenvalues\n\
-  \"B\" or \"b\": (default) permute and scale, in that order. Rows/columns of a \n\
-              (and b) that are isolated by permutation are not scaled\n\
-[dd, aa] = balance (a, opt) returns aa = dd\a*dd,\n\
-[cc, dd, aa, bb] = balance (a, b, opt) returns aa (bb) = cc*a*dd (cc*b*dd)", },
+ extern Octave_object      Fall    (const Octave_object& args, int nargout) ; static builtin_function     Sall   = {   "all"  ,     2  ,     1  ,   0 ,     Fall  ,    
+  "all (X): are all elements of X nonzero?"   }; install_builtin_function (&    Sall  );   
+ extern Octave_object      Fany    (const Octave_object& args, int nargout) ; static builtin_function     Sany   = {   "any"  ,     2  ,     1  ,   0 ,     Fany  ,    
+  "any (X): are any elements of X nonzero?"   }; install_builtin_function (&    Sany  );   
+ extern Octave_object      Fcumprod    (const Octave_object& args, int nargout) ; static builtin_function     Scumprod   = {   "cumprod"  ,     2  ,     1  ,   0 ,     Fcumprod  ,    
+  "cumprod (X): cumulative products"   }; install_builtin_function (&    Scumprod  );   
+ extern Octave_object      Fcumsum    (const Octave_object& args, int nargout) ; static builtin_function     Scumsum   = {   "cumsum"  ,     2  ,     1  ,   0 ,     Fcumsum  ,    
+  "cumsum (X): cumulative sums"   }; install_builtin_function (&    Scumsum  );   
+ extern Octave_object      Fdiag    (const Octave_object& args, int nargout) ; static builtin_function     Sdiag   = {   "diag"  ,     3  ,     1  ,   0 ,     Fdiag  ,    
+  "diag (X [,k]): form/extract diagonals"   }; install_builtin_function (&    Sdiag  );   
+ extern Octave_object      Fisstr    (const Octave_object& args, int nargout) ; static builtin_function     Sisstr   = {   "isstr"  ,     2  ,     1  ,   0 ,     Fisstr  ,    
+  "isstr (X): return 1 if X is a string, 0 otherwise"   }; install_builtin_function (&    Sisstr  );   
+ extern Octave_object      Fprod    (const Octave_object& args, int nargout) ; static builtin_function     Sprod   = {   "prod"  ,     2  ,     1  ,   0 ,     Fprod  ,    
+  "prod (X): products"   }; install_builtin_function (&    Sprod  );   
+ extern Octave_object      Fsetstr    (const Octave_object& args, int nargout) ; static builtin_function     Ssetstr   = {   "setstr"  ,     2  ,     1  ,   0 ,     Fsetstr  ,    
+  "setstr (V): convert a vector to a string"   }; install_builtin_function (&    Ssetstr  );   
+ extern Octave_object      Fsize    (const Octave_object& args, int nargout) ; static builtin_function     Ssize   = {   "size"  ,     2  ,     1  ,   0 ,     Fsize  ,    
+  "[m, n] = size (x): return rows and columns of X"   }; install_builtin_function (&    Ssize  );   
+ extern Octave_object      Fsum    (const Octave_object& args, int nargout) ; static builtin_function     Ssum   = {   "sum"  ,     2  ,     1  ,   0 ,     Fsum  ,    
+  "sum (X): sum of elements"   }; install_builtin_function (&    Ssum  );   
+ extern Octave_object      Fsumsq    (const Octave_object& args, int nargout) ; static builtin_function     Ssumsq   = {   "sumsq"  ,     2  ,     1  ,   0 ,     Fsumsq  ,    
+  "sumsq (X): sum of squares of elements"   }; install_builtin_function (&    Ssumsq  );   
+ extern Octave_object      Fones    (const Octave_object& args, int nargout) ; static builtin_function     Sones   = {   "ones"  ,     3  ,     1  ,   0 ,     Fones  ,    
+  "ones (N), ones (N, M), ones (X): create a matrix of all ones"   }; install_builtin_function (&    Sones  );   
+ extern Octave_object      Fzeros    (const Octave_object& args, int nargout) ; static builtin_function     Szeros   = {   "zeros"  ,     3  ,     1  ,   0 ,     Fzeros  ,    
+  "zeros (N), zeros (N, M), zeros (X): create a matrix of all zeros"   }; install_builtin_function (&    Szeros  );   
+ extern Octave_object      Feye    (const Octave_object& args, int nargout) ; static builtin_function     Seye   = {   "eye"  ,     3  ,     1  ,   0 ,     Feye  ,    
+  "eye (N), eye (N, M), eye (X): create an identity matrix"   }; install_builtin_function (&    Seye  );   
+ extern Octave_object      Fcd    (const Octave_object& args, int nargout) ; static builtin_function     Scd   = {   "cd"  ,     2  ,     1  ,   1 ,     Fcd  ,    
+  "cd [dir]\n\nchange current working directory\nif no arguments are given, the current directory is changed to the\nusers home directory"   }; install_builtin_function (&    Scd  );   
+ extern Octave_object      Fls    (const Octave_object& args, int nargout) ; static builtin_function     Sls   = {   "ls"  ,     -1  ,     1  ,   1 ,     Fls  ,    
+  "ls [options]\n\nprint a directory listing"   }; install_builtin_function (&    Sls  );   
+ alias_builtin ("dir", "ls");   ;
 
-  { "chol", 2, 1, builtin_chol,
-    "chol (X): cholesky factorization", },
-
-  { "clc", 1, 0, builtin_clc,
-    "clc (): clear screen", },
-
-  { "clock", 1, 0, builtin_clock,
-    "clock (): return current date and time in vector", },
-
-  { "closeplot", 1, 0, builtin_closeplot,
-    "closeplot (): close the stream to plotter", },
-
-  { "colloc", 7, 4, builtin_colloc,
-    "[r, A, B, q] = colloc (n [, \"left\"] [, \"right\"]): collocation weights", },
-
-  { "cumprod", 2, 1, builtin_cumprod,
-    "cumprod (X): cumulative products", },
-
-  { "cumsum", 2, 1, builtin_cumsum,
-    "cumsum (X): cumulative sums", },
-
-  { "dassl", 5, 1, builtin_dassl,
-    "dassl (\"function_name\", x_0, xdot_0, t_out)\n\
-  dassl (\"function_name\", x_0, xdot_0, t_out, t_crit)\n\
-\n\
-The first argument is the name of the function to call to\n\
-compute the vector of residuals.  It must have the form\n\
-\n\
-  res = f (x, xdot, t)\n\
-\n\
-where x, xdot, and res are vectors, and t is a scalar.", },
-
-  { "dassl_options", -1, 1, builtin_dassl_options,
-    "dassl_options (keyword, value)\n\n\
-       Set or show options for dassl.  Keywords may be abbreviated\n\
-       to the shortest match.", },
-
-  { "date", 1, 0, builtin_date,
-    "date (): return current date in a string", },
-
-  { "det", 2, 1, builtin_det,
-    "det (X): determinant of a square matrix", },
-
-  { "diag", 3, 1, builtin_diag,
-    "diag (X [,k]): form/extract diagonals", },
-
-  { "disp", 3, 1, builtin_disp,
-    "disp (X): display value", },
-
-  { "eig", 2, 1, builtin_eig,
-    "eig (x) or [v, d] = eig (x): compute eigenvalues and eigenvectors of x", },
-
-  { "error", 2, 1, builtin_error,
-    "error (\"message\"): print message and jump to top level", },
-
-  { "eval", 2, 1, builtin_eval,
-    "eval (\"string\"): evaluate text as octave source", },
-
-  { "exist", 2, 1, builtin_exist,
-    "exist (\"name\"): check if variable or file exists", },
-
-  { "exit", 1, 0, builtin_quit,
-    "exit (): exit Octave gracefully", },
-
-  { "expm", 2, 1, builtin_expm,
-    "expm (X): matrix exponential, e^A", },
-
-  { "eye", 3, 1, builtin_eye,
-    "eye (n), eye (n, m), eye (X): create an identity matrix", },
-
-  { "fclose", 2, 1, builtin_fclose,
-    "fclose (\"filename\" or filenum): close a file", },
-
-  { "feof", 2, 1, builtin_feof,
-    "error = feof (\"filename\" or filenum)\n\n\
- Returns a non zero value for an end of file condition for the\n\
- file specified by \"filename\" filenum from fopen", },
-
-  { "ferror", 2, 1, builtin_ferror,
-    "error = ferror (\"filename\" or filenum)\n\n\
- Returns a non zero value for an error condition on the\n\
- file specified by \"filename\" or filenum from fopen", },
-
-  { "feval", -1, 1, builtin_feval,
-    "feval (\"name\", args, ...): evaluate first argument as function", },
-
-  { "fflush", 2, 1, builtin_fflush,
-    "fflush (\"filename\" or filenum): flush buffered data to output file", },
-
-  { "fft", 2, 1, builtin_fft,
-    "fft (X): fast fourier transform of a vector", },
-
-  { "fgets",3, 2, builtin_fgets,
-    "[string, length] = fgets (\"filename\" or filenum, length): read a string from a file", },
-
-  { "find", 2, 3, builtin_find,
-    "find (x) or [i, j, v] = find (x): Return indices of nonzero elements", },
-
-  { "flops", 2, 1, builtin_flops,
-    "flops (): count floating point operations", },
-
-  { "fopen", 3, 1, builtin_fopen,
-    "filenum = fopen (\"filename\", \"mode\"): open a file\n\n\
-  Valid values for mode include:\n\n\
-   r  : open text file for reading\n\
-   w  : open text file for writing; discard previous contents if any\n\
-   a  : append; open or create text file for writing at end of file\n\
-   r+ : open text file for update (i.e., reading and writing)\n\
-   w+ : create text file for update; discard previous contents if any\n\
-   a+ : append; open or create text file for update, writing at end\n\n\
- Update mode permits reading from and writing to the same file.\n", },
-
-  { "fprintf", -1, 1, builtin_fprintf,
-    "fprintf (\"file\", \"fmt\", ...)", },
-
-  { "fread", 4, 2, builtin_fread,
-    "[data, count] = fread (filenum, size, \"precision\")\n\n\
- Reads data in binary form of type \"precision\" from a file.\n\n\
- filenum   : file number from fopen\n\
- size      : size specification for the Data matrix\n\
- precision : type of data to read, valid types are\n\n\
-               'char',   'schar', 'short',  'int',  'long', 'float'\n\
-               'double', 'uchar', 'ushort', 'uint', 'ulong'\n\n\
- data      : matrix in which the data is stored\n\
- count     : number of elements read", },
-
-  { "freport", 1, 1, builtin_freport,
-    "freport (): list open files and their status", },
-
-  { "frewind", 2, 1, builtin_frewind,
-    "frewind (\"filename\" or filenum): set file position at beginning of file", },
-
-  { "fscanf", 3, -1, builtin_fscanf,
-    "[a, b, c, ...] = fscanf (\"file\", \"fmt\")", },
-
-  { "fseek", 4, 1, builtin_fseek,
-    "fseek (\"filename\" or filenum, offset [, origin]): set file position for reading or writing", },
-
-  { "fsolve", 5, 1, builtin_fsolve,
-    "Solve nonlinear equations using Minpack.  Usage:\n\
-\n\
-  [x, info] = fsolve (\"f\", x0)\n\
-\n\
-Where the first argument is the name of the  function to call to\n\
-compute the vector of function values.  It must have the form\n\
-\n\
-  y = f (x)
-\n\
-where y and x are vectors.", },
-
-  { "fsolve_options", -1, 1, builtin_fsolve_options,
-    "fsolve_options (keyword, value)\n\n\
-       Set or show options for fsolve.  Keywords may be abbreviated\n\
-       to the shortest match.", },
-
-  { "fsqp", 11, 3, builtin_fsqp,
-#if defined (FSQP_MISSING)
-    "This function requires FSQP, which is not freely\n\
-       redistributable.  For more information, read the file\n\
-       libcruft/fsqp/README.MISSING in the source distribution.", },
-#else
-  "[x, phi] = fsqp (x, \"phi\" [, lb, ub] [, lb, A, ub] [, lb, \"g\", ub])\n\n\
-  Groups of arguments surrounded in `[]' are optional, but\n\
-  must appear in the same relative order shown above.", },
-#endif
-
-  { "fsqp_options", -1, 1, builtin_fsqp_options,
-#if defined (FSQP_MISSING)
-    "This function requires FSQP, which is not freely\n\
-       redistributable.  For more information, read the file\n\
-       libcruft/fsqp/README.MISSING in the source distribution.", },
-#else
-    "fsqp_options (keyword, value)\n\n\
-       Set or show options for fsqp.  Keywords may be abbreviated\n\
-       to the shortest match.", },
-#endif
-
-  { "ftell", 2, 1, builtin_ftell,
-    "position = ftell (\"filename\" or filenum): returns the current file position", },
-
-  { "fwrite", 4, 1, builtin_fwrite,
-    "count = fwrite (filenum, Data, \"precision\")\n\n\
- Writes data to a file in binary form of size \"precision\"\n\n\
- filenum   : file number from fopen\n\
- Data      : matrix of elements to be written\n\
- precision : type of data to read, valid types are\n\n\
-               'char',   'schar', 'short',  'int',  'long', 'float'\n\
-               'double', 'uchar', 'ushort', 'uint', 'ulong'\n\n\
- count     : number of elements written", },
-
-  { "getenv", 2, 1, builtin_getenv,
-    "getenv (\"string\"): get environment variable values", },
-
-  { "givens", 3, 2, builtin_givens,
-    "G = givens (x, y): compute orthogonal matrix G = [c s; -conj (s) c]\n\
-      such that G [x; y] = [*; 0]  (x, y scalars)\n\n\
-      [c, s] = givens (x, y) returns the (c, s) values themselves.", },
+ extern Octave_object      Fpwd    (const Octave_object& args, int nargout) ; static builtin_function     Spwd   = {   "pwd"  ,     1  ,     0  ,   0 ,     Fpwd  ,    
+  "pwd (): print current working directory"   }; install_builtin_function (&    Spwd  );   
+ extern Octave_object      Ferror    (const Octave_object& args, int nargout) ; static builtin_function     Serror   = {   "error"  ,     2  ,     1  ,   0 ,     Ferror  ,    
+  "error (MESSAGE): print MESSAGE and set the error state.\nThis should eventually take us up to the top level, possibly\nprinting traceback messages as we go.\n\nIf MESSAGE ends in a newline character, traceback messages are not\nprinted."   }; install_builtin_function (&    Serror  );    
+ extern Octave_object      Ffclose    (const Octave_object& args, int nargout) ; static builtin_function     Sfclose   = {   "fclose"  ,     2  ,     1  ,   0 ,     Ffclose  ,    
+  "fclose (FILENAME or FILENUM): close a file"   }; install_builtin_function (&    Sfclose  );   
+ extern Octave_object      Ffflush    (const Octave_object& args, int nargout) ; static builtin_function     Sfflush   = {   "fflush"  ,     2  ,     1  ,   0 ,     Ffflush  ,    
+  "fflush (FILENAME or FILENUM): flush buffered data to output file"   }; install_builtin_function (&    Sfflush  );   
+ extern Octave_object      Ffgets    (const Octave_object& args, int nargout) ; static builtin_function     Sfgets   = {   "fgets"  ,     3  ,     2  ,   0 ,     Ffgets  ,    
+  "[STRING, LENGTH] = fgets (FILENAME or FILENUM, LENGTH)\n\nread a string from a file"   }; install_builtin_function (&    Sfgets  );   
+ extern Octave_object      Ffopen    (const Octave_object& args, int nargout) ; static builtin_function     Sfopen   = {   "fopen"  ,     3  ,     1  ,   0 ,     Ffopen  ,    
+  "FILENUM = fopen (FILENAME, MODE): open a file\n\n  Valid values for mode include:\n\n   r  : open text file for reading\n   w  : open text file for writing; discard previous contents if any\n   a  : append; open or create text file for writing at end of file\n   r+ : open text file for update (i.e., reading and writing)\n   w+ : create text file for update; discard previous contents if any\n   a+ : append; open or create text file for update, writing at end\n\n Update mode permits reading from and writing to the same file."   }; install_builtin_function (&    Sfopen  );   
+ extern Octave_object      Ffreport    (const Octave_object& args, int nargout) ; static builtin_function     Sfreport   = {   "freport"  ,     1  ,     1  ,   0 ,     Ffreport  ,    
+  "freport (): list open files and their status"   }; install_builtin_function (&    Sfreport  );   
+ extern Octave_object      Ffrewind    (const Octave_object& args, int nargout) ; static builtin_function     Sfrewind   = {   "frewind"  ,     2  ,     1  ,   0 ,     Ffrewind  ,    
+  "frewind (FILENAME or FILENUM): set file position at beginning of file"   }; install_builtin_function (&    Sfrewind  );   
+ extern Octave_object      Ffseek    (const Octave_object& args, int nargout) ; static builtin_function     Sfseek   = {   "fseek"  ,     4  ,     1  ,   0 ,     Ffseek  ,    
+  "fseek (FILENAME or FILENUM, OFFSET [, ORIGIN])\n\nset file position for reading or writing"   }; install_builtin_function (&    Sfseek  );   
+ extern Octave_object      Fftell    (const Octave_object& args, int nargout) ; static builtin_function     Sftell   = {   "ftell"  ,     2  ,     1  ,   0 ,     Fftell  ,    
+  "POSITION = ftell (FILENAME or FILENUM): returns the current file position"   }; install_builtin_function (&    Sftell  );   
+ extern Octave_object      Ffprintf    (const Octave_object& args, int nargout) ; static builtin_function     Sfprintf   = {   "fprintf"  ,     -1  ,     1  ,   0 ,     Ffprintf  ,    
+  "fprintf (FILENAME or FILENUM, FORMAT, ...)"   }; install_builtin_function (&    Sfprintf  );   
+ extern Octave_object      Fprintf    (const Octave_object& args, int nargout) ; static builtin_function     Sprintf   = {   "printf"  ,     -1  ,     1  ,   0 ,     Fprintf  ,    
+  "printf (FORMAT, ...)"   }; install_builtin_function (&    Sprintf  );   
+ extern Octave_object      Fsprintf    (const Octave_object& args, int nargout) ; static builtin_function     Ssprintf   = {   "sprintf"  ,     -1  ,     1  ,   0 ,     Fsprintf  ,    
+  "s = sprintf (FORMAT, ...)"   }; install_builtin_function (&    Ssprintf  );   
+ extern Octave_object      Ffscanf    (const Octave_object& args, int nargout) ; static builtin_function     Sfscanf   = {   "fscanf"  ,     3  ,     -1  ,   0 ,     Ffscanf  ,    
+  "[A, B, C, ...] = fscanf (FILENAME or FILENUM, FORMAT)"   }; install_builtin_function (&    Sfscanf  );   
+ extern Octave_object      Fscanf    (const Octave_object& args, int nargout) ; static builtin_function     Sscanf   = {   "scanf"  ,     2  ,     -1  ,   0 ,     Fscanf  ,    
+  "[A, B, C, ...] = scanf (FORMAT)"   }; install_builtin_function (&    Sscanf  );   
+ extern Octave_object      Fsscanf    (const Octave_object& args, int nargout) ; static builtin_function     Ssscanf   = {   "sscanf"  ,     3  ,     -1  ,   0 ,     Fsscanf  ,    
+  "[A, B, C, ...] = sscanf (STRING, FORMAT)"   }; install_builtin_function (&    Ssscanf  );   
+ extern Octave_object      Ffread    (const Octave_object& args, int nargout) ; static builtin_function     Sfread   = {   "fread"  ,     4  ,     2  ,   0 ,     Ffread  ,    
+  "[DATA, COUNT] = fread (FILENUM, SIZE, PRECISION)\n\n Reads data in binary form of type PRECISION from a file.\n\n FILENUM   : file number from fopen\n SIZE      : size specification for the Data matrix\n PRECISION : type of data to read, valid types are\n\n               'char',   'schar', 'short',  'int',  'long', 'float'\n               'double', 'uchar', 'ushort', 'uint', 'ulong'\n\n DATA      : matrix in which the data is stored\n COUNT     : number of elements read"   }; install_builtin_function (&    Sfread  );   
+ extern Octave_object      Ffwrite    (const Octave_object& args, int nargout) ; static builtin_function     Sfwrite   = {   "fwrite"  ,     4  ,     1  ,   0 ,     Ffwrite  ,    
+  "COUNT = fwrite (FILENUM, DATA, PRECISION)\n\n Writes data to a file in binary form of size PRECISION\n\n FILENUM   : file number from fopen\n DATA      : matrix of elements to be written\n PRECISION : type of data to read, valid types are\n\n               'char',   'schar', 'short',  'int',  'long', 'float'\n               'double', 'uchar', 'ushort', 'uint', 'ulong'\n\n COUNT     : number of elements written"   }; install_builtin_function (&    Sfwrite  );   
+ extern Octave_object      Ffeof    (const Octave_object& args, int nargout) ; static builtin_function     Sfeof   = {   "feof"  ,     2  ,     1  ,   0 ,     Ffeof  ,    
+  "ERROR = feof (FILENAME or FILENUM)\n\n Returns a non zero value for an end of file condition for the\n file specified by FILENAME or FILENUM from fopen"   }; install_builtin_function (&    Sfeof  );   
+ extern Octave_object      Fferror    (const Octave_object& args, int nargout) ; static builtin_function     Sferror   = {   "ferror"  ,     2  ,     1  ,   0 ,     Fferror  ,    
+  "ERROR = ferror (FILENAME or FILENUM)\n\n Returns a non zero value for an error condition on the\n file specified by FILENAME or FILENUM from fopen"   }; install_builtin_function (&    Sferror  );   
+ extern Octave_object      Fhelp    (const Octave_object& args, int nargout) ; static builtin_function     Shelp   = {   "help"  ,     -1  ,     1  ,   1 ,     Fhelp  ,    
+  "help [-i] [topic ...]\n\nprint cryptic yet witty messages"   }; install_builtin_function (&    Shelp  );   
+ extern Octave_object      Ftype    (const Octave_object& args, int nargout) ; static builtin_function     Stype   = {   "type"  ,     -1  ,     1  ,   1 ,     Ftype  ,    
+  "type NAME ...]\n\ndisplay the definition of each NAME that refers to a function"   }; install_builtin_function (&    Stype  );   
+ extern Octave_object      Fwhich    (const Octave_object& args, int nargout) ; static builtin_function     Swhich   = {   "which"  ,     -1  ,     1  ,   1 ,     Fwhich  ,    
+  "which NAME ...]\n\ndisplay the type of each NAME.  If NAME is defined from an function\nfile, print the full name of the file."   }; install_builtin_function (&    Swhich  );   
+ extern Octave_object      Finput    (const Octave_object& args, int nargout) ; static builtin_function     Sinput   = {   "input"  ,     3  ,     1  ,   0 ,     Finput  ,    
+  "input (PROMPT [, S])\n\nPrompt user for input.  If the second argument is present, return
+value as a string."   }; install_builtin_function (&    Sinput  );   
+ extern Octave_object      Fkeyboard    (const Octave_object& args, int nargout) ; static builtin_function     Skeyboard   = {   "keyboard"  ,     2  ,     1  ,   0 ,     Fkeyboard  ,    
+  "keyboard (PROMPT)\n\nmaybe help in debugging function files"   }; install_builtin_function (&    Skeyboard  );   
+ extern Octave_object      Fload    (const Octave_object& args, int nargout) ; static builtin_function     Sload   = {   "load"  ,     -1  ,     1  ,   1 ,     Fload  ,    
+  "load [-force] [-ascii] [-binary] [-mat-binary] file [pattern ...]\n
+\nload variables from a file"   }; install_builtin_function (&    Sload  );   
+ extern Octave_object      Fsave    (const Octave_object& args, int nargout) ; static builtin_function     Ssave   = {   "save"  ,     -1  ,     1  ,   1 ,     Fsave  ,    
+  "save [-ascii] [-binary] [-save-builtins] file [pattern ...]\n\nsave variables in a file"   }; install_builtin_function (&    Ssave  );   
+ extern Octave_object      Fcasesen    (const Octave_object& args, int nargout) ; static builtin_function     Scasesen   = {   "casesen"  ,     2  ,     1  ,   1 ,     Fcasesen  ,    
+  "casesen [on|off]"   }; install_builtin_function (&    Scasesen  );   
+ extern Octave_object      Fflops    (const Octave_object& args, int nargout) ; static builtin_function     Sflops   = {   "flops"  ,     2  ,     1  ,   0 ,     Fflops  ,    
+  "flops (): count floating point operations"   }; install_builtin_function (&    Sflops  );   
+ extern Octave_object      Fquit    (const Octave_object& args, int nargout) ; static builtin_function     Squit   = {   "quit"  ,     1  ,     0  ,   0 ,     Fquit  ,    
+  "quit (): exit Octave gracefully"   }; install_builtin_function (&    Squit  );   
+ alias_builtin ("exit", "quit");   ;
 
-  { "hess", 2, 2, builtin_hess,
-    "[P, H] = hess (A) or H = hess (A): Hessenberg decomposition", },
-
-  { "home", 1, 0, builtin_clc,
-    "home (): clear screen", },
-
-  { "input", 3, 1, builtin_input,
-    "input (\"prompt\" [, \"s\"]): prompt user for [string] input", },
-
-  { "ifft", 2, 1, builtin_ifft,
-    "ifft (X): inverse fast fourier transform of a vector", },
-
-  { "inv", 2, 1, builtin_inv,
-    "inv (X): inverse of a square matrix", },
-
-  { "inverse", 2, 1, builtin_inv,
-    "inverse (X): inverse of a square matrix", },
-
-  { "is_global", 2, 1, builtin_is_global,
-    "is_global (X): return 1 if the string X names a global variable", },
-
-  { "isstr", 2, 1, builtin_isstr,
-    "isstr (X): return 1 if X is a string", },
-
-  { "kbhit", 1, 1, builtin_kbhit,
-    "kbhit: get a single character from the terminal", },
-
-  { "keyboard", 2, 1, builtin_keyboard,
-    "keyboard (\"prompt\"): maybe help in debugging function files", },
-
-  { "logm", 2, 1, builtin_logm,
-    "logm (x): matrix logarithm", },
-
-  { "lp_solve", 11, 3, builtin_lpsolve,
-    "lp_solve (): solve linear programs using lp_solve.", },
-
-  { "lp_solve_options", -1, 1, builtin_lpsolve_options,
-    "lp_solve_options (keyword, value)\n\n\
-       Set or show options for lp_solve.  Keywords may be abbreviated\n\
-       to the shortest match.", },
-
-  { "lsode", 6, 1, builtin_lsode,
-    "lsode (\"function_name\", x0, t_out, t_crit)\n\
-\n\
-The first argument is the name of the function to call to\n\
-compute the vector of right hand sides.  It must have the form\n\
-\n\
-  xdot = f (x, t)\n\
-\n\
-where xdot and x are vectors and t is a scalar.\n", },
-
-  { "lsode_options", -1, 1, builtin_lsode_options,
-    "lsode_options (keyword, value)\n\n\
-       Set or show options for lsode.  Keywords may be abbreviated\n\
-       to the shortest match.", },
-
-  { "lu", 2, 3, builtin_lu,
-    "[L, U, P] = lu (A): LU factorization", },
-
-  { "max", 3, 2, builtin_max,
-    "max (x): maximum value(s) of a vector (matrix)", },
-
-  { "min", 3, 2, builtin_min,
-    "min (x): minimum value(s) of a vector (matrix)", },
-
-  { "npsol", 11, 3, builtin_npsol,
-#if defined (NPSOL_MISSING)
-    "This function requires NPSOL, which is not freely\n\
-       redistributable.  For more information, read the file\n\
-       libcruft/npsol/README.MISSING in the source distribution.", },
-#else
-    "[x, obj, info, lambda] = npsol (x, \"phi\" [, lb, ub] [, lb, A, ub] [, lb, \"g\", ub])\n\n\
-  Groups of arguments surrounded in `[]' are optional, but\n\
-  must appear in the same relative order shown above.\n\
-\n\
-  The second argument is a string containing the name of the objective\n\
-  function to call.  The objective function must be of the form\n\
-\n\
-    y = phi (x)\n\
-\n\
-  where x is a vector and y is a scalar.", },
-#endif
-
-  { "npsol_options", -1, 1, builtin_npsol_options,
-#if defined (NPSOL_MISSING)
-    "This function requires NPSOL, which is not freely\n\
-       redistributable.  For more information, read the file\n\
-       libcruft/npsol/README.MISSING in the source distribution.", },
-#else
-    "npsol_options (keyword, value)\n\n\
-       Set or show options for npsol.  Keywords may be abbreviated\n\
-       to the shortest match.", },
-#endif
-
-  { "ones", 3, 1, builtin_ones,
-    "ones (n), ones (n, m), ones (x): create a matrix of all ones", },
-
-  { "pause", 1, 1, builtin_pause,
-    "pause (seconds): suspend program execution", },
-
-  { "purge_tmp_files", 5, 1, builtin_purge_tmp_files,
-    "delete temporary data files used for plotting", },
-
-  { "printf", -1, 1, builtin_printf,
-    "printf (\"fmt\", ...)", },
-
-  { "prod", 2, 1, builtin_prod,
-    "prod (X): products", },
-
-  { "pwd", 1, 0, builtin_pwd,
-    "pwd (): print current working directory", },
-
-  { "qpsol", 9, 3, builtin_qpsol,
-#if defined (QPSOL_MISSING)
-    "This function requires QPSOL, which is not freely\n\
-       redistributable.  For more information, read the file\n\
-       libcruft/qpsol/README.MISSING in the source distribution.", },
-#else
-    "[x, obj, info, lambda] = qpsol (x, H, c [, lb, ub] [, lb, A, ub])\n\
-\n\
-  Groups of arguments surrounded in `[]' are optional, but\n\
-  must appear in the same relative order shown above.", },
-#endif
-
-  { "qpsol_options", -1, 1, builtin_qpsol_options,
-#if defined (QPSOL_MISSING)
-    "This function requires QPSOL, which is not freely\n\
-       redistributable.  For more information, read the file\n\
-       libcruft/qpsol/README.MISSING in the source distribution.", },
-#else
-    "qpsol_options (keyword, value)\n\n\
-       Set or show options for qpsol.  Keywords may be abbreviated\n\
-       to the shortest match.", },
-#endif
-
-  { "qr", 2, 2, builtin_qr,
-    "[q, r] = qr (X): form QR factorization of X", },
-
-  { "quad", 6, 3, builtin_quad,
-    "[v, ier, nfun] = quad (\"f\", a, b [, tol] [, sing])\n\
-\n\
-Where the first argument is the name of the  function to call to\n\
-compute the value of the integrand.  It must have the form\n\
-\n\
-  y = f (x)
-\n\
-where y and x are scalars.\n\
-\n\
-The second and third arguments are limits of integration.  Either or\n\
-both may be infinite.  The optional argument tol specifies the desired\n\
-accuracy of the result.  The optional argument sing is a vector of\n\
-at which the integrand is singular.\n", },
-
-  { "quad_options", -1, 1, builtin_quad_options,
-    "quad_options (keyword, value)\n\n\
-       Set or show options for quad.  Keywords may be abbreviated\n\
-       to the shortest match.", },
-
-  { "quit", 1, 0, builtin_quit,
-    "quit (): exit Octave gracefully", },
-
-  { "qzval", 3, 1, builtin_qzval,
-    "x = qzval (A,B): compute generalized eigenvalues of \n\
-  the matrix pencil (A - lambda B).  A and B must be real matrices.", },
-
-  { "rand", 2, 1, builtin_rand,
-    "rand                  -- generate a random value\n\
-       rand (n)              -- generate N x N matrix\n\
-       rand (A)              -- generate matrix the size of A\n\
-       rand (n, m)           -- generate N x M matrix\n\
-       rand (\"dist\")         -- get current distribution\n\
-       rand (\"distribution\") -- set distribution\n\
-       rand (\"seed\")         -- get current seed\n\
-       rand (\"seed\", n)      -- set seed", },
-
-  { "scanf", 2, -1, builtin_scanf,
-    "[a, b, c, ...] = scanf (\"fmt\")", },
-
-  { "setstr", 2, 1, builtin_setstr,
-    "setstr (v): convert a vector to a string", },
-
-  { "shell_cmd", 2, 1, builtin_shell_command,
-    "shell_cmd (string [, return_output]): execute shell commands", },
-
-  { "schur", 3, 2, builtin_schur,
-    "[U, S] = schur (A) or S = schur (A)\n\n\
- or, for ordered Schur:\n\n\
-       [U, S] = schur (A, \"A, D, or U\") or S = schur (A, \"A, D, or U\")\n\
- where:\n\n\
-   A = continuous time poles\n\
-   D = discrete time poles\n\
-   U = unordered schur (default)", },
-
+ extern Octave_object      Fwarranty    (const Octave_object& args, int nargout) ; static builtin_function     Swarranty   = {   "warranty"  ,     1  ,     0  ,   0 ,     Fwarranty  ,    
+  "warranty (): describe copying conditions"   }; install_builtin_function (&    Swarranty  );   
+ extern Octave_object      Ffeval    (const Octave_object& args, int nargout) ; static builtin_function     Sfeval   = {   "feval"  ,     -1  ,     1  ,   0 ,     Ffeval  ,    
+  "feval (NAME, ARGS, ...)\n\nevaluate NAME as a function, passing ARGS as its arguments"   }; install_builtin_function (&    Sfeval  );   
+ extern Octave_object      Feval    (const Octave_object& args, int nargout) ; static builtin_function     Seval   = {   "eval"  ,     2  ,     1  ,   0 ,     Feval  ,    
+  "eval (STRING): evaluate STRING as octave code"   }; install_builtin_function (&    Seval  );   
+ extern Octave_object      Fshell_cmd    (const Octave_object& args, int nargout) ; static builtin_function     Sshell_cmd   = {   "shell_cmd"  ,     2  ,     1  ,   0 ,     Fshell_cmd  ,    
+  "shell_cmd (string [, return_output]): execute shell commands"   }; install_builtin_function (&    Sshell_cmd  );   
+ extern Octave_object      Fedit_history    (const Octave_object& args, int nargout) ; static builtin_function     Sedit_history   = {   "edit_history"  ,     -1  ,     1  ,   1 ,     Fedit_history  ,    
+  "edit_history [first] [last]\n\nedit commands from the history list"   }; install_builtin_function (&    Sedit_history  );   
+ extern Octave_object      Fhistory    (const Octave_object& args, int nargout) ; static builtin_function     Shistory   = {   "history"  ,     -1  ,     1  ,   1 ,     Fhistory  ,    
+  "history [N] [-w file] [-r file] [-q]\n\ndisplay, save, or load command history"   }; install_builtin_function (&    Shistory  );   
+ extern Octave_object      Frun_history    (const Octave_object& args, int nargout) ; static builtin_function     Srun_history   = {   "run_history"  ,     -1  ,     1  ,   1 ,     Frun_history  ,    
+  "run_history [first] [last]\n\nrun commands from the history list"   }; install_builtin_function (&    Srun_history  );   
+ extern Octave_object      Fdiary    (const Octave_object& args, int nargout) ; static builtin_function     Sdiary   = {   "diary"  ,     -1  ,     1  ,   1 ,     Fdiary  ,    
+  "diary [on|off]\ndiary [file]\n\nredirect all input and screen output to a file."   }; install_builtin_function (&    Sdiary  );   
+ extern Octave_object      Fdisp    (const Octave_object& args, int nargout) ; static builtin_function     Sdisp   = {   "disp"  ,     3  ,     1  ,   0 ,     Fdisp  ,    
+  "disp (X): display value without name tag"   }; install_builtin_function (&    Sdisp  );   
+ extern Octave_object      Fformat    (const Octave_object& args, int nargout) ; static builtin_function     Sformat   = {   "format"  ,     -1  ,     1  ,   1 ,     Fformat  ,    
+  "format [style]\n\nset output formatting style"   }; install_builtin_function (&    Sformat  );   
+ extern Octave_object      Fclc    (const Octave_object& args, int nargout) ; static builtin_function     Sclc   = {   "clc"  ,     1  ,     0  ,   0 ,     Fclc  ,    
+  "clc (): clear screen"   }; install_builtin_function (&    Sclc  );   
+ alias_builtin ("home", "clc");   ;
 
-  { "size", 2, 1, builtin_size,
-    "[m, n] = size (x): return rows and columns of X", },
-
-  { "sort", 2, 2, builtin_sort,
-    "[s, i] = sort (x): sort the columns of x, optionally return sort index", },
-
-  { "sqrtm", 2, 1, builtin_sqrtm,
-    "sqrtm (x): matrix sqrt", },
-
-  { "sprintf", -1, 1, builtin_sprintf,
-    "s = sprintf (\"fmt\", ...)", },
-
-  { "sscanf", 3, -1, builtin_sscanf,
-    "[a, b, c, ...] = sscanf (string, \"fmt\")", },
-
-  { "sum", 2, 1, builtin_sum,
-    "sum (X): sum of elements", },
-
-  { "sumsq", 2, 1, builtin_sumsq,
-    "sumsq (X): sum of squares of elements", },
-
-  { "svd", 2, 3, builtin_svd,
-    "s = svd (x) or [u, s, v] = svd (x): return SVD of x", },
-
-  { "syl", 4, 1, builtin_syl,
-    "X = syl (A, B, C): solve the Sylvester equation A X + X B + C = 0", },
-
-  { "va_arg", 1, 1, builtin_va_arg,
-    "va_arg (): return next argument in function taking varible\n\
-number of parameters", },
-
-  { "va_start", 1, 0, builtin_va_start,
-    "va_start (): reset the pointer to the list of optional arguments\n\
-to the beginning", },
-
-  { "warranty", 1, 0, builtin_warranty,
-    "warranty (): describe copying conditions", },
-
-  { "zeros", 3, 1, builtin_zeros,
-    "zeros (n), zeros (n, m), zeros (x): create a matrix of all zeros", },
-
-  { NULL, -1, -1, NULL, NULL, },
-};
-
-// This is a lie.  Some of these get reassigned to be numeric
-// variables.  See below.
-
-static builtin_string_variables string_variables[] =
-{
-  { "EDITOR", "??", sv_editor,
-    "name of the editor to be invoked by the edit_history command", },
-
-  { "I", "??", NULL,
-    "sqrt (-1)", },
-
-  { "Inf", "??", NULL,
-    "infinity", },
-
-  { "INFO_FILE", "??", sv_info_file,
-    "name of the Octave info file", },
-
-  { "J", "??", NULL,
-    "sqrt (-1)", },
-
-#if defined (HAVE_ISNAN)
-  { "NaN", "??", NULL,
-    "not a number", },
-#endif
-
-  { "LOADPATH", "??", sv_loadpath,
-    "colon separated list of directories to search for scripts", },
-
-  { "PAGER", "??", sv_pager_binary,
-    "path to pager binary", },
-
-  { "PS1", "\\s:\\#> ", sv_ps1,
-    "primary prompt string", },
-
-  { "PS2", "> ", sv_ps2,
-    "secondary prompt string", },
-
-  { "PWD", "??PWD??", sv_pwd,
-    "current working directory", },
-
-  { "SEEK_SET", "??", NULL,
-    "used with fseek to position file relative to the beginning", },
-
-  { "SEEK_CUR", "??", NULL,
-    "used with fseek to position file relative to the current position", },
-
-  { "SEEK_END", "??", NULL,
-    "used with fseek to position file relative to the end", },
-
-  { "commas_in_literal_matrix", "", commas_in_literal_matrix,
-    "control auto-insertion of commas in literal matrices", },
-
-  { "do_fortran_indexing", "false", do_fortran_indexing,
-    "allow single indices for matrices", },
-
-  { "empty_list_elements_ok", "warn", empty_list_elements_ok,
-    "ignore the empty element in expressions like `a = [[], 1]'", },
-
-  { "eps", "??", NULL,
-    "machine precision", },
-
-  { "gnuplot_binary", "gnuplot", sv_gnuplot_binary,
-    "path to gnuplot binary", },
-
-  { "i", "??", NULL,
-    "sqrt (-1)", },
-
-  { "ignore_function_time_stamp", "system", ignore_function_time_stamp,
-    "don't check to see if function files have changed since they were\n\
-last compiled.  Possible values are \"system\" and \"all\"", },
-
-  { "implicit_str_to_num_ok", "false", implicit_str_to_num_ok,
-    "allow implicit string to number conversion", },
-
-  { "inf", "??", NULL,
-    "infinity", },
-
-  { "j", "??", NULL,
-    "sqrt (-1)", },
-
-#if defined (HAVE_ISNAN)
-  { "nan", "??", NULL,
-    "not a number", },
-#endif
-
-  { "ok_to_lose_imaginary_part", "warn", ok_to_lose_imaginary_part,
-    "silently convert from complex to real by dropping imaginary part", },
-
-  { "output_max_field_width", "??", set_output_max_field_width,
-    "maximum width of an output field for numeric output", },
-
-  { "output_precision", "??", set_output_precision,
-    "number of significant figures to display for numeric output", },
-
-  { "page_screen_output", "true", page_screen_output,
-    "if possible, send output intended for the screen through the pager", },
-
-  { "pi", "??", NULL,
-    "ratio of the circumference of a circle to its diameter", },
-
-  { "prefer_column_vectors", "true", prefer_column_vectors,
-    "prefer column/row vectors", },
-
-  { "prefer_zero_one_indexing", "false", prefer_zero_one_indexing,
-    "when there is a conflict, prefer zero-one style indexing", },
-
-  { "print_answer_id_name", "true", print_answer_id_name,
-    "set output style to print `var_name = ...'", },
-
-  { "print_empty_dimensions", "true", print_empty_dimensions,
-    "also print dimensions of empty matrices", },
-
-  { "propagate_empty_matrices", "true", propagate_empty_matrices,
-    "operations on empty matrices return an empty matrix, not an error", },
-
-  { "resize_on_range_error", "true", resize_on_range_error,
-    "enlarge matrices on assignment", },
-
-  { "return_last_computed_value", "false", return_last_computed_value,
-    "if a function does not return any values explicitly, return the\n\
-last computed value", },
-
-  { "save_precision", "??", set_save_precision,
-    "number of significant figures kept by the ASCII save command", },
-
-  { "silent_functions", "false", silent_functions,
-    "suppress printing results in called functions", },
-
-  { "split_long_rows", "true", split_long_rows,
-    "split long matrix rows instead of wrapping", },
-
-  { "stdin", "??", NULL,
-    "file number of the standard input stream", },
-
-  { "stdout", "??", NULL,
-    "file number of the standard output stream", },
-
-  { "stderr", "??", NULL,
-    "file number of the standard error stream", },
-
-  { "treat_neg_dim_as_zero", "false", treat_neg_dim_as_zero,
-    "convert negative dimensions to zero", },
-
-  { "warn_assign_as_truth_value", "true", warn_assign_as_truth_value,
-    "produce warning for assignments used as truth values", },
-
-  { "warn_comma_in_global_decl", "true", warn_comma_in_global_decl,
-    "produce warning for commas in global declarations", },
-
-  { "warn_divide_by_zero", "true", warn_divide_by_zero,
-    "on IEEE machines, allow divide by zero errors to be suppressed", },
-
-  { NULL, NULL, NULL, NULL, },
-};
+ extern Octave_object      Fgetenv    (const Octave_object& args, int nargout) ; static builtin_function     Sgetenv   = {   "getenv"  ,     2  ,     1  ,   0 ,     Fgetenv  ,    
+  "getenv (STRING): get environment variable values"   }; install_builtin_function (&    Sgetenv  );   
+ extern Octave_object      Fkbhit    (const Octave_object& args, int nargout) ; static builtin_function     Skbhit   = {   "kbhit"  ,     1  ,     1  ,   0 ,     Fkbhit  ,    
+  "kbhit: get a single character from the terminal"   }; install_builtin_function (&    Skbhit  );   
+ extern Octave_object      Fpause    (const Octave_object& args, int nargout) ; static builtin_function     Spause   = {   "pause"  ,     1  ,     1  ,   0 ,     Fpause  ,    
+  "pause (seconds): suspend program execution"   }; install_builtin_function (&    Spause  );   
+ extern Octave_object      Fclock    (const Octave_object& args, int nargout) ; static builtin_function     Sclock   = {   "clock"  ,     1  ,     0  ,   0 ,     Fclock  ,    
+  "clock (): return current date and time in vector with elements\n\n  [ year, month, day-of-month, hour, minute, second ]"   }; install_builtin_function (&    Sclock  );   
+ extern Octave_object      Fdate    (const Octave_object& args, int nargout) ; static builtin_function     Sdate   = {   "date"  ,     1  ,     0  ,   0 ,     Fdate  ,    
+  "date (): return current date in a string, in the form `18-Jul-94'"   }; install_builtin_function (&    Sdate  );   
+ extern Octave_object      Fva_arg    (const Octave_object& args, int nargout) ; static builtin_function     Sva_arg   = {   "va_arg"  ,     1  ,     1  ,   0 ,     Fva_arg  ,    
+  "va_arg (): return next argument in a function that takes a\nvariable number of parameters"   }; install_builtin_function (&    Sva_arg  );   
+ extern Octave_object      Fva_start    (const Octave_object& args, int nargout) ; static builtin_function     Sva_start   = {   "va_start"  ,     1  ,     0  ,   0 ,     Fva_start  ,    
+  "va_start (): reset the pointer to the list of optional arguments\nto the beginning"   }; install_builtin_function (&    Sva_start  );   
+ extern Octave_object      Fcloseplot    (const Octave_object& args, int nargout) ; static builtin_function     Scloseplot   = {   "closeplot"  ,     1  ,     0  ,   0 ,     Fcloseplot  ,    
+  "closeplot (): close the stream to plotter"   }; install_builtin_function (&    Scloseplot  );   
+ extern Octave_object      Fhold    (const Octave_object& args, int nargout) ; static builtin_function     Shold   = {   "hold"  ,     -1  ,     1  ,   1 ,     Fhold  ,    
+  "hold [on|off]\n\ndetermine whether the plot window is cleared before the next line is\ndrawn.  With no argument, toggle the current state."   }; install_builtin_function (&    Shold  );    
+ extern Octave_object      Fpurge_tmp_files    (const Octave_object& args, int nargout) ; static builtin_function     Spurge_tmp_files   = {   "purge_tmp_files"  ,     5  ,     1  ,   0 ,     Fpurge_tmp_files  ,    
+  "delete temporary data files used for plotting"   }; install_builtin_function (&    Spurge_tmp_files  );   
+ extern Octave_object      Fset    (const Octave_object& args, int nargout) ; static builtin_function     Sset   = {   "set"  ,     -1  ,     1  ,   1 ,     Fset  ,    
+  "set [options]\n\nset plotting options"   }; install_builtin_function (&    Sset  );   
+ extern Octave_object      Fshow    (const Octave_object& args, int nargout) ; static builtin_function     Sshow   = {   "show"  ,     -1  ,     1  ,   1 ,     Fshow  ,    
+  "show [options]\n\nshow plotting options"   }; install_builtin_function (&    Sshow  );   
+ extern Octave_object      Fis_global    (const Octave_object& args, int nargout) ; static builtin_function     Sis_global   = {   "is_global"  ,     2  ,     1  ,   0 ,     Fis_global  ,    
+  "is_global (X): return 1 if the string X names a global variable\notherwise, return 0."   }; install_builtin_function (&    Sis_global  );   
+ extern Octave_object      Fexist    (const Octave_object& args, int nargout) ; static builtin_function     Sexist   = {   "exist"  ,     2  ,     1  ,   0 ,     Fexist  ,    
+  "exist (NAME): check if variable or file exists\n\nreturn 0 if NAME is undefined, 1 if it is a variable, or 2 if it is\na function."   }; install_builtin_function (&    Sexist  );    
+ extern Octave_object      Fdocument    (const Octave_object& args, int nargout) ; static builtin_function     Sdocument   = {   "document"  ,     -1  ,     1  ,   1 ,     Fdocument  ,    
+  "document symbol string ...\n\nAssociate a cryptic message with a variable name."   }; install_builtin_function (&    Sdocument  );   
+ extern Octave_object      Fwho    (const Octave_object& args, int nargout) ; static builtin_function     Swho   = {   "who"  ,     -1  ,     1  ,   1 ,     Fwho  ,    
+  "who [-all] [-builtins] [-functions] [-long] [-variables]\n\nList currently defined symbol(s).  Options may be shortened to one\ncharacter, but may not be combined."   }; install_builtin_function (&    Swho  );   
+ extern Octave_object      Fwhos    (const Octave_object& args, int nargout) ; static builtin_function     Swhos   = {   "whos"  ,     -1  ,     1  ,   1 ,     Fwhos  ,    
+  "whos [-all] [-builtins] [-functions] [-long] [-variables]\n\nList currently defined symbol(s).  Options may be shortened to one\ncharacter, but may not be combined."   }; install_builtin_function (&    Swhos  );   
+ extern Octave_object      Fclear    (const Octave_object& args, int nargout) ; static builtin_function     Sclear   = {   "clear"  ,     -1  ,     1  ,   1 ,     Fclear  ,    
+  "clear [name ...]\n\nclear symbol(s) matching a list of globbing patterns\nif no arguments are given, clear all user-defined variables and functions"   }; install_builtin_function (&    Sclear  );   
+ extern Octave_object      Fbalance    (const Octave_object& args, int nargout) ; static builtin_function     Sbalance   = {   "balance"  ,     4  ,     4  ,   0 ,     Fbalance  ,    
+  "AA = balance (A [, OPT]) or [[DD,] AA] =  balance (A [, OPT])\n\ngeneralized eigenvalue problem:\n\n  [cc, dd, aa, bb] = balance (a, b [, opt])\n\nwhere OPT is an optional single character argument as follows: \n\n  N: no balancing; arguments copied, transformation(s) set to identity\n  P: permute argument(s) to isolate eigenvalues where possible\n  S: scale to improve accuracy of computed eigenvalues\n  B: (default) permute and scale, in that order.  Rows/columns\n     of a (and b) that are isolated by permutation are not scaled\n\n[DD, AA] = balance (A, OPT) returns aa = dd\a*dd,\n\n[CC, DD, AA, BB] = balance (A, B, OPT) returns AA (BB) = CC*A*DD (CC*B*DD)"   }; install_builtin_function (&    Sbalance  );   
+ extern Octave_object      Fchol    (const Octave_object& args, int nargout) ; static builtin_function     Schol   = {   "chol"  ,     2  ,     1  ,   0 ,     Fchol  ,    
+  "R = chol (X): cholesky factorization"   }; install_builtin_function (&    Schol  );   
+ extern Octave_object      Fcolloc    (const Octave_object& args, int nargout) ; static builtin_function     Scolloc   = {   "colloc"  ,     7  ,     4  ,   0 ,     Fcolloc  ,    
+  "[R, A, B, Q] = colloc (N [, \"left\"] [, \"right\"]): collocation weights"   }; install_builtin_function (&    Scolloc  );   
+ extern Octave_object      Fdassl    (const Octave_object& args, int nargout) ; static builtin_function     Sdassl   = {   "dassl"  ,     5  ,     1  ,   0 ,     Fdassl  ,    
+  "dassl (\"function_name\", x_0, xdot_0, t_out)\ndassl (F, X_0, XDOT_0, T_OUT, T_CRIT)\n\nThe first argument is the name of the function to call to\ncompute the vector of residuals.  It must have the form\n\n  res = f (x, xdot, t)\n\nwhere x, xdot, and res are vectors, and t is a scalar."   }; install_builtin_function (&    Sdassl  );   
+ extern Octave_object      Fdassl_options    (const Octave_object& args, int nargout) ; static builtin_function     Sdassl_options   = {   "dassl_options"  ,     -1  ,     1  ,   0 ,     Fdassl_options  ,    
+  "dassl_options (KEYWORD, VALUE)\n\nSet or show options for dassl.  Keywords may be abbreviated\nto the shortest match."   }; install_builtin_function (&    Sdassl_options  );   
+ extern Octave_object      Fdet    (const Octave_object& args, int nargout) ; static builtin_function     Sdet   = {   "det"  ,     2  ,     1  ,   0 ,     Fdet  ,    
+  "det (X): determinant of a square matrix"   }; install_builtin_function (&    Sdet  );   
+ extern Octave_object      Feig    (const Octave_object& args, int nargout) ; static builtin_function     Seig   = {   "eig"  ,     2  ,     1  ,   0 ,     Feig  ,    
+  "eig (X) or [V, D] = eig (X): compute eigenvalues and eigenvectors of X"   }; install_builtin_function (&    Seig  );   
+ extern Octave_object      Fexpm    (const Octave_object& args, int nargout) ; static builtin_function     Sexpm   = {   "expm"  ,     2  ,     1  ,   0 ,     Fexpm  ,    
+  "expm (X): matrix exponential, e^A"   }; install_builtin_function (&    Sexpm  );   
+ extern Octave_object      Ffft    (const Octave_object& args, int nargout) ; static builtin_function     Sfft   = {   "fft"  ,     2  ,     1  ,   0 ,     Ffft  ,    
+  "fft (X): fast fourier transform of a vector"   }; install_builtin_function (&    Sfft  );   
+ extern Octave_object      Ffind    (const Octave_object& args, int nargout) ; static builtin_function     Sfind   = {   "find"  ,     2  ,     3  ,   0 ,     Ffind  ,    
+  "find (X) or [I, J, V] = find (X): Return indices of nonzero elements"   }; install_builtin_function (&    Sfind  );   
+ extern Octave_object      Ffsolve    (const Octave_object& args, int nargout) ; static builtin_function     Sfsolve   = {   "fsolve"  ,     5  ,     1  ,   0 ,     Ffsolve  ,    
+  "Solve nonlinear equations using Minpack.  Usage:\n\n  [X, INFO] = fsolve (F, X0)\n\nWhere the first argument is the name of the  function to call to\ncompute the vector of function values.  It must have the form\n\n  y = f (x)
+\nwhere y and x are vectors."   }; install_builtin_function (&    Sfsolve  );   
+ extern Octave_object      Ffsolve_options    (const Octave_object& args, int nargout) ; static builtin_function     Sfsolve_options   = {   "fsolve_options"  ,     -1  ,     1  ,   0 ,     Ffsolve_options  ,    
+  "fsolve_options (KEYWORD, VALUE)\n\nSet or show options for fsolve.  Keywords may be abbreviated\nto the shortest match."   }; install_builtin_function (&    Sfsolve_options  );   
+ extern Octave_object      Ffsqp    (const Octave_object& args, int nargout) ; static builtin_function     Sfsqp   = {   "fsqp"  ,     11  ,     3  ,   0 ,     Ffsqp  ,    
+  "[X, PHI] = fsqp (X, PHI [, LB, UB] [, LB, A, UB] [, LB, G, UB])\n\nGroups of arguments surrounded in `[]' are optional, but\nmust appear in the same relative order shown above."   }; install_builtin_function (&    Sfsqp  );   
+ extern Octave_object      Ffsqp_options    (const Octave_object& args, int nargout) ; static builtin_function     Sfsqp_options   = {   "fsqp_options"  ,     -1  ,     1  ,   0 ,     Ffsqp_options  ,    
+  "fsqp_options (KEYWORD, VALUE)\n\nSet or show options for fsqp.  Keywords may be abbreviated\nto the shortest match."   }; install_builtin_function (&    Sfsqp_options  );   
+ extern Octave_object      Fgivens    (const Octave_object& args, int nargout) ; static builtin_function     Sgivens   = {   "givens"  ,     3  ,     2  ,   0 ,     Fgivens  ,    
+  "G = givens (X, Y)\n\ncompute orthogonal matrix G = [c s; -conj (s) c]\nsuch that G [x; y] = [*; 0]  (x, y scalars)\n\n[c, s] = givens (x, y) returns the (c, s) values themselves."   }; install_builtin_function (&    Sgivens  );   
+ extern Octave_object      Fhess    (const Octave_object& args, int nargout) ; static builtin_function     Shess   = {   "hess"  ,     2  ,     2  ,   0 ,     Fhess  ,    
+  "[P, H] = hess (A) or H = hess (A): Hessenberg decomposition"   }; install_builtin_function (&    Shess  );   
+ extern Octave_object      Fifft    (const Octave_object& args, int nargout) ; static builtin_function     Sifft   = {   "ifft"  ,    2  ,     1  ,   0 ,     Fifft  ,    
+  "ifft (X): inverse fast fourier transform of a vector"   }; install_builtin_function (&    Sifft  );   
+ extern Octave_object      Finv    (const Octave_object& args, int nargout) ; static builtin_function     Sinv   = {   "inv"  ,     2  ,     1  ,   0 ,     Finv  ,    
+  "inv (X): inverse of a square matrix"   }; install_builtin_function (&    Sinv  );   
+ extern Octave_object      Flogm    (const Octave_object& args, int nargout) ; static builtin_function     Slogm   = {   "logm"  ,     2  ,     1  ,   0 ,     Flogm  ,    
+  "logm (X): matrix logarithm"   }; install_builtin_function (&    Slogm  );   
+ extern Octave_object      Fsqrtm    (const Octave_object& args, int nargout) ; static builtin_function     Ssqrtm   = {   "sqrtm"  ,     2  ,     1  ,   0 ,     Fsqrtm  ,    
+ "sqrtm (X): matrix sqrt"   }; install_builtin_function (&    Ssqrtm  );   
+ extern Octave_object      Flpsolve    (const Octave_object& args, int nargout) ; static builtin_function     Slpsolve   = {   "lpsolve"  ,     11  ,     3  ,   0 ,     Flpsolve  ,    
+  "lp_solve (): solve linear programs using lp_solve."   }; install_builtin_function (&    Slpsolve  );   
+ extern Octave_object      Flpsolve_options    (const Octave_object& args, int nargout) ; static builtin_function     Slpsolve_options   = {   "lpsolve_options"  ,     -1  ,     1  ,   0 ,     Flpsolve_options  ,    
+  "lp_solve_options (KEYWORD, VALUE)\n\nSet or show options for lp_solve.  Keywords may be abbreviated\nto the shortest match."   }; install_builtin_function (&    Slpsolve_options  );   
+ extern Octave_object      Flsode    (const Octave_object& args, int nargout) ; static builtin_function     Slsode   = {   "lsode"  ,     6  ,     1  ,   0 ,     Flsode  ,    
+  "lsode (F, X0, T_OUT, T_CRIT)\n\nThe first argument is the name of the function to call to\ncompute the vector of right hand sides.  It must have the form\n\n  xdot = f (x, t)\n\nwhere xdot and x are vectors and t is a scalar.\n"   }; install_builtin_function (&    Slsode  );   
+ extern Octave_object      Flsode_options    (const Octave_object& args, int nargout) ; static builtin_function     Slsode_options   = {   "lsode_options"  ,     -1  ,     1  ,   0 ,     Flsode_options  ,    
+  "lsode_options (KEYWORD, VALUE)\n\nSet or show options for lsode.  Keywords may be abbreviated\nto the shortest match."   }; install_builtin_function (&    Slsode_options  );   
+ extern Octave_object      Flu    (const Octave_object& args, int nargout) ; static builtin_function     Slu   = {   "lu"  ,     2  ,     3  ,   0 ,     Flu  ,    
+  "[L, U, P] = lu (A): LU factorization"   }; install_builtin_function (&    Slu  );   
+ extern Octave_object      Fmin    (const Octave_object& args, int nargout) ; static builtin_function     Smin   = {   "min"  ,     3  ,     2  ,   0 ,     Fmin  ,    
+  "min (X): minimum value(s) of a vector (matrix)"   }; install_builtin_function (&    Smin  );   
+ extern Octave_object      Fmax    (const Octave_object& args, int nargout) ; static builtin_function     Smax   = {   "max"  ,     3  ,     2  ,   0 ,     Fmax  ,    
+  "max (X): maximum value(s) of a vector (matrix)"   }; install_builtin_function (&    Smax  );   
+ extern Octave_object      Fnpsol    (const Octave_object& args, int nargout) ; static builtin_function     Snpsol   = {   "npsol"  ,     11  ,     3  ,   0 ,     Fnpsol  ,    
+  "[X, OBJ, INFO, LAMBDA] = npsol (X, PHI [, LB, UB] [, LB, A, UB] [, LB, G, UB])\n\nGroups of arguments surrounded in `[]' are optional, but\nmust appear in the same relative order shown above.\n\nThe second argument is a string containing the name of the objective\nfunction to call.  The objective function must be of the form\n\n  y = phi (x)\n\nwhere x is a vector and y is a scalar.\n\nThe argument G is a string containing the name of the function that
+defines the nonlinear constraints.  It must be of the form\n\n  y = g (x)\n\nwhere x is a vector and y is a vector."   }; install_builtin_function (&    Snpsol  );   
+ extern Octave_object      Fnpsol_options    (const Octave_object& args, int nargout) ; static builtin_function     Snpsol_options   = {   "npsol_options"  ,     -1  ,     1  ,   0 ,     Fnpsol_options  ,    
+  "npsol_options (KEYWORD, VALUE)\n\nSet or show options for npsol.  Keywords may be abbreviated\nto the shortest match."   }; install_builtin_function (&    Snpsol_options  );   
+ extern Octave_object      Fqpsol    (const Octave_object& args, int nargout) ; static builtin_function     Sqpsol   = {   "qpsol"  ,     9  ,     3  ,   0 ,     Fqpsol  ,    
+  "[X, OBJ, INFO, LAMBDA] = qpsol (X, H, C [, LB, UB] [, LB, A, UB])\n\nGroups of arguments surrounded in `[]' are optional, but\nmust appear in the same relative order shown above."   }; install_builtin_function (&    Sqpsol  );   
+ extern Octave_object      Fqpsol_options    (const Octave_object& args, int nargout) ; static builtin_function     Sqpsol_options   = {   "qpsol_options"  ,     -1  ,     1  ,   0 ,     Fqpsol_options  ,    
+  "qpsol_options (KEYWORD, VALUE)\n
+\nSet or show options for qpsol.  Keywords may be abbreviated\nto the shortest match."   }; install_builtin_function (&    Sqpsol_options  );   
+ extern Octave_object      Fqr    (const Octave_object& args, int nargout) ; static builtin_function     Sqr   = {   "qr"  ,     2  ,     2  ,   0 ,     Fqr  ,    
+  "[Q, R] = qr (X):      form Q unitary and R upper triangular such\n                       that Q * R = X\n\n[Q, R] = qr (X, 0):    form the economy decomposition such that if X is\n                       if X is m by n then only the first n columns of Q\n                       are computed.\n\n[Q, R, P] = qr (X):    form QRP factorization of X where\n                       P is a permutation matrix such that\n                       A * P = Q * R\n\n[Q, R, P] = qr (X, 0): form the economy decomposition with \n                       permutation vector P such that Q * R = X (:, P)\n\nqr (X) alone returns the output of the LAPACK routine dgeqrf, such\nthat R = triu (qr (X))"   }; install_builtin_function (&    Sqr  );   
+ extern Octave_object      Fquad    (const Octave_object& args, int nargout) ; static builtin_function     Squad   = {   "quad"  ,     6  ,     3  ,   0 ,     Fquad  ,    
+  "[V, IER, NFUN] = quad (F, A, B [, TOL] [, SING])\n\nWhere the first argument is the name of the  function to call to\ncompute the value of the integrand.  It must have the form\n\n  y = f (x)
+\nwhere y and x are scalars.\n\nThe second and third arguments are limits of integration.  Either or\nboth may be infinite.  The optional argument TOL specifies the desired\naccuracy of the result.  The optional argument SING is a vector of\nat which the integrand is singular."   }; install_builtin_function (&    Squad  );   
+ extern Octave_object      Fquad_options    (const Octave_object& args, int nargout) ; static builtin_function     Squad_options   = {   "quad_options"  ,     -1  ,     1  ,   0 ,     Fquad_options  ,    
+  "quad_options (KEYWORD, VALUE)\n\nSet or show options for quad.  Keywords may be abbreviated\nto the shortest match."   }; install_builtin_function (&    Squad_options  );   
+ extern Octave_object      Fqzvalue    (const Octave_object& args, int nargout) ; static builtin_function     Sqzvalue   = {   "qzvalue"  ,     3  ,     1  ,   0 ,     Fqzvalue  ,    
+  "X = qzval (A, B)\n\ncompute generalized eigenvalues of the matrix pencil (A - lambda B).\nA and B must be real matrices."   }; install_builtin_function (&    Sqzvalue  );   
+ extern Octave_object      Frand    (const Octave_object& args, int nargout) ; static builtin_function     Srand   = {   "rand"  ,     2  ,     1  ,   0 ,     Frand  ,    
+  "rand                  -- generate a random value\n\nrand (N)              -- generate N x N matrix\nrand (A)              -- generate matrix the size of A\nrand (N, M)           -- generate N x M matrix\nrand (\"dist\")         -- get current distribution\nrand (DISTRIBUTION)   -- set distribution type (\"normal\" or \"uniform\"\nrand (SEED)           -- get current seed\nrand (SEED, N)        -- set seed"   }; install_builtin_function (&    Srand  );   
+ extern Octave_object      Fschur    (const Octave_object& args, int nargout) ; static builtin_function     Sschur   = {   "schur"  ,     3  ,     2  ,   0 ,     Fschur  ,    
+  "[U, S] = schur (A) or S = schur (A)\n\nor, for ordered Schur:\n\n  [U, S] = schur (A, TYPE) or S = schur (A, TYPE)\nwhere TYPE is a string that begins with one of the following\ncharacters:\n\n  A = continuous time poles\n  D = discrete time poles\n  U = unordered schur (default)"   }; install_builtin_function (&    Sschur  );   
+ extern Octave_object      Fsort    (const Octave_object& args, int nargout) ; static builtin_function     Ssort   = {   "sort"  ,     2  ,     2  ,   0 ,     Fsort  ,    
+  "[S, I] = sort (X)\n\nsort the columns of X, optionally return sort index"   }; install_builtin_function (&    Ssort  );   
+ extern Octave_object      Fsvd    (const Octave_object& args, int nargout) ; static builtin_function     Ssvd   = {   "svd"  ,     2  ,     3  ,   0 ,     Fsvd  ,    
+  "S = svd (X) or [U, S, V] = svd (X [, 0])\n\nCompute the singular value decomposition of X.  Given a second input\nargument, an `economy' sized factorization is computed that omits\nunnecessary rows and columns of U and V"   }; install_builtin_function (&    Ssvd  );   
+ extern Octave_object      Fsyl    (const Octave_object& args, int nargout) ; static builtin_function     Ssyl   = {   "syl"  ,     4  ,     1  ,   0 ,     Fsyl  ,    
+  "X = syl (A, B, C): solve the Sylvester equation A X + X B + C = 0"   }; install_builtin_function (&    Ssyl  );   
+}
 
 void
 install_builtins (void)
 {
-// So that the clear function can't delete other builtin variables and
-// functions, they are given eternal life.
-
-  builtin_mapper_functions *mfptr = mapper_functions;
-  while (mfptr->name != (char *) NULL)
-    {
-      install_builtin_mapper_function (mfptr);
-      mfptr++;
-    }
-
-  builtin_text_functions *tfptr = text_functions;
-  while (tfptr->name != (char *) NULL)
-    {
-      install_builtin_text_function (tfptr);
-      tfptr++;
-    }
-
-  builtin_general_functions *gfptr = general_functions;
-  while (gfptr->name != (char *) NULL)
-    {
-      install_builtin_general_function (gfptr);
-      gfptr++;
-    }
-
-// Most built-in variables are not protected because the user should
-// be able to redefine them.
-
-  builtin_string_variables *svptr = string_variables;
-  while (svptr->name != (char *) NULL)
-    {
-      install_builtin_variable (svptr);
-      svptr++;
-    }
-
-// IMPORTANT: Always create a new tree_constant for each variable.
-
-  tree_constant *tmp = NULL_TREE_CONST;
-  bind_builtin_variable ("ans", tmp);
-
-  Complex ctmp (0.0, 1.0);
-  tmp = new tree_constant (ctmp);
-  bind_builtin_variable ("I", tmp, 1, 1);
-
-  tmp = new tree_constant (ctmp);
-  bind_builtin_variable ("J", tmp, 1, 1);
-
-// Let i and j be functions so they can be redefined without being
-// wiped out.
-
-  tmp = new tree_constant (ctmp);
-  install_builtin_variable_as_function ("i", tmp, 1, 1);
-
-  tmp = new tree_constant (ctmp);
-  install_builtin_variable_as_function ("j", tmp, 1, 1);
-
-  tmp = new tree_constant (get_working_directory ("initialize_globals"));
-  bind_builtin_variable ("PWD", tmp, 1, 1);
-
-  tmp = new tree_constant (load_path);
-  bind_builtin_variable ("LOADPATH", tmp, 0, 1);
-
-  tmp = new tree_constant (info_file);
-  bind_builtin_variable ("INFO_FILE", tmp, 0, 1);
-
-  tmp = new tree_constant (editor);
-  bind_builtin_variable ("EDITOR", tmp, 0, 1);
-
-  tmp = new tree_constant (default_pager ());
-  bind_builtin_variable ("PAGER", tmp, 0, 1);
-
-  tmp = new tree_constant (0.0);
-  bind_builtin_variable ("SEEK_SET", tmp, 1, 1);
-
-  tmp = new tree_constant (1.0);
-  bind_builtin_variable ("SEEK_CUR", tmp, 1, 1);
-
-  tmp = new tree_constant (2.0);
-  bind_builtin_variable ("SEEK_END", tmp, 1, 1);
-
-  tmp = new tree_constant (DBL_EPSILON);
-  bind_builtin_variable ("eps", tmp, 1, 1);
-
-  tmp =  new tree_constant (10.0);
-  bind_builtin_variable ("output_max_field_width", tmp, 0, 1);
-
-  tmp =  new tree_constant (5.0);
-  bind_builtin_variable ("output_precision", tmp, 0, 1);
-
-  tmp =  new tree_constant (4.0 * atan (1.0));
-  bind_builtin_variable ("pi", tmp, 1, 1);
-
-  tmp =  new tree_constant (17.0);
-  bind_builtin_variable ("save_precision", tmp, 0, 1);
-
-  tmp =  new tree_constant (0.0);
-  bind_builtin_variable ("stdin", tmp, 1, 1);
-
-  tmp =  new tree_constant (1.0);
-  bind_builtin_variable ("stdout", tmp, 1, 1);
-
-  tmp =  new tree_constant (2.0);
-  bind_builtin_variable ("stderr", tmp, 1, 1);
-
-  tmp = new tree_constant (octave_Inf);
-  bind_builtin_variable ("Inf", tmp, 1, 1);
-
-  tmp = new tree_constant (octave_Inf);
-  bind_builtin_variable ("inf", tmp, 1, 1);
-
-  tmp = new tree_constant (octave_NaN);
-  bind_builtin_variable ("NaN", tmp, 1, 1);
-
-  tmp = new tree_constant (octave_NaN);
-  bind_builtin_variable ("nan", tmp, 1, 1);
-}
-
-int
-is_text_function_name (const char *s)
-{
-  int retval = 0;
-
-  builtin_text_functions *tfptr = text_functions;
-  while (tfptr->name != (char *) NULL)
-    {
-      if (strcmp (tfptr->name, s) == 0)
-	{
-	  retval = 1;
-	  break;
-	}
-      tfptr++;
-    }
-
-  return retval;
+  install_builtin_variables ();
+  install_mapper_functions ();
+  install_builtin_functions ();
 }
-
-help_list *
-builtin_mapper_functions_help (void)
-{
-  int count = 0;
-  builtin_mapper_functions *mfptr;
-
-  mfptr = mapper_functions;
-  while (mfptr->name != (char *) NULL)
-    {
-      count++;
-      mfptr++;
-    }
-
-  if (count == 0)
-    return (help_list *) NULL;
-
-  help_list *hl = new help_list [count+1];
-
-  int i = 0;
-  mfptr = mapper_functions;
-  while (mfptr->name != (char *) NULL)
-    {
-      hl[i].name = mfptr->name;
-      hl[i].help = mfptr->help_string;
-      i++;
-      mfptr++;
-    }
-
-  hl[count].name = (char *) NULL;
-  hl[count].help = (char *) NULL;
-
-  return hl;
-}
-
-help_list *
-builtin_general_functions_help (void)
-{
-  int count = 0;
-  builtin_general_functions *gfptr;
-
-  gfptr = general_functions;
-  while (gfptr->name != (char *) NULL)
-    {
-      count++;
-      gfptr++;
-    }
-
-  if (count == 0)
-    return (help_list *) NULL;
-
-  help_list *hl = new help_list [count+1];
-
-  int i = 0;
-  gfptr = general_functions;
-  while (gfptr->name != (char *) NULL)
-    {
-      hl[i].name = gfptr->name;
-      hl[i].help = gfptr->help_string;
-      i++;
-      gfptr++;
-    }
-
-  hl[count].name = (char *) NULL;
-  hl[count].help = (char *) NULL;
-
-  return hl;
-}
-
-help_list *
-builtin_text_functions_help (void)
-{
-  int count = 0;
-  builtin_text_functions *tfptr;
-
-  tfptr = text_functions;
-  while (tfptr->name != (char *) NULL)
-    {
-      count++;
-      tfptr++;
-    }
-
-  if (count == 0)
-    return (help_list *) NULL;
-
-  help_list *hl = new help_list [count+1];
-
-  int i = 0;
-  tfptr = text_functions;
-  while (tfptr->name != (char *) NULL)
-    {
-      hl[i].name = tfptr->name;
-      hl[i].help = tfptr->help_string;
-      i++;
-      tfptr++;
-    }
-
-  hl[count].name = (char *) NULL;
-  hl[count].help = (char *) NULL;
-
-  return hl;
-}
-
-help_list *
-builtin_variables_help (void)
-{
-  int count = 0;
-  builtin_string_variables *svptr;
-
-  svptr = string_variables;
-  while (svptr->name != (char *) NULL)
-    {
-      count++;
-      svptr++;
-    }
-
-  if (count == 0)
-    return (help_list *) NULL;
-
-  help_list *hl = new help_list [count+1];
-
-  int i = 0;
-  svptr = string_variables;
-  while (svptr->name != (char *) NULL)
-    {
-      hl[i].name = svptr->name;
-      hl[i].help = svptr->help_string;
-      i++;
-      svptr++;
-    }
-
-  hl[count].name = (char *) NULL;
-  hl[count].help = (char *) NULL;
-
-  return hl;
-}
-
-int
-help_from_list (ostrstream& output_buf, const help_list *list,
-		const char *string, int usage)
-{
-  char *name;
-  while ((name = list->name) != (char *) NULL)
-    {
-      if (strcmp (name, string) == 0)
-	{
-	  if (usage)
-	    output_buf << "\nusage: ";
-	  else
-	    {
-	      output_buf << "\n*** " << string << ":\n\n";
-	    }
-
-	  output_buf << list->help << "\n";
-
-	  return 1;
-	}
-      list++;
-    }
-  return 0;
-}
-
-void
-additional_help_message (ostrstream& output_buf)
-{
-  output_buf
-    << "\n"
-    << "Additional help for builtin functions, operators, and variables\n"
-    << "is available in the on-line version of the manual.\n"
-    << "\n"
-    << "Use the command `help -i <topic>' to search the manual index.\n";
-}
-
-void
-print_usage (const char *string, int just_usage = 0)
-{
-  ostrstream output_buf;
-
-  help_list *gf_help_list = builtin_general_functions_help ();
-  help_list *tf_help_list = builtin_text_functions_help ();
-  help_list *mf_help_list = builtin_mapper_functions_help ();
-
-  if (help_from_list (output_buf, gf_help_list, string, 1)
-      || help_from_list (output_buf, tf_help_list, string, 1)
-      || help_from_list (output_buf, mf_help_list, string, 1))
-    {
-      if (! just_usage)
-	additional_help_message (output_buf);
-      output_buf << ends;
-      maybe_page_output (output_buf);
-    }
-}
-
-/*
-;;; Local Variables: ***
-;;; mode: C++ ***
-;;; page-delimiter: "^/\\*" ***
-;;; End: ***
-*/
--- a/src/pt-const.h
+++ b/src/pt-const.h
@@ -126,6 +126,16 @@
   int valid_as_scalar_index (void) const
     { return rep->valid_as_scalar_index (); }
 
+// What type of constant am I?
+
+  int is_unknown (void) const { return rep->is_unknown (); }
+  int is_scalar (void) const { return rep->is_scalar (); }
+  int is_matrix (void) const { return rep->is_matrix (); }
+  int is_complex_scalar (void) const { return rep->is_complex_scalar (); }
+  int is_complex_matrix (void) const { return rep->is_complex_matrix (); }
+  int is_string (void) const { return rep->is_string (); }
+  int is_range (void) const { return rep->is_range (); }
+
   int is_defined (void) const { return rep->is_defined (); }
   int is_undefined (void) const { return rep->is_undefined (); }
 
@@ -187,11 +197,6 @@
       return *this;
     }
 
-  int save (ostream& os, int mark_as_global = 0, int precision = 17)
-    { return rep->save (os, mark_as_global, precision); }
-  int save_three_d (ostream& os, int parametric = 0)
-    { return rep->save_three_d (os, parametric); }
-
   double double_value (void) const { return rep->double_value (); }
   Matrix matrix_value (void) const { return rep->matrix_value (); }
   Complex complex_value (void) const { return rep->complex_value (); }
--- a/src/symtab.cc
+++ b/src/symtab.cc
@@ -37,6 +37,11 @@
 #include "tree-expr.h"
 #include "tree-const.h"
 
+extern "C"
+{
+#include "fnmatch.h"
+}
+
 /*
  * Variables and functions.
  */
@@ -194,12 +199,6 @@
 }
 
 int
-symbol_def::save (ostream& os, int mark_as_global, int precision)
-{
-  return definition->save (os, mark_as_global, precision);
-}
-
-int
 maybe_delete (symbol_def *def)
 {
   int count = 0;
@@ -521,30 +520,6 @@
 }
 
 int
-symbol_record::save (ostream& os, int mark_as_global, int precision)
-{
-  int status = -1;
-
-// This is a kludge, but hey, it doesn't make sense to save them
-// anyway, does it?  Even if it did, we would just have trouble trying
-// to read NaN and Inf on lots of systems anyway...
-//
-// Should we also save the help string?  Maybe someday.
-
-  if (is_read_only ())
-    warning ("save: sorry, can't save read-only variable `%s'", nm);
-  else if (is_function ())
-    warning ("save: sorry, can't save function `%s'", nm);
-  else if (is_defined ())
-    {
-      os << "# name: " << nm << "\n";
-      status = definition->save (os, mark_as_global, precision);
-    }
-
-  return status;
-}
-
-int
 symbol_record::clear (void)
 {
   int count = 0;
@@ -988,37 +963,6 @@
 }
 
 int
-symbol_table::save (ostream& os, int mark_as_global, int precision)
-{
-  int status = 0;
-  int count;
-  char **names = list (count, 1, symbol_def::USER_VARIABLE);
-  char **ptr = names;
-  if (ptr)
-    {
-      while (*ptr)
-	{
-	  if (save (os, *ptr, mark_as_global, precision))
-	    status++;
-	  delete [] *ptr++;
-	}
-      delete [] names;
-    }
-  return status;
-}
-
-int
-symbol_table::save (ostream& os, const char *name, int mark_as_global,
-		    int precision)
-{
-  int status = 0;
-  symbol_record *sr = lookup (name, 0, 0);
-  if (sr)
-    status = sr->save (os, mark_as_global, precision);
-  return status;
-}
-
-int
 symbol_table::size (void) const
 {
   int count = 0;
@@ -1099,10 +1043,14 @@
       while (ptr)
 	{
 	  assert (count < n);
+
 	  unsigned my_scope = ptr->is_linked_to_global () + 1; // Tricky...
+
 	  unsigned my_type = ptr->type ();
+
 	  if ((type & my_type) && (scope & my_scope))
 	    symbols[count++] = strsave (ptr->name ());
+
 	  ptr = ptr->next ();
 	}
     }
@@ -1115,6 +1063,41 @@
   return symbols;
 }
 
+symbol_record **
+symbol_table::glob (int& count, char *pat, unsigned type,
+		    unsigned scope) const
+{
+  count = 0;
+  int n = size ();
+  if (n == 0)
+    return 0;
+
+  symbol_record **symbols = new symbol_record * [n+1];
+  for (int i = 0; i < HASH_TABLE_SIZE; i++)
+    {
+      symbol_record *ptr = table[i].next ();
+      while (ptr)
+	{
+	  assert (count < n);
+
+	  unsigned my_scope = ptr->is_linked_to_global () + 1; // Tricky...
+
+	  unsigned my_type = ptr->type ();
+
+	  if ((type & my_type) && (scope & my_scope)
+	      && fnmatch (pat, ptr->name (), __FNM_FLAGS) == 0)
+	    {
+	      symbols[count++] = ptr;
+	    }
+
+	  ptr = ptr->next ();
+	}
+    }
+  symbols[count] = 0;
+
+  return symbols;
+}
+
 void
 symbol_table::push_context (void)
 {
--- a/src/symtab.h
+++ b/src/symtab.h
@@ -86,8 +86,6 @@
   char *help (void) const;
   void document (const char *h);
 
-  int save (ostream& os, int mark_as_global, int precision);
-
   enum TYPE
     {
       UNKNOWN = 0,
@@ -167,8 +165,6 @@
 
   void document (const char *h);
 
-  int save (ostream& os, int mark_as_global = 0, int precision = 17);
-
   int clear (void);
 
   void alias (symbol_record *s, int force = 0);
@@ -304,10 +300,6 @@
   void clear (int clear_user_functions = 1);
   int clear (const char *nm, int clear_user_functions = 1);
 
-  int save (ostream& os, int mark_as_global = 0, int precision = 17);
-  int save (ostream& os, const char *name, int mark_as_global = 0,
-	    int precicion = 17);
-
   int size (void) const;
 
   symbol_record_info *long_list (int& count, int sort = 0,
@@ -316,7 +308,11 @@
 
   char **list (int& count, int sort = 0,
 	       unsigned type = SYMTAB_ALL_TYPES,
-	       unsigned scope = SYMTAB_ALL_SCOPES) const;  
+	       unsigned scope = SYMTAB_ALL_SCOPES) const;
+
+  symbol_record **glob (int& count, char *pat = "*",
+			unsigned type = SYMTAB_ALL_TYPES,
+			unsigned scope = SYMTAB_ALL_SCOPES) const;
 
   void push_context (void);
   void pop_context (void);
--- a/src/tc-rep.h
+++ b/src/tc-rep.h
@@ -110,6 +110,32 @@
 
   int valid_as_scalar_index (void) const;
 
+// What type of constant am I?
+
+  int is_unknown (void) const
+    { return type_tag == tree_constant_rep::unknown_constant; }
+
+  int is_scalar (void) const
+    { return type_tag == tree_constant_rep::scalar_constant; }
+
+  int is_matrix (void) const
+    { return type_tag == tree_constant_rep::matrix_constant; }
+
+  int is_complex_scalar (void) const
+    { return type_tag == tree_constant_rep::complex_scalar_constant; }
+
+  int is_complex_matrix (void) const
+    { return type_tag == tree_constant_rep::complex_matrix_constant; }
+
+  int is_string (void) const
+    { return type_tag == tree_constant_rep::string_constant; }
+
+  int is_range (void) const
+    { return type_tag == tree_constant_rep::range_constant; }
+
+// Others tests, some more general, some just old names for the things
+// above.
+
   int is_defined (void) const
     { return type_tag != tree_constant_rep::unknown_constant; }
 
@@ -295,9 +321,6 @@
   tree_constant do_matrix_index (constant_type i, const Range& j) const;
   tree_constant do_matrix_index (constant_type i, constant_type j) const;
 
-  int save (ostream& os, int mark_as_global, int precision);
-  int save_three_d (ostream& os, int parametric);
-
   double double_value (void) const;
   Matrix matrix_value (void) const;
   Complex complex_value (void) const;
--- a/src/user-prefs.cc
+++ b/src/user-prefs.cc
@@ -501,6 +501,26 @@
 }
 
 int
+sv_default_save_format (void)
+{
+  int status = 0;
+
+  char *s = builtin_string_variable ("default_save_format");
+  if (s)
+    {
+      delete [] user_pref.default_save_format;
+      user_pref.default_save_format = s;
+    }
+  else
+    {
+      warning ("invalid value specified for default_save_format");
+      status = -1;
+    }
+
+  return status;
+}
+
+int
 sv_gnuplot_binary (void)
 {
   int status = 0;
--- a/src/user-prefs.h
+++ b/src/user-prefs.h
@@ -50,6 +50,7 @@
   int warn_comma_in_global_decl;
   int warn_divide_by_zero;
 
+  char *default_save_format;
   char *editor;
   char *gnuplot_binary;
   char *info_file;
@@ -87,6 +88,7 @@
 extern int set_output_precision (void);
 extern int set_save_precision (void);
 
+extern int sv_default_save_format (void);
 extern int sv_editor (void);
 extern int sv_gnuplot_binary (void);
 extern int sv_info_file (void);
--- a/src/variables.cc
+++ b/src/variables.cc
@@ -25,60 +25,52 @@
 #include "config.h"
 #endif
 
+#if 0
+#include <ctype.h>
+#include <iostream.h>
+
+#include "mappers.h"
+#endif
+
 #include <sys/types.h>
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
-#include <ctype.h>
 #include <float.h>
 #include <string.h>
-#include <fstream.h>
-#include <iostream.h>
 #include <strstream.h>
 
+#include "defaults.h"
+#include "version.h"
 #include "octave-hist.h"
 #include "unwind-prot.h"
+#include "variables.h"
 #include "user-prefs.h"
+#include "statdefs.h"
 #include "tree-base.h"
 #include "tree-expr.h"
 #include "tree-const.h"
-#include "variables.h"
-#include "statdefs.h"
-#include "defaults.h"
-#include "version.h"
-#include "mappers.h"
+#include "dirfns.h"
 #include "oct-obj.h"
 #include "sysdep.h"
-#include "dirfns.h"
 #include "symtab.h"
 #include "octave.h"
+#include "pager.h"
 #include "error.h"
-#include "pager.h"
+#include "defun.h"
 #include "utils.h"
-#include "defun.h"
+#include "parse.h"
 #include "input.h"
-#include "parse.h"
 #include "help.h"
 #include "lex.h"
 
 extern "C"
 {
 #include <readline/readline.h>
-#include <readline/tilde.h>
 
 #include "fnmatch.h"
 }
 
-#if SIZEOF_SHORT == 4
-#define FOUR_BYTE_TYPE short
-#elif SIZEOF_INT == 4
-#define FOUR_BYTE_TYPE int
-#elif SIZEOF_LONG == 4
-#define FOUR_BYTE_TYPE long
-#else
-LOSE! LOSE!
-#endif
-
 // Symbol table for symbols at the top level.
 symbol_table *top_level_sym_tab = 0;
 
@@ -127,28 +119,13 @@
 
 // Is this function globally in this scope?
 
-static int
+int
 is_globally_visible (const char *name)
 {
   symbol_record *sr = curr_sym_tab->lookup (name, 0, 0);
   return (sr && sr->is_linked_to_global ());
 }
 
-// Is this name a valid identifier?
-
-static int
-valid_identifier (char *s)
-{
-  if (! s || ! (isalnum (*s) || *s == '_'))
-     return 0;
-
-  while (*++s != '\0')
-    if (! (isalnum (*s) || *s == '_'))
-      return 0;
-
-  return 1;
-}
-
 // Is this tree_constant a valid function?
 
 tree_fvc *
@@ -832,865 +809,7 @@
     }
 }
 
-// Loading variables from files.
-
-// Extract a keyword and its value from a file.  Input should look
-// something like:
-//
-//  #[ \t]*keyword[ \t]*:[ \t]*string-value\n
-//
-// Returns a pointer to new storage.  The caller is responsible for
-// deleting it.
-
-static char *
-extract_keyword (istream& is, char *keyword)
-{
-  ostrstream buf;
-
-  char *retval = 0;
-
-  char c;
-  while (is.get (c))
-    {
-      if (c == '#')
-	{
-	  while (is.get (c) && (c == ' ' || c == '\t' || c == '#'))
-	    ; // Skip whitespace and comment characters.
-
-	  if (isalpha (c))
-	    buf << c;
-
-	  while (is.get (c) && isalpha (c))
-	    buf << c;
-
-	  buf << ends;
-	  char *tmp = buf.str ();
-	  int match = (strncmp (tmp, keyword, strlen (keyword)) == 0);
-	  delete [] tmp;
-
-	  if (match)
-	    {
-	      ostrstream value;
-	      while (is.get (c) && (c == ' ' || c == '\t' || c == ':'))
-		; // Skip whitespace and the colon.
-
-	      if (c != '\n')
-		{
-		  value << c;
-		  while (is.get (c) && c != '\n')
-		    value << c;
-		}
-	      value << ends;
-	      retval = value.str ();
-	      break;
-	    }
-	}
-    }
-  return retval;
-}
-
-static int
-extract_keyword (istream& is, char *keyword, int& value)
-{
-  ostrstream buf;
-
-  int status = 0;
-  value = 0;
-
-  char c;
-  while (is.get (c))
-    {
-      if (c == '#')
-	{
-	  while (is.get (c) && (c == ' ' || c == '\t' || c == '#'))
-	    ; // Skip whitespace and comment characters.
-
-	  if (isalpha (c))
-	    buf << c;
-
-	  while (is.get (c) && isalpha (c))
-	    buf << c;
-
-	  buf << ends;
-	  char *tmp = buf.str ();
-	  int match = (strncmp (tmp, keyword, strlen (keyword)) == 0);
-	  delete [] tmp;
-
-	  if (match)
-	    {
-	      while (is.get (c) && (c == ' ' || c == '\t' || c == ':'))
-		; // Skip whitespace and the colon.
-
-	      is.putback (c);
-	      if (c != '\n')
-		is >> value;
-	      if (is)
-		status = 1;
-	      while (is.get (c) && c != '\n')
-		; // Skip to beginning of next line;
-	      break;
-	    }
-	}
-    }
-  return status;
-}
-
-// Skip white space and comments.
-
-static void
-skip_comments (istream& is)
-{
-  char c = '\0';
-  while (is.get (c))
-    {
-      if (c == ' ' || c == '\t' || c == '\n')
-	; // Skip whitespace on way to beginning of next line.
-      else
-	break;
-    }
-
-  for (;;)
-    {
-      if (is && c == '#')
-	while (is.get (c) && c != '\n')
-	  ; // Skip to beginning of next line, ignoring everything.
-      else
-	break;
-    }
-}
-
-static tree_constant
-load_variable (istream& is, int& is_global)
-{
-  tree_constant retval;
-
-  is_global = 0;
-
-// Look for type keyword
-
-  char *tag = extract_keyword (is, "type");
-
-  if (tag && *tag)
-    {
-      char *ptr = strchr (tag, ' ');
-      if (ptr)
-	{
-	  *ptr = '\0';
-	  is_global = (strncmp (tag, "global", 6) == 0);
-	  *ptr = ' ';
-	  if (is_global)
-	    ptr++;
-	  else
-	    ptr = tag;
-	}
-      else
-	ptr = tag;
-
-      if (strncmp (ptr, "scalar", 6) == 0)
-	{
-	  double tmp;
-	  is >> tmp;
-	  if (is)
-	    retval = tmp;
-	  else
-	    error ("failed to load scalar constant");
-	}
-      else if (strncmp (ptr, "matrix", 6) == 0)
-	{
-	  int nr = 0, nc = 0;
-
-	  if (extract_keyword (is, "rows", nr) && nr > 0
-	      && extract_keyword (is, "columns", nc) && nc > 0)
-	    {
-	      Matrix tmp (nr, nc);
-	      is >> tmp;
-	      if (is)
-		retval = tmp;
-	      else
-		error ("failed to load matrix constant");
-	    }
-	  else
-	    error ("failed to extract number of rows and columns");
-	}
-      else if (strncmp (ptr, "complex scalar", 14) == 0)
-	{
-	  Complex tmp;
-	  is >> tmp;
-	  if (is)
-	    retval = tmp;
-	  else
-	    error ("failed to load complex scalar constant");
-	}
-      else if (strncmp (ptr, "complex matrix", 14) == 0)
-	{
-	  int nr = 0, nc = 0;
-
-	  if (extract_keyword (is, "rows", nr) && nr > 0
-	      && extract_keyword (is, "columns", nc) && nc > 0)
-	    {
-	      ComplexMatrix tmp (nr, nc);
-	      is >> tmp;
-	      if (is)
-		retval = tmp;
-	      else
-		error ("failed to load complex matrix constant");
-	    }
-	  else
-	    error ("failed to extract number of rows and columns");
-	}
-      else if (strncmp (ptr, "string", 6) == 0)
-	{
-	  int len;
-	  if (extract_keyword (is, "length", len) && len > 0)
-	    {
-	      char *tmp = new char [len+1];
-	      is.get (tmp, len+1, EOF);
-	      if (is)
-		retval = tmp;
-	      else
-		error ("failed to load string constant");
-	    }
-	  else
-	    error ("failed to extract string length");
-	}
-      else if (strncmp (ptr, "range", 5) == 0)
-	{
-	  skip_comments (is); // # base, limit, range comment added by save().
-	  Range tmp;
-	  is >> tmp;
-	  if (is)
-	    retval = tmp;
-	  else
-	    error ("failed to load range constant");
-	}
-      else
-	error ("unknown constant type `%s'", tag);
-    }
-  else
-    error ("failed to extract keyword specifying value type");
-
-  delete [] tag;
-
-  return retval;
-}
-
-static void
-install_loaded_variable (int force, char *nm, const tree_constant& tc,
-			 int global)
-{
-// Is there already a symbol by this name?  If so, what is it?
-
-  symbol_record *lsr = curr_sym_tab->lookup (nm, 0, 0);
-
-  int is_undefined = 1;
-  int is_variable = 0;
-  int is_function = 0;
-  int is_global = 0;
-
-  if (lsr)
-    {
-      is_undefined = ! lsr->is_defined ();
-      is_variable = lsr->is_variable ();
-      is_function = lsr->is_function ();
-      is_global = lsr->is_linked_to_global ();
-    }
-
-// Try to read data for this name.
-
-  if (tc.is_undefined ())
-    {
-      error ("load: unable to load variable `%s'", nm);
-      return;
-    }
-
-  symbol_record *sr = 0;
-
-  if (global)
-    {
-      if (is_global || is_undefined)
-	{
-	  if (force || is_undefined)
-	    {
-	      lsr = curr_sym_tab->lookup (nm, 1, 0);
-	      link_to_global_variable (lsr);
-	      sr = lsr;
-	    }
-	  else
-	    {
-	      warning ("load: global variable name `%s' exists.", nm);
-	      warning ("use `load -force' to overwrite");
-	    }
-	}
-      else if (is_function)
-	{
-	  if (force)
-	    {
-	      lsr = curr_sym_tab->lookup (nm, 1, 0);
-	      link_to_global_variable (lsr);
-	      sr = lsr;
-	    }
-	  else
-	    {
-	      warning ("load: `%s' is currently a function in this scope", nm);
-	      warning ("`load -force' will load variable and hide function");
-	    }
-	}
-      else if (is_variable)
-	{
-	  if (force)
-	    {
-	      lsr = curr_sym_tab->lookup (nm, 1, 0);
-	      link_to_global_variable (lsr);
-	      sr = lsr;
-	    }
-	  else
-	    {
-	      warning ("load: local variable name `%s' exists.", nm);
-	      warning ("use `load -force' to overwrite");
-	    }
-	}
-      else
-	panic_impossible ();
-    }
-  else
-    {
-      if (is_global)
-	{
-	  if (force || is_undefined)
-	    {
-	      lsr = curr_sym_tab->lookup (nm, 1, 0);
-	      link_to_global_variable (lsr);
-	      sr = lsr;
-	    }
-	  else
-	    {
-	      warning ("load: global variable name `%s' exists.", nm);
-	      warning ("use `load -force' to overwrite");
-	    }
-	}
-      else if (is_function)
-	{
-	  if (force)
-	    {
-	      lsr = curr_sym_tab->lookup (nm, 1, 0);
-	      link_to_global_variable (lsr);
-	      sr = lsr;
-	    }
-	  else
-	    {
-	      warning ("load: `%s' is currently a function in this scope", nm);
-	      warning ("`load -force' will load variable and hide function");
-	    }
-	}
-      else if (is_variable || is_undefined)
-	{
-	  if (force || is_undefined)
-	    {
-	      lsr = curr_sym_tab->lookup (nm, 1, 0);
-	      sr = lsr;
-	    }
-	  else
-	    {
-	      warning ("load: local variable name `%s' exists.", nm);
-	      warning ("use `load -force' to overwrite");
-	    }
-	}
-      else
-	panic_impossible ();
-    }
-
-  if (sr)
-    {
-      tree_constant *tmp_tc = new tree_constant (tc);
-      sr->define (tmp_tc);
-      return;
-    }
-  else
-    error ("load: unable to load variable `%s'", nm);
-
-  return;
-}
-
-// XXX FIXME XXX -- need to check stream states in more places.
-
-static char *
-read_ascii_data (istream& stream, const char *filename, int& global,
-		 tree_constant& tc)
-{
-// Read name for this entry or break on EOF.
-
-  char *nm = extract_keyword (stream, "name");
-
-  if (! nm)
-    return 0;
-
-  if (! *nm)
-    {
-      error ("load: empty name keyword found in file `%s'", filename);
-      delete [] nm;
-      return 0;
-    }
-      
-
-  if (! valid_identifier (nm))
-    {
-      error ("load: bogus identifier `%s' found in file `%s'", nm, filename);
-      delete [] nm;
-      return 0;
-    }
-
-  tc = load_variable (stream, global);
-
-  if (error_state)
-    {
-      error ("reading file %s", filename);
-      return 0;
-    }
-
-  return nm;
-}
-
-static void
-swap_2_bytes (char *t)
-{
-  char tmp = t[0];
-  t[0] = t[1];
-  t[1] = tmp;
-}
-
-static void
-swap_4_bytes (char *t)
-{
-  char tmp = t[0];
-  t[0] = t[3];
-  t[3] = tmp;
-
-  tmp = t[1];
-  t[1] = t[2];
-  t[2] = tmp;
-}
-
-static void
-swap_8_bytes (char *t)
-{
-  char tmp = t[0];
-  t[0] = t[7];
-  t[7] = tmp;
-
-  tmp = t[1];
-  t[1] = t[6];
-  t[6] = tmp;
-
-  tmp = t[2];
-  t[2] = t[5];
-  t[5] = tmp;
-
-  tmp = t[3];
-  t[3] = t[4];
-  t[4] = tmp;
-}
-
-static char *floating_point_format[] =
-{
-  "IEEE little endian",
-  "IEEE big endian",
-  "VAX D floating",
-  "VAX G floating",
-  "Cray",
-  0,
-};
-
-static char *
-read_binary_data (istream& stream, const char *filename, int& global,
-		  tree_constant& tc)
-{
-  global = 0;
-
-  FOUR_BYTE_TYPE mopt, nr, nc, imag, len;
-
-  int swap = 0;
-
-  stream.read (&mopt, 4);
-
-  if (mopt > 9999)
-    {
-      swap = 1;
-      swap_4_bytes ((char *) &mopt);
-    }
-
-  if (mopt > 9999)
-    {
-      error ("load: can't read binary file");
-      return 0;
-    }
-
-  stream.read (&nr, 4);
-  stream.read (&nc, 4);
-  stream.read (&imag, 4);
-  stream.read (&len, 4);
-
-  if (swap)
-    {
-      swap_4_bytes ((char *) &nr);
-      swap_4_bytes ((char *) &nc);
-      swap_4_bytes ((char *) &imag);
-      swap_4_bytes ((char *) &len);
-    }
-
-  int type = mopt % 10; // Full, sparse, etc.
-  mopt /= 10;           // Eliminate first digit.
-  int prec = mopt % 10; // double, float, int, etc.
-  mopt /= 100;          // Skip unused third digit too.
-  int mach = mopt % 10; // IEEE, VAX, etc.
-
-  if (mach < 0 || mach > 4)
-    {
-      error ("load: unrecognized binary format!");
-      return 0;
-    }
-
-#if defined (IEEE_LITTLE_ENDIAN)
-  if (mach != 0)
-    {
-      error ("load: can't convert from %s to %s yet",
-	     floating_point_format [mach], floating_point_format [0]);
-      return 0;
-    }
-#elif defined (IEEE_BIG_ENDIAN)
-  if (mach != 1)
-    {
-      error ("load: can't convert from %s to %s yet",
-	     floating_point_format [mach], floating_point_format [1]);
-      return 0;
-    }
-#elif defined (VAX_D_FLOAT)
-  if (mach != 2)
-    {
-      error ("load: can't convert from %s to %s yet",
-	     floating_point_format [mach], floating_point_format [2]);
-      return 0;
-    }
-#elif defined (VAX_G_FLOAT)
-  if (mach != 3)
-    {
-      error ("load: can't convert from %s to %s yet",
-	     floating_point_format [mach], floating_point_format [3]);
-      return 0;
-    }
-#else
-LOSE! LOSE!
-#endif
-
-  if (prec != 0)
-    {
-      error ("load: can only read binary files with data stored as doubles");
-      return 0;
-    }
-
-  if (type != 0 && type != 1)
-    {
-      error ("load: can't read sparse matrices");
-      return 0;
-    }
-
-  if (imag && type == 1)
-    {
-      error ("load: encountered complex matrix with string flag set!");
-      return 0;
-    }
-
-  char *name = new char [len];
-  stream.read (name, len);
-
-  int dlen = nr * nc;
-  if (dlen < 0)
-    {
-      error ("load: matrix with negative size!");
-      return 0;
-    }
-
-// This could probably be faster...
-
-// XXX FIXME XXX -- 8 is magic here!
-
-  Matrix re (nr, nc);
-  stream.read (re.fortran_vec (), dlen * 8);
-
-  if (imag)
-    {
-      Matrix im (nr, nc);
-      stream.read (im.fortran_vec (), dlen * 8);
-
-      ComplexMatrix ctmp (nr, nc);
-
-      for (int j = 0; j < nc; j++)
-	for (int i = 0; i < nr; i++)
-	  ctmp.elem (i, j) = Complex (re.elem (i, j), im.elem (i, j));
-
-      tc = ctmp;
-    }
-  else
-    tc = re;
-
-// If we were going to do it, this is probably where we would convert
-// the raw data to the proper floating point format.
-
-  if (type == 1)
-    tc = tc.convert_to_str ();
-
-  return name;
-}
-
-DEFUN_TEXT ("load", Fload, Sload, -1, 1,
-  "load [-force] [-binary] file\n
-\n\
-load variables from a file")
-{
-  Octave_object retval;
-
-  DEFINE_ARGV("load");
-
-  argc--;
-  argv++;
-
-  int force = 0;
-  int binary = 0;
-
-  while (argc > 0)
-    {
-      if (strcmp (*argv, "-force") == 0)
-	{
-	  force++;
-	  argc--;
-	  argv++;
-	}
-      else if (strcmp (*argv, "-binary") == 0)
-	{
-	  binary++;
-	  argc--;
-	  argv++;
-	}
-      else
-	break;
-    }
-
-  if (argc < 1)
-    {
-      error ("load: you must specify a single file to read");
-      DELETE_ARGV;
-      return retval;
-    }
-
-  static istream stream;
-  static ifstream file;
-  if (strcmp (*argv, "-") == 0)
-    {
-      stream = cin;
-    }
-  else
-    {
-      char *fname = tilde_expand (*argv);
-
-      unsigned mode = ios::in;
-      if (binary)
-	mode |= ios::bin;
-
-      file.open (fname, mode);
-
-      if (! file)
-	{
-	  error ("load: couldn't open input file `%s'", *argv);
-	  DELETE_ARGV;
-	  return retval;
-	}
-      stream = file;
-    }
-
-  int count = 0;
-  for (;;)
-    {
-      int global = 0;
-      tree_constant tc;
-
-      char *name = 0;
-      delete [] name;
-
-
-      if (binary)
-	name = read_binary_data (stream, *argv, global, tc);
-      else
-        name = read_ascii_data (stream, *argv, global, tc);
-
-      if (! error_state && name && tc.is_defined ())
-	{
-	  count++;
-	  install_loaded_variable (force, name, tc, global);
-	}
-      else
-	{
-	  if (count == 0)
-	    error ("load: are you sure `%s' is an Octave data file?", *argv);
-
-	  break;
-	}
-    }
-
-  if (file);
-    file.close ();
-
-  DELETE_ARGV;
-
-  return retval;
-}
-
-// Return nonzero if PATTERN has any special globbing chars in it.
-
-static int
-glob_pattern_p (char *pattern)
-{
-  char *p = pattern;
-  char c;
-  int open = 0;
-
-  while ((c = *p++) != '\0')
-    {
-      switch (c)
-	{
-	case '?':
-	case '*':
-	  return 1;
-
-	case '[':	// Only accept an open brace if there is a close
-	  open++;	// brace to match it.  Bracket expressions must be
-	  continue;	// complete, according to Posix.2
-
-	case ']':
-	  if (open)
-	    return 1;
-	  continue;
-	  
-	case '\\':
-	  if (*p++ == '\0')
-	    return 0;
-
-	default:
-	  continue;
-	}
-    }
-
-  return 0;
-}
-
-DEFUN_TEXT ("save", Fsave, Ssave, -1, 1,
-  "save file [var ...]\n\
-\n\
-save variables in a file")
-{
-  Octave_object retval;
-
-  DEFINE_ARGV("save");
-
-  if (argc < 2)
-    {
-      print_usage ("save");
-      DELETE_ARGV;
-      return retval;
-    }
-
-  argc--;
-  argv++;
-
-  static ostream stream;
-  static ofstream file;
-  if (strcmp (*argv, "-") == 0)
-    {
-// XXX FIXME XXX -- should things intended for the screen end up in a 
-// tree_constant (string)?
-      stream = cout;
-    }
-  else if (argc == 1 && glob_pattern_p (*argv)) // Guard against things
-    {						// like `save a*',
-      print_usage ("save");			// which are probably
-      DELETE_ARGV;				// mistakes...
-      return retval;
-    }
-  else
-    {
-      char *fname = tilde_expand (*argv);
-      file.open (fname);
-      if (! file)
-	{
-	  error ("save: couldn't open output file `%s'", *argv);
-	  DELETE_ARGV;
-	  return retval;
-	}
-      stream = file;
-
-    }
-
-  int prec = user_pref.save_precision;
-
-  if (argc == 1)
-    {
-      int count;
-      char **vars = curr_sym_tab->list (count, 0,
-					symbol_def::USER_VARIABLE,
-					SYMTAB_ALL_SCOPES);
-
-      for (int i = 0; i < count; i++)
-	curr_sym_tab->save (stream, vars[i],
-			    is_globally_visible (vars[i]), prec);
-
-      delete [] vars;
-    }
-  else
-    {
-      while (--argc > 0)
-	{
-	  argv++;
-
-	  int count;
-	  char **lvars = curr_sym_tab->list (count, 0,
-					     symbol_def::USER_VARIABLE);
-
-	  int saved_or_error = 0;
-	  int i;
-	  for (i = 0; i < count; i++)
-	    {
-	      if (fnmatch (*argv, lvars[i], __FNM_FLAGS) == 0
-		  && curr_sym_tab->save (stream, lvars[i],
-					 is_globally_visible (lvars[i]),
-					 prec) != 0)
-		saved_or_error++;
-	    }
-
-	  char **bvars = global_sym_tab->list (count, 0,
-					       symbol_def::BUILTIN_VARIABLE);
-
-	  for (i = 0; i < count; i++)
-	    {
-	      if (fnmatch (*argv, bvars[i], __FNM_FLAGS) == 0
-		  && global_sym_tab->save (stream, bvars[i], 0, prec) != 0)
-		saved_or_error++;
-	    }
-
-	  delete [] lvars;
-	  delete [] bvars;
-
-	  if (! saved_or_error)
-	    warning ("save: no such variable `%s'", *argv);
-	}
-    }
-
-  if (file);
-    file.close ();
-
-  DELETE_ARGV;
-
-  return retval;
-}
-
-// Help stuff.
+// Help stuff.  Shouldn't this go in help.cc?
 
 // It's not likely that this does the right thing now.  XXX FIXME XXX
 
@@ -1890,17 +1009,13 @@
 	  show_functions++;
 	  show_variables++;	  
 	}
-      else if (strcmp (*argv, "-builtins") == 0
-	       || strcmp (*argv, "-b") == 0)
+      else if (strcmp (*argv, "-builtins") == 0 || strcmp (*argv, "-b") == 0)
 	show_builtins++;
-      else if (strcmp (*argv, "-functions") == 0
-	       || strcmp (*argv, "-f") == 0)
+      else if (strcmp (*argv, "-functions") == 0 || strcmp (*argv, "-f") == 0)
 	show_functions++;
-      else if (strcmp (*argv, "-long") == 0 
-	       || strcmp (*argv, "-l") == 0)
-	  show_verbose++;
-      else if (strcmp (*argv, "-variables") == 0
-	       || strcmp (*argv, "-v") == 0)
+      else if (strcmp (*argv, "-long") == 0 || strcmp (*argv, "-l") == 0)
+	show_verbose++;
+      else if (strcmp (*argv, "-variables") == 0 || strcmp (*argv, "-v") == 0)
 	show_variables++;
       else
 	warning ("%s: unrecognized option `%s'", my_name, *argv);
@@ -2212,6 +1327,11 @@
 	  0, 0, 1, commas_in_literal_matrix,
     "control auto-insertion of commas in literal matrices");
 
+  DEFVAR ("default_save_format", SBV_default_save_format, "ascii",
+	  0, 0, 1, sv_default_save_format,
+    "default format for files created with save, may be either\n\
+\"binary\" or \"text\""); 
+
   DEFVAR ("do_fortran_indexing", SBV_do_fortran_indexing, "false", 0, 0,
 	  1, do_fortran_indexing,
     "allow single indices for matrices");