changeset 712:36ba0576bd1b

[project @ 1994-09-19 14:18:15 by jwe]
author jwe
date Mon, 19 Sep 1994 14:18:48 +0000
parents 5f15ab42a631
children 632844972d35
files src/balance.cc src/chol.cc src/colloc.cc src/dassl.cc src/data.cc src/defun-int.h src/det.cc src/eig.cc src/error.cc src/expm.cc src/fft.cc src/fft2.cc src/file-io.cc src/find.cc src/fsolve.cc src/givens.cc src/hess.cc src/ifft.cc src/ifft2.cc src/input.cc src/inv.cc src/log.cc src/lsode.cc src/lu.cc src/minmax.cc src/npsol.cc src/octave.cc src/pinv.cc src/pr-output.cc src/pt-exp-base.cc src/pt-misc.cc src/qpsol.cc src/qr.cc src/quad.cc src/qzval.cc src/rand.cc src/schur.cc src/sort.cc src/svd.cc src/syl.cc src/sysdep.cc src/tc-rep.cc src/utils.cc src/variables.cc
diffstat 44 files changed, 587 insertions(+), 561 deletions(-) [+]
line wrap: on
line diff
--- a/src/balance.cc	Sun Sep 18 23:34:35 1994 +0000
+++ b/src/balance.cc	Mon Sep 19 14:18:48 1994 +0000
@@ -66,7 +66,7 @@
 
   int nargin = args.length ();
 
-  if (nargin < 2 || nargin > 4 || nargout < 0 || nargout > 4)
+  if (nargin < 1 || nargin > 3 || nargout < 0 || nargout > 4)
     {
       print_usage ("balance");
       return retval;
@@ -81,15 +81,15 @@
   if (args(nargin-1).is_string ())
     {
       bal_job = args(nargin-1).string_value ();
-      my_nargin = nargin-2;
+      my_nargin = nargin-1;
     }
   else
     {
       bal_job = "B";
-      my_nargin = nargin-1;
+      my_nargin = nargin;
     }
 
-  tree_constant arg_a = args(1);
+  tree_constant arg_a = args(0);
 
   int a_nr = arg_a.rows ();
   int a_nc = arg_a.columns ();
@@ -157,7 +157,7 @@
 
 // 1st we have to check argument 2 dimensions and type...
 
-	tree_constant arg_b = args(2);
+	tree_constant arg_b = args(1);
 
 	int b_nr = arg_b.rows ();
 	int b_nc = arg_b.columns ();
--- a/src/chol.cc	Sun Sep 18 23:34:35 1994 +0000
+++ b/src/chol.cc	Mon Sep 19 14:18:48 1994 +0000
@@ -41,13 +41,15 @@
 {
   Octave_object retval;
 
-  if (args.length () != 2 || nargout > 1)
+  int nargin = args.length ();
+
+  if (nargin != 1 || nargout > 1)
     {
       print_usage ("chol");
       return retval;
     }
 
-  tree_constant arg = args(1);
+  tree_constant arg = args(0);
     
   int nr = arg.rows ();
   int nc = arg.columns ();
--- a/src/colloc.cc	Sun Sep 18 23:34:35 1994 +0000
+++ b/src/colloc.cc	Mon Sep 19 14:18:48 1994 +0000
@@ -40,19 +40,19 @@
 
   int nargin = args.length ();
 
-  if (nargin < 2 || nargin > 4)
+  if (nargin < 1 || nargin > 3)
     {
       print_usage ("colloc");
       return retval;
     }
 
-  if (! args(1).is_scalar_type ())
+  if (! args(0).is_scalar_type ())
     {
       error ("colloc: first argument must be a scalar");
       return retval;
     }
 
-  double tmp = args(1).double_value ();
+  double tmp = args(0).double_value ();
 
   if (error_state)
     return retval;
@@ -68,7 +68,7 @@
   int left = 0;
   int right = 0;
 
-  for (int i = 2; i < nargin; i++)
+  for (int i = 1; i < nargin; i++)
     {
       if (args(i).is_defined ())
 	{
--- a/src/dassl.cc	Sun Sep 18 23:34:35 1994 +0000
+++ b/src/dassl.cc	Mon Sep 19 14:18:48 1994 +0000
@@ -52,10 +52,8 @@
 
   assert (nstates == xdot.capacity ());
 
-//  tree_constant name (dassl_fcn->name ());
   Octave_object args;
-  args(3) = t;
-//  args(0) = name;
+  args(2) = t;
 
   if (nstates > 1)
     {
@@ -68,8 +66,8 @@
 	}
       tree_constant state (m1);
       tree_constant deriv (m2);
-      args(1) = state;
-      args(2) = deriv;
+      args(1) = deriv;
+      args(0) = state;
     }
   else
     {
@@ -77,8 +75,8 @@
       double d2 = xdot.elem (0);
       tree_constant state (d1);
       tree_constant deriv (d2);
-      args(1) = state;
-      args(2) = deriv;
+      args(1) = deriv;
+      args(0) = state;
     }
 
   if (dassl_fcn)
@@ -120,17 +118,17 @@
 
   int nargin = args.length ();
 
-  if (nargin < 5 || nargin > 6)
+  if (nargin < 4 || nargin > 5)
     {
       print_usage ("dassl");
       return retval;
     }
 
-  dassl_fcn = is_valid_function (args(1), "dassl", 1);
+  dassl_fcn = is_valid_function (args(0), "dassl", 1);
   if (! dassl_fcn || takes_correct_nargs (dassl_fcn, 4, "dassl", 1) != 1)
     return retval;
 
-  ColumnVector state = args(2).vector_value ();
+  ColumnVector state = args(1).vector_value ();
 
   if (error_state)
     {
@@ -138,7 +136,7 @@
       return retval;
     }
 
-  ColumnVector deriv = args(3).vector_value ();
+  ColumnVector deriv = args(2).vector_value ();
 
   if (error_state)
     {
@@ -146,7 +144,7 @@
       return retval;
     }
 
-  ColumnVector out_times = args(4).vector_value ();
+  ColumnVector out_times = args(3).vector_value ();
 
   if (error_state)
     {
@@ -156,9 +154,9 @@
 
   ColumnVector crit_times;
   int crit_times_set = 0;
-  if (nargin > 5)
+  if (nargin > 4)
     {
-      crit_times = args(5).vector_value ();
+      crit_times = args(4).vector_value ();
 
       if (error_state)
 	{
@@ -305,18 +303,18 @@
 
   int nargin = args.length ();
 
-  if (nargin == 1)
+  if (nargin == 0)
     {
       print_dassl_option_list ();
       return retval;
     }
-  else if (nargin == 3)
+  else if (nargin == 2)
     {
-      char *keyword = args(1).string_value ();
+      char *keyword = args(0).string_value ();
 
       if (! error_state)
 	{
-	  double val = args(2).double_value ();
+	  double val = args(1).double_value ();
 
 	  if (! error_state)
 	    {
--- a/src/data.cc	Sun Sep 18 23:34:35 1994 +0000
+++ b/src/data.cc	Mon Sep 19 14:18:48 1994 +0000
@@ -44,32 +44,32 @@
 #define MIN(a,b) ((a) < (b) ? (a) : (b))
 #endif
 
-DEFUN ("all", Fall, Sall, 2, 1,
+DEFUN ("all", Fall, Sall, 1, 1,
   "all (X): are all elements of X nonzero?")
 {
   Octave_object retval;
 
   int nargin = args.length ();
 
-  if (nargin != 2)
+  if (nargin == 1 && args(0).is_defined ())
+    retval = args(0).all ();
+  else
     print_usage ("all");
-  else if (nargin > 0 && args(1).is_defined ())
-    retval = args(1).all ();
 
   return retval;
 }
 
-DEFUN ("any", Fany, Sany, 2, 1,
+DEFUN ("any", Fany, Sany, 1, 1,
   "any (X): are any elements of X nonzero?")
 {
   Octave_object retval;
 
   int nargin = args.length ();
 
-  if (nargin != 2)
+  if (nargin == 1 && args(0).is_defined ())
+    retval = args(0).any ();
+  else
     print_usage ("any");
-  else if (nargin > 0 && args(1).is_defined ())
-    retval = args(1).any ();
 
   return retval;
 }
@@ -128,17 +128,17 @@
   return retval;
 }
 
-DEFUN ("atan2", Fatan2, Satan2, 3, 1,
+DEFUN ("atan2", Fatan2, Satan2, 2, 1,
   "atan2 (Y, X): atan (Y / X) in range -pi to pi")
 {
   Octave_object retval;
 
-  if (args.length () != 3)
-    print_usage ("atan2");
-  else
+  int nargin = args.length ();
+
+  if (nargin == 2 && args(0).is_defined () && args(1).is_defined ())
     {
-      tree_constant arg_y = args(1);
-      tree_constant arg_x = args(2);
+      tree_constant arg_y = args(0);
+      tree_constant arg_x = args(1);
 
       int y_nr = arg_y.rows ();
       int y_nc = arg_y.columns ();
@@ -212,169 +212,162 @@
       else
 	error ("atan2: nonconformant matrices");
     }
+  else
+    print_usage ("atan2");
 
   return retval;
 }
 
-DEFUN ("cumprod", Fcumprod, Scumprod, 2, 1,
+DEFUN ("cumprod", Fcumprod, Scumprod, 1, 1,
   "cumprod (X): cumulative products")
 {
   Octave_object retval;
 
   int nargin = args.length ();
 
-  if (nargin != 2)
+  if (nargin == 1 && args(0).is_defined ())
+    retval = args(0).cumprod ();
+  else
     print_usage ("cumprod");
-  else if (nargin > 0 && args(1).is_defined ())
-    retval = args(1).cumprod ();
 
   return retval;
 }
 
-DEFUN ("cumsum", Fcumsum, Scumsum, 2, 1,
+DEFUN ("cumsum", Fcumsum, Scumsum, 1, 1,
   "cumsum (X): cumulative sums")
 {
   Octave_object retval;
 
   int nargin = args.length ();
 
-  if (nargin != 2)
+  if (nargin == 1 && args(0).is_defined ())
+    retval = args(0).cumsum ();
+  else
     print_usage ("cumsum");
-  else if (nargin > 0 && args(1).is_defined ())
-    retval = args(1).cumsum ();
 
   return retval;
 }
 
-DEFUN ("diag", Fdiag, Sdiag, 3, 1,
+DEFUN ("diag", Fdiag, Sdiag, 2, 1,
   "diag (X [,k]): form/extract diagonals")
 {
   Octave_object retval;
 
   int nargin = args.length ();
 
-  if (nargin == 2)
-    retval = args(1).diag ();
-  else if (nargin == 3)
-    retval = args(1).diag (args(2));
+  if (nargin == 1 && args(0).is_defined ())
+    retval = args(0).diag ();
+  else if (nargin == 2 && args(0).is_defined () && args(1).is_defined ())
+    retval = args(0).diag (args(1));
   else
     print_usage ("diag");
 
   return retval;
 }
 
-DEFUN ("isstr", Fisstr, Sisstr, 2, 1,
+DEFUN ("isstr", Fisstr, Sisstr, 1, 1,
   "isstr (X): return 1 if X is a string, 0 otherwise")
 {
   Octave_object retval;
 
   int nargin = args.length ();
 
-  if (nargin != 2)
-    print_usage ("isstr");
+  if (nargin == 1 && args(0).is_defined ())
+    retval = (double) args(0).is_string ();
   else
-    {
-      if (nargin > 0 && args(1).is_defined ())
-	retval = (double) args(1).is_string ();
-    }
+    print_usage ("isstr");
 
   return retval;
 }
 
-DEFUN ("prod", Fprod, Sprod, 2, 1,
+DEFUN ("prod", Fprod, Sprod, 1, 1,
   "prod (X): products")
 {
   Octave_object retval;
 
   int nargin = args.length ();
 
-  if (nargin != 2)
+  if (nargin == 1 && args(0).is_defined ())
+    retval = args(0).prod ();
+  else
     print_usage ("prod");
-  else if (nargin > 0 && args(1).is_defined ())
-    retval = args(1).prod ();
 
   return retval;
 }
 
-DEFUN ("setstr", Fsetstr, Ssetstr, 2, 1,
+DEFUN ("setstr", Fsetstr, Ssetstr, 1, 1,
   "setstr (V): convert a vector to a string")
 {
   Octave_object retval;
 
   int nargin = args.length ();
 
-  if (nargin == 2)
-    retval = args(1).convert_to_str ();
+  if (nargin == 1 && args(0).is_defined ())
+    retval = args(0).convert_to_str ();
   else
     print_usage ("setstr");
 
   return retval;
 }
 
-DEFUN ("size", Fsize, Ssize, 2, 1,
+DEFUN ("size", Fsize, Ssize, 1, 1,
   "[m, n] = size (x): return rows and columns of X")
 {
   Octave_object retval;
 
   int nargin = args.length ();
 
-  if (nargin != 2)
-    print_usage ("size");
-  else
+  if (nargin == 1 && args(0).is_defined ())
     {
-      if (nargin > 0 && args(1).is_defined ())
+      int nr = args(0).rows ();
+      int nc = args(0).columns ();
+      if (nargout == 0 || nargout == 1)
 	{
-	  int nr = args(1).rows ();
-	  int nc = args(1).columns ();
-	  if (nargout == 0 || nargout == 1)
-	    {
-	      Matrix m (1, 2);
-	      m.elem (0, 0) = nr;
-	      m.elem (0, 1) = nc;
-	      retval = m;
-	    }
-	  else if (nargout == 2)
-	    {
-	      retval(1) = (double) nc;
-	      retval(0) = (double) nr;
-	    }
-	  else
-	    print_usage ("size");
+	  Matrix m (1, 2);
+	  m.elem (0, 0) = nr;
+	  m.elem (0, 1) = nc;
+	  retval = m;
 	}
+      else if (nargout == 2)
+	{
+	  retval(1) = (double) nc;
+	  retval(0) = (double) nr;
+	}
+      else
+	print_usage ("size");
     }
+  else
+    print_usage ("size");
 
   return retval;
 }
 
-DEFUN ("sum", Fsum, Ssum, 2, 1,
+DEFUN ("sum", Fsum, Ssum, 1, 1,
   "sum (X): sum of elements")
 {
   Octave_object retval;
 
   int nargin = args.length ();
 
-  if (nargin != 2)
-    print_usage ("sum");
+  if (nargin == 1 && args(0).is_defined ())
+    retval = args(0).sum ();
   else
-    {
-      if (nargin > 0 && args(1).is_defined ())
-	retval = args(1).sum ();
-    }
+    print_usage ("sum");
 
   return retval;
 }
 
-DEFUN ("sumsq", Fsumsq, Ssumsq, 2, 1,
+DEFUN ("sumsq", Fsumsq, Ssumsq, 1, 1,
   "sumsq (X): sum of squares of elements")
 {
   Octave_object retval;
 
   int nargin = args.length ();
 
-  if (nargin != 2)
+  if (nargin == 1 && args(0).is_defined ())
+    retval = args(0).sumsq ();
+  else
     print_usage ("sumsq");
-  else if (nargin > 0 && args(1).is_defined ())
-    retval = args(1).sumsq ();
 
   return retval;
 }
@@ -468,7 +461,7 @@
   return m;
 }
 
-DEFUN ("ones", Fones, Sones, 3, 1,
+DEFUN ("ones", Fones, Sones, 2, 1,
   "ones (N), ones (N, M), ones (X): create a matrix of all ones")
 {
   Octave_object retval;
@@ -477,14 +470,14 @@
 
   switch (nargin)
     {
+    case 0:
+      retval = 1.0;
+      break;
     case 1:
-      retval = 1.0;
+      retval = fill_matrix (args(0), 1.0, "ones");
       break;
     case 2:
-      retval = fill_matrix (args(1), 1.0, "ones");
-      break;
-    case 3:
-      retval = fill_matrix (args(1), args(2), 1.0, "ones");
+      retval = fill_matrix (args(0), args(1), 1.0, "ones");
       break;
     default:
       print_usage ("ones");
@@ -494,7 +487,7 @@
   return retval;
 }
 
-DEFUN ("zeros", Fzeros, Szeros, 3, 1,
+DEFUN ("zeros", Fzeros, Szeros, 2, 1,
   "zeros (N), zeros (N, M), zeros (X): create a matrix of all zeros")
 {
   Octave_object retval;
@@ -503,14 +496,14 @@
 
   switch (nargin)
     {
+    case 0:
+      retval = 0.0;
+      break;
     case 1:
-      retval = 0.0;
+      retval = fill_matrix (args(0), 0.0, "zeros");
       break;
     case 2:
-      retval = fill_matrix (args(1), 0.0, "zeros");
-      break;
-    case 3:
-      retval = fill_matrix (args(1), args(2), 0.0, "zeros");
+      retval = fill_matrix (args(0), args(1), 0.0, "zeros");
       break;
     default:
       print_usage ("zeros");
@@ -562,7 +555,7 @@
   return m;
 }
 
-DEFUN ("eye", Feye, Seye, 3, 1,
+DEFUN ("eye", Feye, Seye, 2, 1,
   "eye (N), eye (N, M), eye (X): create an identity matrix")
 {
   Octave_object retval;
@@ -571,14 +564,14 @@
 
   switch (nargin)
     {
+    case 0:
+      retval = 1.0;
+      break;
     case 1:
-      retval = 1.0;
+      retval = identity_matrix (args(0));
       break;
     case 2:
-      retval = identity_matrix (args(1));
-      break;
-    case 3:
-      retval = identity_matrix (args(1), args(2));
+      retval = identity_matrix (args(0), args(1));
       break;
     default:
       print_usage ("eye");
--- a/src/defun-int.h	Sun Sep 18 23:34:35 1994 +0000
+++ b/src/defun-int.h	Mon Sep 19 14:18:48 1994 +0000
@@ -92,7 +92,7 @@
 // use them?
 
 #define DEFINE_ARGV(fcn_name) \
-  int argc = args.length (); \
+  int argc = args.length () + 1; \
   int save_argc = argc; \
   char **argv = make_argv (args, fcn_name); \
   char **save_argv = argv; \
--- a/src/det.cc	Sun Sep 18 23:34:35 1994 +0000
+++ b/src/det.cc	Mon Sep 19 14:18:48 1994 +0000
@@ -43,13 +43,13 @@
 
   int nargin = args.length ();
 
-  if (nargin != 2)
+  if (nargin != 1)
     {
       print_usage ("det");
       return retval;
     }
 
-  tree_constant arg = args(1);
+  tree_constant arg = args(0);
     
   int nr = arg.rows ();
   int nc = arg.columns ();
--- a/src/eig.cc	Sun Sep 18 23:34:35 1994 +0000
+++ b/src/eig.cc	Mon Sep 19 14:18:48 1994 +0000
@@ -40,13 +40,15 @@
 {
   Octave_object retval;
 
-  if (args.length () != 2 || nargout > 2)
+  int nargin = args.length ();
+
+  if (nargin != 1 || nargout > 2)
     {
       print_usage ("eig");
       return retval;
     }
 
-  tree_constant arg = args(1);
+  tree_constant arg = args(0);
 
   int nr = arg.rows ();
   int nc = arg.columns ();
--- a/src/error.cc	Sun Sep 18 23:34:35 1994 +0000
+++ b/src/error.cc	Mon Sep 19 14:18:48 1994 +0000
@@ -134,7 +134,7 @@
   abort ();
 }
 
-DEFUN ("error", Ferror, Serror, 2, 1,
+DEFUN ("error", Ferror, Serror, 1, 1,
   "error (MESSAGE): print MESSAGE and set the error state.\n\
 This should eventually take us up to the top level, possibly\n\
 printing traceback messages as we go.\n\
@@ -148,11 +148,11 @@
 
   int nargin = args.length ();
 
-  if (nargin == 2 && args(1).is_defined ())
+  if (nargin == 1 && args(0).is_defined ())
     {
-      if (args(1).is_string ())
+      if (args(0).is_string ())
 	{
-	  msg = args(1).string_value ();
+	  msg = args(0).string_value ();
 
 	  if (! msg || ! *msg)
 	    return retval;
--- a/src/expm.cc	Sun Sep 18 23:34:35 1994 +0000
+++ b/src/expm.cc	Mon Sep 19 14:18:48 1994 +0000
@@ -60,13 +60,13 @@
 
   int nargin = args.length ();
 
-  if (nargin != 2)
+  if (nargin != 1)
     {
       print_usage ("expm");
       return retval;
     }
 
-  tree_constant arg = args(1);
+  tree_constant arg = args(0);
 
 // Constants for matrix exponential calculation.
 
--- a/src/fft.cc	Sun Sep 18 23:34:35 1994 +0000
+++ b/src/fft.cc	Mon Sep 19 14:18:48 1994 +0000
@@ -45,17 +45,17 @@
 
   int nargin = args.length ();
 
-  if (nargin < 2 || nargin > 3)
+  if (nargin < 1 || nargin > 2)
     {
       print_usage ("fft");
       return retval;
     }
 
-  tree_constant arg = args(1);
+  tree_constant arg = args(0);
 
   int n_points = arg.rows ();
-  if (nargin == 3)
-    n_points = NINT (args(2).double_value ());
+  if (nargin == 2)
+    n_points = NINT (args(1).double_value ());
 
   if (error_state)
     return retval;
--- a/src/fft2.cc	Sun Sep 18 23:34:35 1994 +0000
+++ b/src/fft2.cc	Mon Sep 19 14:18:48 1994 +0000
@@ -47,24 +47,24 @@
 
   int nargin = args.length ();
 
-  if (nargin < 2 || nargin > 4)
+  if (nargin < 1 || nargin > 3)
     {
       print_usage ("fft2");
       return retval;
     }
 
-  tree_constant arg = args(1);
+  tree_constant arg = args(0);
 
   int n_rows = arg.rows ();
-  if (nargin > 2)
-    n_rows = NINT (args(2).double_value ());
+  if (nargin > 1)
+    n_rows = NINT (args(1).double_value ());
 
   if (error_state)
     return retval;
 
   int n_cols = arg.columns ();
-  if (nargin > 3)
-    n_cols = NINT (args(3).double_value ());
+  if (nargin > 2)
+    n_cols = NINT (args(2).double_value ());
 
   if (error_state)
     return retval;
--- a/src/file-io.cc	Sun Sep 18 23:34:35 1994 +0000
+++ b/src/file-io.cc	Mon Sep 19 14:18:48 1994 +0000
@@ -280,14 +280,14 @@
   return p;
 }
 
-DEFUN ("fclose", Ffclose, Sfclose, 2, 1,
+DEFUN ("fclose", Ffclose, Sfclose, 1, 1,
   "fclose (FILENAME or FILENUM): close a file")
 {
   Octave_object retval;
 
   int nargin = args.length ();
 
-  if (nargin != 2)
+  if (nargin != 1)
     print_usage ("fclose");
   else
     retval = fclose_internal (args);
@@ -300,7 +300,7 @@
 {
   Octave_object retval;
 
-  Pix p = return_valid_file (args(1));
+  Pix p = return_valid_file (args(0));
 
   if (! p)
     return retval;
@@ -328,14 +328,14 @@
   return retval;
 }
 
-DEFUN ("fflush", Ffflush, Sfflush, 2, 1,
+DEFUN ("fflush", Ffflush, Sfflush, 1, 1,
   "fflush (FILENAME or FILENUM): flush buffered data to output file")
 {
   Octave_object retval;
 
   int nargin = args.length ();
 
-  if (nargin != 2)
+  if (nargin != 1)
     print_usage ("fflush");
   else
     retval = fflush_internal (args);
@@ -348,7 +348,7 @@
 {
   Octave_object retval;
 
-  Pix p = return_valid_file (args(1));
+  Pix p = return_valid_file (args(0));
 
   if (! p)
     return retval;
@@ -394,7 +394,7 @@
   return 0;
 }
 
-DEFUN ("fgets", Ffgets, Sfgets, 3, 2,
+DEFUN ("fgets", Ffgets, Sfgets, 2, 2,
   "[STRING, LENGTH] = fgets (FILENAME or FILENUM, LENGTH)\n\
 \n\
 read a string from a file")
@@ -403,7 +403,7 @@
 
   int nargin = args.length ();
 
-  if (nargin != 3)
+  if (nargin != 2)
     print_usage ("fgets");
   else
     retval = fgets_internal (args, nargout);
@@ -416,13 +416,13 @@
 {
   Octave_object retval;
 
-  Pix p = file_io_get_file (args(1), "r", "fgets");
+  Pix p = file_io_get_file (args(0), "r", "fgets");
   
   if (! p)
     return retval;
 
 
-  double dlen = args(2).double_value ();
+  double dlen = args(1).double_value ();
 
   if (error_state)
     return retval;
@@ -454,7 +454,7 @@
   return retval;
 }
 
-DEFUN ("fopen", Ffopen, Sfopen, 3, 1,
+DEFUN ("fopen", Ffopen, Sfopen, 2, 1,
   "FILENUM = fopen (FILENAME, MODE): open a file\n\
 \n\
   Valid values for mode include:\n\
@@ -471,7 +471,7 @@
 
   int nargin = args.length ();
 
-  if (nargin != 3)
+  if (nargin != 2)
     print_usage ("fopen");
   else
     retval = fopen_internal (args);
@@ -485,13 +485,13 @@
   Octave_object retval;
   Pix p;
 
-  if (! args(1).is_string ())
+  if (! args(0).is_string ())
     {
       error ("fopen: file name must be a string");
       return retval;
     }
 
-  p = return_valid_file (args(1));
+  p = return_valid_file (args(0));
 
   if (p)
     {
@@ -502,14 +502,14 @@
       return retval;
     }
 
-  if (! args(2).is_string ())
+  if (! args(1).is_string ())
     {
       error ("fopen: file mode must be a string");
       return retval;
     }
 
-  char *name = args(1).string_value ();
-  char *mode = args(2).string_value ();
+  char *name = args(0).string_value ();
+  char *mode = args(1).string_value ();
 
   if (! valid_mode (mode))
     {
@@ -542,14 +542,14 @@
   return retval;
 }
 
-DEFUN ("freport", Ffreport, Sfreport, 1, 1,
+DEFUN ("freport", Ffreport, Sfreport, 0, 1,
   "freport (): list open files and their status")
 {
   Octave_object retval;
 
   int nargin = args.length ();
 
-  if (nargin > 1)
+  if (nargin > 0)
     warning ("freport: ignoring extra arguments");
 
   retval = freport_internal ();
@@ -580,14 +580,14 @@
   return retval;
 }
 
-DEFUN ("frewind", Ffrewind, Sfrewind, 2, 1,
+DEFUN ("frewind", Ffrewind, Sfrewind, 1, 1,
   "frewind (FILENAME or FILENUM): set file position at beginning of file")
 {
   Octave_object retval;
 
   int nargin = args.length ();
 
-  if (nargin != 2)
+  if (nargin != 1)
     print_usage ("frewind");
   else
     retval = frewind_internal (args);
@@ -600,7 +600,7 @@
 {
   Octave_object retval;
 
-  Pix p = file_io_get_file (args(1), "a+", "frewind");
+  Pix p = file_io_get_file (args(0), "a+", "frewind");
 
   if (p)
     {
@@ -611,7 +611,7 @@
   return retval;
 }
 
-DEFUN ("fseek", Ffseek, Sfseek, 4, 1,
+DEFUN ("fseek", Ffseek, Sfseek, 3, 1,
   "fseek (FILENAME or FILENUM, OFFSET [, ORIGIN])\n\
 \n\
 set file position for reading or writing")
@@ -620,7 +620,7 @@
 
   int nargin = args.length ();
 
-  if (nargin != 3 && nargin != 4)
+  if (nargin != 2 && nargin != 3)
     print_usage ("fseek");
   else
     retval = fseek_internal (args);
@@ -635,14 +635,14 @@
 
   int nargin = args.length ();
 
-  Pix p = file_io_get_file (args(1), "a+", "fseek");
+  Pix p = file_io_get_file (args(0), "a+", "fseek");
 
   if (! p)
     return retval;
 
   long origin = SEEK_SET;
 
-  double doff = args(2).double_value ();
+  double doff = args(1).double_value ();
 
   if (error_state)
     return retval;
@@ -655,9 +655,9 @@
       return retval;
     }
 
-  if (nargin == 4)
+  if (nargin == 3)
     {
-      double dorig = args(3).double_value ();
+      double dorig = args(2).double_value ();
 
       if (error_state)
 	return retval;
@@ -698,14 +698,14 @@
 /*
  * Tell current position of file.
  */
-DEFUN ("ftell", Fftell, Sftell, 2, 1,
+DEFUN ("ftell", Fftell, Sftell, 1, 1,
   "POSITION = ftell (FILENAME or FILENUM): returns the current file position")
 {
   Octave_object retval;
 
   int nargin = args.length ();
 
-  if (nargin != 2)
+  if (nargin != 1)
     print_usage ("ftell");
   else
     retval = ftell_internal (args);
@@ -718,7 +718,7 @@
 {
   Octave_object retval;
 
-  Pix p = file_io_get_file (args(1), "a+", "ftell");
+  Pix p = file_io_get_file (args(0), "a+", "ftell");
 
   if (p)
     {
@@ -781,7 +781,7 @@
 
   if (*s == '*')
     {
-      if (fmt_arg_count >= nargin)
+      if (fmt_arg_count > nargin)
 	{
 	  error ("%s: not enough arguments", type);
 	  return -1;
@@ -822,7 +822,7 @@
       if (*(s-1) == '*')
 	goto invalid_format;
 
-      if (fmt_arg_count >= nargin)
+      if (fmt_arg_count > nargin)
 	{
 	  error ("%s: not enough arguments", type);
 	  return -1;
@@ -861,7 +861,7 @@
   if (*s == '\0')
     goto invalid_format;
 
-  if (fmt_arg_count >= nargin)
+  if (fmt_arg_count > nargin)
     {
       error ("%s: not enough arguments", type);
       return -1;
@@ -963,7 +963,7 @@
 
   int nargin = args.length ();
 
-  if (nargin < 3)
+  if (nargin < 2)
     print_usage ("fprintf");
   else
     retval = do_printf ("fprintf", args, nargout);
@@ -981,7 +981,7 @@
 
   int nargin = args.length ();
 
-  if (nargin < 2)
+  if (nargin < 1)
     print_usage ("printf");
   else
     retval = do_printf ("printf", args, nargout);
@@ -999,7 +999,7 @@
 
   int nargin = args.length ();
 
-  if (nargin < 2)
+  if (nargin < 1)
     print_usage ("sprintf");
   else
     retval = do_printf ("sprintf", args, nargout);
@@ -1011,13 +1011,13 @@
 do_printf (const char *type, const Octave_object& args, int nargout)
 {
   Octave_object retval;
-  fmt_arg_count = 1;
+  fmt_arg_count = 0;
   char *fmt;
   file_info file;
 
   if (strcmp (type, "fprintf") == 0)
     {
-      Pix p = file_io_get_file (args(1), "a+", type);
+      Pix p = file_io_get_file (args(0), "a+", type);
 
       if (! p)
 	return retval;
@@ -1030,7 +1030,7 @@
 	  return retval;
 	}
 
-      fmt = args(2).string_value ();
+      fmt = args(1).string_value ();
 
       if (error_state)
 	{
@@ -1042,7 +1042,7 @@
     }
   else
     {
-      fmt = args(1).string_value ();
+      fmt = args(0).string_value ();
 
       if (error_state)
 	{
@@ -1159,7 +1159,7 @@
 // Even if we don't have a place to store them, attempt to convert
 // everything specified by the format string.
 
-  if (fmt_arg_count >= (nargout ? nargout : 1))
+  if (fmt_arg_count > (nargout ? nargout : 1))
     store_value = 0;
 
   switch (*s)
@@ -1280,14 +1280,14 @@
 /*
  * Formatted reading from a file.
  */
-DEFUN ("fscanf", Ffscanf, Sfscanf, 3, -1,
+DEFUN ("fscanf", Ffscanf, Sfscanf, 2, -1,
   "[A, B, C, ...] = fscanf (FILENAME or FILENUM, FORMAT)")
 {
   Octave_object retval;
 
   int nargin = args.length ();
 
-  if (nargin != 2 && nargin != 3)
+  if (nargin != 1 && nargin != 2)
     print_usage ("fscanf");
   else
     retval = do_scanf ("fscanf", args, nargout);
@@ -1298,14 +1298,14 @@
 /*
  * Formatted reading.
  */
-DEFUN ("scanf", Fscanf, Sscanf, 2, -1,
+DEFUN ("scanf", Fscanf, Sscanf, 1, -1,
   "[A, B, C, ...] = scanf (FORMAT)")
 {
   Octave_object retval;
 
   int nargin = args.length ();
 
-  if (nargin != 2)
+  if (nargin != 1)
     print_usage ("scanf");
   else
     retval = do_scanf ("scanf", args, nargout);
@@ -1316,14 +1316,14 @@
 /*
  * Formatted reading from a string.
  */
-DEFUN ("sscanf", Fsscanf, Ssscanf, 3, -1,
+DEFUN ("sscanf", Fsscanf, Ssscanf, 2, -1,
   "[A, B, C, ...] = sscanf (STRING, FORMAT)")
 {
   Octave_object retval;
 
   int nargin = args.length ();
 
-  if (nargin != 3)
+  if (nargin != 2)
     print_usage ("sscanf");
   else
     retval = do_scanf ("sscanf", args, nargout);
@@ -1345,7 +1345,7 @@
 
   if (strcmp (type, "scanf") != 0)
     {
-      scanf_fmt = args(2).string_value ();
+      scanf_fmt = args(1).string_value ();
 
       if (error_state)
 	{
@@ -1358,7 +1358,7 @@
 
   if (doing_fscanf)
     {
-      Pix p = file_io_get_file (args(1), "r", type);
+      Pix p = file_io_get_file (args(0), "r", type);
 
       if (! p)
 	return retval;
@@ -1374,13 +1374,13 @@
       fptr = file.fptr ();
     }
 
-  if ((! fptr && args(1).is_string ())
+  if ((! fptr && args(0).is_string ())
       || (doing_fscanf && file.number () == 0))
     {
       char *string;
 
       if (strcmp (type, "scanf") == 0)
-	scanf_fmt = args(1).string_value ();
+	scanf_fmt = args(0).string_value ();
 
       if (strcmp (type, "scanf") == 0
 	  || (doing_fscanf && file.number () == 0))
@@ -1390,7 +1390,7 @@
 	    maybe_save_history (string);
 	}
       else
-	string = args(1).string_value ();
+	string = args(0).string_value ();
 
       tmp_file = octave_tmp_file_name ();
 
@@ -1510,7 +1510,7 @@
   return len / size;
 }
 
-DEFUN ("fread", Ffread, Sfread, 4, 2,
+DEFUN ("fread", Ffread, Sfread, 3, 2,
   "[DATA, COUNT] = fread (FILENUM, SIZE, PRECISION)\n\
 \n\
  Reads data in binary form of type PRECISION from a file.\n\
@@ -1529,7 +1529,7 @@
 
   int nargin = args.length ();
 
-  if (nargin < 2 || nargin > 4)
+  if (nargin < 1 || nargin > 3)
     print_usage ("fread");
   else
     retval = fread_internal (args, nargout);
@@ -1567,16 +1567,16 @@
 
   int nargin = args.length ();
 
-  Pix p = file_io_get_file (args(1), "r", "fread");
+  Pix p = file_io_get_file (args(0), "r", "fread");
 
   if (! p)
     return retval;
 
 // Get type and number of bytes per element to read.
   char *prec = "uchar";
-  if (nargin > 3)
+  if (nargin > 2)
     {
-      prec = args(3).string_value ();
+      prec = args(2).string_value ();
 
       if (error_state)
 	{
@@ -1599,11 +1599,11 @@
   int nr;
   int nc;
 
-  if (nargin > 2)
+  if (nargin > 1)
     {
-      if (args(2).is_scalar_type ())
+      if (args(1).is_scalar_type ())
 	{
-	  dnr = args(2).double_value ();
+	  dnr = args(1).double_value ();
 
 	  if (error_state)
 	    return retval;
@@ -1612,7 +1612,7 @@
 	}
       else
 	{
-	  ColumnVector tmp = args(2).vector_value ();
+	  ColumnVector tmp = args(1).vector_value ();
 
 	  if (error_state || tmp.length () != 2)
 	    {
@@ -1676,7 +1676,7 @@
   return retval;
 }
 
-DEFUN ("fwrite", Ffwrite, Sfwrite, 4, 1,
+DEFUN ("fwrite", Ffwrite, Sfwrite, 3, 1,
   "COUNT = fwrite (FILENUM, DATA, PRECISION)\n\
 \n\
  Writes data to a file in binary form of size PRECISION\n\
@@ -1694,7 +1694,7 @@
 
   int nargin = args.length ();
 
-  if (nargin < 3 || nargin > 4)
+  if (nargin < 2 || nargin > 3)
     print_usage ("fwrite");
   else
     retval = fwrite_internal (args, nargout);
@@ -1732,7 +1732,7 @@
 
 // Get type and number of bytes per element to read.
   char *prec = "uchar";
-  if (nargin > 3)
+  if (nargin > 2)
     {
       prec = args(3).string_value ();
 
@@ -1757,7 +1757,7 @@
   return retval;
 }
 
-DEFUN ("feof", Ffeof, Sfeof, 2, 1,
+DEFUN ("feof", Ffeof, Sfeof, 1, 1,
   "ERROR = feof (FILENAME or FILENUM)\n\
 \n\
  Returns a non zero value for an end of file condition for the\n\
@@ -1767,7 +1767,7 @@
 
   int nargin = args.length ();
 
-  if (nargin != 2)
+  if (nargin != 1)
     print_usage ("feof");
   else
     retval = feof_internal (args, nargout);
@@ -1801,7 +1801,7 @@
   return retval;
 }
 
-DEFUN ("ferror", Fferror, Sferror, 2, 1,
+DEFUN ("ferror", Fferror, Sferror, 1, 1,
   "ERROR = ferror (FILENAME or FILENUM)\n\
 \n\
  Returns a non zero value for an error condition on the\n\
@@ -1811,7 +1811,7 @@
 
   int nargin = args.length ();
 
-  if (nargin != 2)
+  if (nargin != 1)
     print_usage ("ferror");
   else
     retval = ferror_internal (args, nargout);
@@ -1834,7 +1834,7 @@
   Octave_object retval;
 
 // Get file info.
-  Pix p = return_valid_file (args(1));
+  Pix p = return_valid_file (args(0));
 
   if (! p)
     return retval;
--- a/src/find.cc	Sun Sep 18 23:34:35 1994 +0000
+++ b/src/find.cc	Mon Sep 19 14:18:48 1994 +0000
@@ -159,13 +159,13 @@
 
   int nargin = args.length ();
 
-  if (nargin != 2 || nargout > 3)
+  if (nargin != 1 || nargout > 3)
     {
       print_usage ("find");
       return retval;
     }
 
-  tree_constant arg = args(1);
+  tree_constant arg = args(0);
 
   if (arg.is_real_type ())
     {
--- a/src/fsolve.cc	Sun Sep 18 23:34:35 1994 +0000
+++ b/src/fsolve.cc	Mon Sep 19 14:18:48 1994 +0000
@@ -84,10 +84,8 @@
 
   int n = x.capacity ();
 
-//  tree_constant name = fsolve_fcn->name ();
   Octave_object args;
-  args.resize (2);
-//  args(0) = name;
+  args.resize (1);
 
   if (n > 1)
     {
@@ -95,13 +93,13 @@
       for (int i = 0; i < n; i++)
 	m (i, 0) = x.elem (i);
       tree_constant vars (m);
-      args(1) = vars;
+      args(0) = vars;
     }
   else
     {
       double d = x.elem (0);
       tree_constant vars (d);
-      args(1) = vars;
+      args(0) = vars;
     }
 
   if (fsolve_fcn)
@@ -137,17 +135,17 @@
 
   int nargin = args.length ();
 
-  if (nargin < 3 || nargin > 7 || nargout > 3)
+  if (nargin < 2 || nargin > 6 || nargout > 3)
     {
       print_usage ("fsolve");
       return retval;
     }
 
-  fsolve_fcn = is_valid_function (args(1), "fsolve", 1);
+  fsolve_fcn = is_valid_function (args(0), "fsolve", 1);
   if (! fsolve_fcn || takes_correct_nargs (fsolve_fcn, 2, "fsolve", 1) != 1)
     return retval;
 
-  ColumnVector x = args(2).vector_value ();
+  ColumnVector x = args(1).vector_value ();
 
   if (error_state)
     {
@@ -155,7 +153,7 @@
       return retval;
     }
 
-  if (nargin > 3)
+  if (nargin > 2)
     warning ("fsolve: ignoring extra arguments");
 
   if (nargout > 2)
@@ -271,18 +269,18 @@
 
   int nargin = args.length ();
 
-  if (nargin == 1)
+  if (nargin == 0)
     {
       print_fsolve_option_list ();
       return retval;
     }
-  else if (nargin == 3)
+  else if (nargin == 2)
     {
-      char *keyword = args(1).string_value ();
+      char *keyword = args(0).string_value ();
 
       if (! error_state)
 	{
-	  double val = args(2).double_value ();
+	  double val = args(1).double_value ();
 
 	  if (! error_state)
 	    {
--- a/src/givens.cc	Sun Sep 18 23:34:35 1994 +0000
+++ b/src/givens.cc	Mon Sep 19 14:18:48 1994 +0000
@@ -57,14 +57,16 @@
 {
   Octave_object retval;
 
-  if (args.length () != 3 || nargout > 2)
+  int nargin = args.length ();
+
+  if (nargin != 2 || nargout > 2)
     {
       print_usage ("givens");
       return retval;
     }
 
-  tree_constant arg_a = args(1);
-  tree_constant arg_b = args(2);
+  tree_constant arg_a = args(0);
+  tree_constant arg_b = args(1);
 
   if (! arg_a.is_scalar_type () && arg_b.is_scalar_type ())
     {
--- a/src/hess.cc	Sun Sep 18 23:34:35 1994 +0000
+++ b/src/hess.cc	Mon Sep 19 14:18:48 1994 +0000
@@ -41,13 +41,15 @@
 {
   Octave_object retval;
 
-  if (args.length () != 2 || nargout > 2)
+  int nargin = args.length ();
+
+  if (nargin != 1 || nargout > 2)
     {
       print_usage ("hess");
       return retval;
     }
 
-  tree_constant arg = args(1);
+  tree_constant arg = args(0);
 
   int nr = arg.rows ();
   int nc = arg.columns ();
--- a/src/ifft.cc	Sun Sep 18 23:34:35 1994 +0000
+++ b/src/ifft.cc	Mon Sep 19 14:18:48 1994 +0000
@@ -45,17 +45,17 @@
 
   int nargin = args.length ();
 
-  if (nargin < 2 || nargin > 3)
+  if (nargin < 1 || nargin > 2)
     {
       print_usage ("ifft");
       return retval;
     }
 
-  tree_constant arg = args(1);
+  tree_constant arg = args(0);
     
   int n_points = arg.rows ();
-  if (nargin == 3)
-    n_points = NINT (args(2).double_value ());
+  if (nargin == 2)
+    n_points = NINT (args(1).double_value ());
 
   if (error_state)
     return retval;
--- a/src/ifft2.cc	Sun Sep 18 23:34:35 1994 +0000
+++ b/src/ifft2.cc	Mon Sep 19 14:18:48 1994 +0000
@@ -47,24 +47,24 @@
 
   int nargin = args.length ();
 
-  if (nargin < 2 || nargin > 4)
+  if (nargin < 1 || nargin > 3)
     {
       print_usage ("ifft2");
       return retval;
     }
 
-  tree_constant arg = args(1);
+  tree_constant arg = args(0);
 
   int n_rows = arg.rows ();
-  if (nargin > 2)
-    n_rows = NINT (args(2).double_value ());
+  if (nargin > 1)
+    n_rows = NINT (args(1).double_value ());
 
   if (error_state)
     return retval;
 
   int n_cols = arg.columns ();
-  if (nargin > 3)
-    n_cols = NINT (args(3).double_value ());
+  if (nargin > 2)
+    n_cols = NINT (args(2).double_value ());
 
   if (error_state)
     return retval;
--- a/src/input.cc	Sun Sep 18 23:34:35 1994 +0000
+++ b/src/input.cc	Mon Sep 19 14:18:48 1994 +0000
@@ -757,13 +757,13 @@
 
   int read_as_string = 0;
 
-  if (nargin == 3)
+  if (nargin == 2)
     read_as_string++;
 
   char *prompt = "debug> ";
-  if (nargin > 1)
+  if (nargin > 0)
    {
-     prompt = args(1).string_value ();
+     prompt = args(0).string_value ();
 
      if (error_state)
        {
@@ -820,7 +820,7 @@
   return retval;
 }
 
-DEFUN ("input", Finput, Sinput, 3, 1,
+DEFUN ("input", Finput, Sinput, 2, 1,
   "input (PROMPT [, S])\n\
 \n\
 Prompt user for input.  If the second argument is present, return
@@ -830,7 +830,7 @@
 
   int nargin = args.length ();
 
-  if (nargin == 2 || nargin == 3)
+  if (nargin == 1 || nargin == 2)
     retval = get_user_input (args, nargout);
   else
     print_usage ("input");
@@ -838,7 +838,7 @@
   return retval;
 }
 
-DEFUN ("keyboard", Fkeyboard, Skeyboard, 2, 1,
+DEFUN ("keyboard", Fkeyboard, Skeyboard, 1, 1,
   "keyboard (PROMPT)\n\
 \n\
 maybe help in debugging function files")
@@ -847,7 +847,7 @@
 
   int nargin = args.length ();
 
-  if (nargin == 1 || nargin == 2)
+  if (nargin == 0 || nargin == 1)
     retval = get_user_input (args, nargout, 1);
   else
     print_usage ("keyboard");
--- a/src/inv.cc	Sun Sep 18 23:34:35 1994 +0000
+++ b/src/inv.cc	Mon Sep 19 14:18:48 1994 +0000
@@ -43,13 +43,13 @@
 
   int nargin = args.length ();
 
-  if (nargin != 2)
+  if (nargin != 1)
     {
       print_usage ("inv");
       return retval;
     }
 
-  tree_constant arg = args(1);
+  tree_constant arg = args(0);
 
   int nr = arg.rows ();
   int nc = arg.columns ();
--- a/src/log.cc	Sun Sep 18 23:34:35 1994 +0000
+++ b/src/log.cc	Mon Sep 19 14:18:48 1994 +0000
@@ -42,13 +42,15 @@
 {
   Octave_object retval;
 
-  if (args.length () != 2)
+  int nargin = args.length ();
+
+  if (nargin != 1)
     {
       print_usage ("logm");
       return retval;
     }
 
-  tree_constant arg = args(1);
+  tree_constant arg = args(0);
     
   if (empty_arg ("logm", arg.rows (), arg.columns ()) < 0)
     return retval;
@@ -148,13 +150,15 @@
 {
   Octave_object retval;
 
-  if (args.length () != 2)
+  int nargin = args.length ();
+
+  if (nargin != 1)
     {
       print_usage ("sqrtm");
       return retval;
     }
 
-  tree_constant arg = args(1);
+  tree_constant arg = args(0);
     
   if (empty_arg ("sqrtm", arg.rows (), arg.columns ()))
     return retval;
--- a/src/lsode.cc	Sun Sep 18 23:34:35 1994 +0000
+++ b/src/lsode.cc	Mon Sep 19 14:18:48 1994 +0000
@@ -50,10 +50,8 @@
 
   int nstates = x.capacity ();
 
-//  tree_constant name (lsode_fcn->name ());
   Octave_object args;
-  args(2) = t;
-//  args(0) = name;
+  args(1) = t;
 
   if (nstates > 1)
     {
@@ -61,13 +59,13 @@
       for (int i = 0; i < nstates; i++)
 	m (i, 0) = x.elem (i);
       tree_constant state (m);
-      args(1) = state;
+      args(0) = state;
     }
   else
     {
       double d = x.elem (0);
       tree_constant state (d);
-      args(1) = state;
+      args(0) = state;
     }
 
   if (lsode_fcn)
@@ -108,17 +106,17 @@
 
   int nargin = args.length ();
 
-  if (nargin < 4 || nargin > 5 || nargout > 1)
+  if (nargin < 3 || nargin > 4 || nargout > 1)
     {
       print_usage ("lsode");
       return retval;
     }
 
-  lsode_fcn = is_valid_function (args(1), "lsode", 1);
+  lsode_fcn = is_valid_function (args(0), "lsode", 1);
   if (! lsode_fcn || takes_correct_nargs (lsode_fcn, 3, "lsode", 1) != 1)
     return retval;
 
-  ColumnVector state = args(2).vector_value ();
+  ColumnVector state = args(1).vector_value ();
 
   if (error_state)
     {
@@ -126,7 +124,7 @@
       return retval;
     }
 
-  ColumnVector out_times = args(3).vector_value ();
+  ColumnVector out_times = args(2).vector_value ();
 
   if (error_state)
     {
@@ -137,9 +135,9 @@
   ColumnVector crit_times;
 
   int crit_times_set = 0;
-  if (nargin > 4)
+  if (nargin > 3)
     {
-      crit_times = args(4).vector_value ();
+      crit_times = args(3).vector_value ();
 
       if (error_state)
 	{
@@ -286,18 +284,18 @@
 
   int nargin = args.length ();
 
-  if (nargin == 1)
+  if (nargin == 0)
     {
       print_lsode_option_list ();
       return retval;
     }
-  else if (nargin == 3)
+  else if (nargin == 2)
     {
-      char *keyword = args(1).string_value ();
+      char *keyword = args(0).string_value ();
 
       if (! error_state)
 	{
-	  double val = args(2).double_value ();
+	  double val = args(1).double_value ();
 
 	  if (! error_state)
 	    {
--- a/src/lu.cc	Sun Sep 18 23:34:35 1994 +0000
+++ b/src/lu.cc	Mon Sep 19 14:18:48 1994 +0000
@@ -40,13 +40,15 @@
 {
   Octave_object retval;
 
-  if (args.length () != 2 || nargout > 3)
+  int nargin = args.length ();
+
+  if (nargin != 1 || nargout > 3)
     {
       print_usage ("lu");
       return retval;
     }
 
-  tree_constant arg = args(1);
+  tree_constant arg = args(0);
 
   int nr = arg.rows ();
   int nc = arg.columns ();
--- a/src/minmax.cc	Sun Sep 18 23:34:35 1994 +0000
+++ b/src/minmax.cc	Mon Sep 19 14:18:48 1994 +0000
@@ -150,7 +150,7 @@
 
   int nargin = args.length ();
 
-  if (nargin == 1 || nargin > 3 || nargout > 2)
+  if (nargin < 1 || nargin > 2 || nargout > 2)
     {
       print_usage ("min");
       return retval;
@@ -161,18 +161,18 @@
 
   switch (nargin)
     {
-    case 3:
-      arg2 = args(2);
+    case 2:
+      arg2 = args(1);
 // Fall through...
-    case 2:
-      arg1 = args(1);
+    case 1:
+      arg1 = args(0);
       break;
     default:
       panic_impossible ();
       break;
     }
 
-  if (nargin == 2 && (nargout == 1 || nargout == 0))
+  if (nargin == 1 && (nargout == 1 || nargout == 0))
     {
       if (arg1.is_real_scalar ())
 	{
@@ -212,7 +212,7 @@
 	  return retval;
 	}
     }
-  else if (nargin == 2 && nargout == 2)
+  else if (nargin == 1 && nargout == 2)
     {
       if (arg1.is_real_scalar ())
         {
@@ -266,7 +266,7 @@
 	  return retval;
         }
     }
-  else if (nargin == 3)
+  else if (nargin == 2)
     {
       if (arg1.rows () == arg2.rows ()
 	  && arg1.columns () == arg2.columns ())
@@ -325,7 +325,7 @@
 
   int nargin = args.length ();
 
-  if (nargin == 1 || nargin > 3 || nargout > 2)
+  if (nargin < 1 || nargin > 2 || nargout > 2)
     {
       print_usage ("max");
       return retval;
@@ -336,18 +336,18 @@
 
   switch (nargin)
     {
-    case 3:
-      arg2 = args(2);
+    case 2:
+      arg2 = args(1);
 // Fall through...
-    case 2:
-      arg1 = args(1);
+    case 1:
+      arg1 = args(0);
       break;
     default:
       panic_impossible ();
       break;
     }
 
-  if (nargin == 2 && (nargout == 1 || nargout == 0))
+  if (nargin == 1 && (nargout == 1 || nargout == 0))
     {
       if (arg1.is_real_scalar ())
 	{
@@ -379,7 +379,7 @@
 	  return retval;
 	}
     }
-  else if (nargin == 2 && nargout == 2)
+  else if (nargin == 1 && nargout == 2)
     {
       if (arg1.is_real_scalar ())
 	{
@@ -425,7 +425,7 @@
 	  return retval;
 	}
     }
-  else if (nargin == 3)
+  else if (nargin == 2)
     {
       if (arg1.rows () == arg2.rows ()
 	  && arg1.columns () == arg2.columns ())
--- a/src/npsol.cc	Sun Sep 18 23:34:35 1994 +0000
+++ b/src/npsol.cc	Mon Sep 19 14:18:48 1994 +0000
@@ -289,14 +289,14 @@
 
   int nargin = args.length ();
 
-  if (nargin < 3 || nargin == 4 || nargin == 7 || nargin == 10
-      || nargin > 11 || nargout > 4)
+  if (nargin < 2 || nargin == 3 || nargin == 6 || nargin == 9
+      || nargin > 10 || nargout > 4)
     {
       print_usage ("npsol");
       return retval;
     }
 
-  ColumnVector x = args(1).vector_value ();
+  ColumnVector x = args(0).vector_value ();
 
   if (error_state || x.capacity () == 0)
     {
@@ -304,7 +304,7 @@
       return retval;
     }
 
-  npsol_objective = is_valid_function (args(2), "npsol", 1);
+  npsol_objective = is_valid_function (args(1), "npsol", 1);
   if (! npsol_objective
       || takes_correct_nargs (npsol_objective, 2, "npsol", 1) != 1)
     return retval;
@@ -314,10 +314,10 @@
   ColumnVector soln;
 
   Bounds bounds;
-  if (nargin == 5 || nargin == 8 || nargin == 11)
+  if (nargin == 4 || nargin == 7 || nargin == 10)
     {
-      ColumnVector lb = args(3).vector_value ();
-      ColumnVector ub = args(4).vector_value ();
+      ColumnVector lb = args(2).vector_value ();
+      ColumnVector ub = args(3).vector_value ();
 
       int lb_len = lb.capacity ();
       int ub_len = ub.capacity ();
@@ -338,7 +338,7 @@
   ColumnVector lambda;
   int inform;
 
-  if (nargin == 3)
+  if (nargin == 2)
     {
       // 1. npsol (x, phi)
 
@@ -349,7 +349,7 @@
       goto solved;
     }
 
-  if (nargin == 5)
+  if (nargin == 4)
     {
       // 2. npsol (x, phi, lb, ub)
 
@@ -361,15 +361,15 @@
     }
 
   npsol_constraints = 0;
-  if (nargin == 6 || nargin == 8 || nargin == 9 || nargin == 11)
-    npsol_constraints = is_valid_function (args(nargin-2), "npsol", 0);
+  if (nargin == 5 || nargin == 7 || nargin == 8 || nargin == 10)
+    npsol_constraints = is_valid_function (args(nargin-1), "npsol", 0);
 
-  if (nargin == 8 || nargin == 6)
+  if (nargin == 7 || nargin == 5)
     {
       if (! npsol_constraints)
 	{
-	  ColumnVector lub = args(nargin-1).vector_value ();
-	  ColumnVector llb = args(nargin-3).vector_value ();
+	  ColumnVector lub = args(nargin).vector_value ();
+	  ColumnVector llb = args(nargin-2).vector_value ();
 
 	  if (error_state || llb.capacity () == 0 || lub.capacity () == 0)
 	    {
@@ -377,7 +377,7 @@
 	      return retval;
 	    }
 
-	  Matrix c = args(nargin-2).matrix_value ();
+	  Matrix c = args(nargin-1).matrix_value ();
 
 	  if (error_state)
 	    {
@@ -390,7 +390,7 @@
 
 	  LinConst linear_constraints (llb, c, lub);
 
-	  if (nargin == 6)
+	  if (nargin == 5)
 	    {
 	      // 7. npsol (x, phi, llb, c, lub)
 
@@ -412,8 +412,8 @@
 	{
 	  if (takes_correct_nargs (npsol_constraints, 2, "npsol", 1))
 	    {
-	      ColumnVector nlub = args(nargin-1).vector_value ();
-	      ColumnVector nllb = args(nargin-3).vector_value ();
+	      ColumnVector nlub = args(nargin).vector_value ();
+	      ColumnVector nllb = args(nargin-2).vector_value ();
 
 	      if (error_state
 		  || (! nonlinear_constraints_ok
@@ -423,7 +423,7 @@
 	      NLFunc const_func (npsol_constraint_function);
 	      NLConst nonlinear_constraints (nllb, const_func, nlub);
 
-	      if (nargin == 6)
+	      if (nargin == 5)
 		{
 		  // 8. npsol (x, phi, nllb, g, nlub)
 
@@ -444,19 +444,19 @@
 	}
     }
 
-  if (nargin == 9 || nargin == 11)
+  if (nargin == 8 || nargin == 10)
     {
       if (! npsol_constraints)
 	{
 	  // Produce error message.
-	  is_valid_function (args(nargin-2), "npsol", 1);
+	  is_valid_function (args(nargin-1), "npsol", 1);
 	}
       else
 	{
 	  if (takes_correct_nargs (npsol_constraints, 2, "npsol", 1))
 	    {
-	      ColumnVector nlub = args(nargin-1).vector_value ();
-	      ColumnVector nllb = args(nargin-3).vector_value ();
+	      ColumnVector nlub = args(nargin).vector_value ();
+	      ColumnVector nllb = args(nargin-2).vector_value ();
 
 	      if (error_state
 		  || (! nonlinear_constraints_ok
@@ -466,8 +466,8 @@
 	      NLFunc const_func (npsol_constraint_function);
 	      NLConst nonlinear_constraints (nllb, const_func, nlub);
 
-	      ColumnVector lub = args(nargin-4).vector_value ();
-	      ColumnVector llb = args(nargin-6).vector_value ();
+	      ColumnVector lub = args(nargin-3).vector_value ();
+	      ColumnVector llb = args(nargin-5).vector_value ();
 
 	      if (error_state || llb.capacity () == 0 || lub.capacity () == 0)
 		{
@@ -475,7 +475,7 @@
 		  return retval;
 		}
 	      
-	      Matrix c = args(nargin-5).matrix_value ();
+	      Matrix c = args(nargin-4).matrix_value ();
 
 	      if (error_state)
 		{
@@ -488,7 +488,7 @@
 
 	      LinConst linear_constraints (llb, c, lub);
 
-	      if (nargin == 9)
+	      if (nargin == 8)
 		{
 		  // 6. npsol (x, phi, llb, c, lub, nllb, g, nlub)
 
@@ -768,18 +768,18 @@
 
   int nargin = args.length ();
 
-  if (nargin == 1)
+  if (nargin == 0)
     {
       print_npsol_option_list ();
       return retval;
     }
-  else if (nargin == 3)
+  else if (nargin == 2)
     {
-      char *keyword = args(1).string_value ();
+      char *keyword = args(0).string_value ();
 
       if (! error_state)
 	{
-	  double val = args(2).double_value ();
+	  double val = args(1).double_value ();
 
 	  if (! error_state)
 	    {
--- a/src/octave.cc	Sun Sep 18 23:34:35 1994 +0000
+++ b/src/octave.cc	Mon Sep 19 14:18:48 1994 +0000
@@ -627,7 +627,9 @@
 {
   Octave_object retval;
 
-  if (args.length () != 1)
+  int nargin = args.length ();
+
+  if (nargin != 0)
     warning ("computer: ignoring extra arguments");
 
   ostrstream output_buf;
@@ -652,12 +654,12 @@
   return retval;
 }
 
-DEFUN ("flops", Fflops, Sflops, 2, 1,
+DEFUN ("flops", Fflops, Sflops, 0, 1,
   "flops (): count floating point operations")
 {
   int nargin = args.length ();
 
-  if (nargin > 2)
+  if (nargin > 0)
     print_usage ("flops");
 
   warning ("flops is a flop, always returning zero");
@@ -665,7 +667,7 @@
   return 0.0;
 }
 
-DEFUN ("quit", Fquit, Squit, 1, 0,
+DEFUN ("quit", Fquit, Squit, 0, 0,
   "quit (): exit Octave gracefully")
 {
   Octave_object retval;
@@ -676,7 +678,7 @@
 
 DEFALIAS (exit, quit);
 
-DEFUN ("warranty", Fwarranty, Swarranty, 1, 0,
+DEFUN ("warranty", Fwarranty, Swarranty, 0, 0,
   "warranty (): describe copying conditions")
 {
   Octave_object retval;
@@ -713,13 +715,13 @@
 {
   Octave_object retval;
 
-  tree_fvc *fcn = is_valid_function (args(1), "feval", 1);
+  tree_fvc *fcn = is_valid_function (args(0), "feval", 1);
   if (fcn)
     {
-      int nargin = args.length () - 1;
+      int tmp_nargin = args.length () - 1;
       Octave_object tmp_args;
-      tmp_args.resize (nargin);
-      for (int i = 0; i < nargin; i++)
+      tmp_args.resize (tmp_nargin);
+      for (int i = 0; i < tmp_nargin; i++)
 	tmp_args(i) = args(i+1);
       retval = fcn->eval (0, nargout, tmp_args);
     }
@@ -736,7 +738,7 @@
 
   int nargin = args.length ();
 
-  if (nargin > 1)
+  if (nargin > 0)
     retval = feval (args, nargout);
   else
     print_usage ("feval");
@@ -820,7 +822,7 @@
   return eval_string (string, 1, 1, parse_status, nargout);
 }
 
-DEFUN ("eval", Feval, Seval, 3, 1,
+DEFUN ("eval", Feval, Seval, 2, 1,
   "eval (TRY, CATCH)\n\
 \n\
 Evaluate the string TRY as octave code.  If that fails, evaluate the\n\
@@ -830,11 +832,11 @@
 
   int nargin = args.length ();
 
-  if (nargin > 1)
+  if (nargin > 0)
     {
       begin_unwind_frame ("Feval");
 
-      if (nargin > 2)
+      if (nargin > 1)
 	{
 	  unwind_protect_int (suppress_octave_error_messages);
 	  suppress_octave_error_messages = 1;
@@ -842,12 +844,12 @@
 
       int parse_status = 0;
 
-      retval = eval_string (args(1), parse_status, nargout);
+      retval = eval_string (args(0), parse_status, nargout);
 
-      if (nargin > 2 && (parse_status != 0 || error_state))
+      if (nargin > 1 && (parse_status != 0 || error_state))
 	{
 	  error_state = 0;
-	  eval_string (args(2), parse_status, nargout);
+	  eval_string (args(1), parse_status, nargout);
 	  retval = Octave_object ();
 	}
 
@@ -868,19 +870,19 @@
 
   int nargin = args.length ();
 
-  if (nargin < 2 || nargin > 3)
+  if (nargin < 1 || nargin > 2)
     {
-      print_usage ("shell_cmd");
+      print_usage ("system");
       return retval;
     }
 
-  tree_constant tc_command = args(1);
+  tree_constant tc_command = args(0);
 
   char *tmp_str = tc_command.string_value ();
 
   if (error_state)
     {
-      error ("shell_cmd: expecting string as first argument");
+      error ("system: expecting string as first argument");
     }
   else
     {
@@ -896,7 +898,7 @@
 
       int status = cmd.close ();
 
-      if (nargout > 0 || nargin > 2)
+      if (nargout > 0 || nargin > 1)
 	{
 	  char *msg = output_buf.str ();
 
--- a/src/pinv.cc	Sun Sep 18 23:34:35 1994 +0000
+++ b/src/pinv.cc	Mon Sep 19 14:18:48 1994 +0000
@@ -44,17 +44,17 @@
 
   int nargin = args.length ();
 
-  if (nargin < 2 || nargin > 3)
+  if (nargin < 1 || nargin > 2)
     {
       print_usage ("pinv");
       return retval;
     }
 
-  tree_constant arg = args(1);
+  tree_constant arg = args(0);
 
   double tol = 0.0;
-  if (nargin == 3)
-    tol = args(2).double_value ();
+  if (nargin == 2)
+    tol = args(1).double_value ();
 
   if (error_state)
     return retval;
--- a/src/pr-output.cc	Sun Sep 18 23:34:35 1994 +0000
+++ b/src/pr-output.cc	Mon Sep 19 14:18:48 1994 +0000
@@ -1297,15 +1297,15 @@
     }
 }
 
-DEFUN ("disp", Fdisp, Sdisp, 3, 1,
+DEFUN ("disp", Fdisp, Sdisp, 1, 1,
   "disp (X): display value without name tag")
 {
   Octave_object retval;
 
   int nargin = args.length ();
 
-  if (nargin == 2)
-    args(1).eval (1);
+  if (nargin == 1)
+    args(0).eval (1);
   else
     print_usage ("disp");
 
--- a/src/pt-exp-base.cc	Sun Sep 18 23:34:35 1994 +0000
+++ b/src/pt-exp-base.cc	Mon Sep 19 14:18:48 1994 +0000
@@ -110,11 +110,10 @@
 {
   int nargin = args.length ();
 
-  while (--nargin > 0)
-    {
-      if (args(nargin).is_undefined ())
-	return 0;
-    }
+  for (int i = 0; i < nargin; i++)
+    if (args(i).is_undefined ())
+      return 0;
+
   return 1;
 }
 
@@ -125,11 +124,10 @@
 {
   int nargin = args.length ();
 
-  while (--nargin > 0)
-    {
-      if (args(nargin).is_magic_colon ())
+  for (int i = 0; i < nargin; i++)
+    if (args(i).is_magic_colon ())
 	return 1;
-    }
+
   return 0;
 }
 
@@ -759,12 +757,12 @@
 {
   script_file_executed = lookup (sym);
 
-  tree_fvc *ans = 0;
+  tree_fvc *retval = 0;
 
   if (! script_file_executed)
-    ans = sym->def ();
-
-  return ans;
+    retval = sym->def ();
+
+  return retval;
 }
 
 void
@@ -784,18 +782,16 @@
 
   int script_file_executed = 0;
 
-  tree_fvc *ans = do_lookup (script_file_executed);
+  tree_fvc *object_to_eval = do_lookup (script_file_executed);
 
   if (! script_file_executed)
     {
-      if (ans)
+      if (object_to_eval)
 	{
 	  int nargout = maybe_do_ans_assign ? 0 : 1;
 
-	  int nargin = (ans->is_constant ()) ? 0 : 1;
 	  Octave_object tmp_args;
-	  tmp_args.resize (nargin);
-	  Octave_object tmp = ans->eval (0, nargout, tmp_args);
+	  Octave_object tmp = object_to_eval->eval (0, nargout, tmp_args);
 
 	  if (tmp.length () > 0)
 	    retval = tmp(0);
@@ -806,7 +802,7 @@
 
   if (! error_state && retval.is_defined ())
     {
-      if (maybe_do_ans_assign && ! ans->is_constant ())
+      if (maybe_do_ans_assign && ! object_to_eval->is_constant ())
 	{
 
 // XXX FIXME XXX -- need a procedure to do this, probably in
@@ -872,11 +868,11 @@
 
   int script_file_executed = 0;
 
-  tree_fvc *ans = do_lookup (script_file_executed);
+  tree_fvc *object_to_eval = do_lookup (script_file_executed);
 
   if (! script_file_executed)
     {
-      if (ans)
+      if (object_to_eval)
 	{
 	  if (maybe_do_ans_assign && nargout == 1)
 	    {
@@ -885,7 +881,7 @@
 
 	      nargout = 0;
 
-	      retval = ans->eval (0, nargout, args);
+	      retval = object_to_eval->eval (0, nargout, args);
 
 	      if (retval.length () > 0 && retval(0).is_defined ())
 		{
@@ -908,7 +904,7 @@
 		}
 	    }
 	  else
-	    retval = ans->eval (print, nargout, args);
+	    retval = object_to_eval->eval (print, nargout, args);
 	}
       else
 	eval_undefined_error ();
@@ -950,13 +946,15 @@
 
   if (list)
     {
-// Extract the arguments into a simple vector.
+// Extract the arguments into a simple vector.  Don't pass null args.
+
       Octave_object args = list->convert_to_const_vector ();
-// Don't pass null arguments.
+
       int nargin = args.length ();
+
       if (error_state)
 	eval_error ();
-      else if (nargin > 1 && all_args_defined (args))
+      else if (nargin > 0 && all_args_defined (args))
 	{
 	  Octave_object tmp = id->eval (print, 1, args);
 
@@ -987,12 +985,15 @@
 
   if (list)
     {
-// Extract the arguments into a simple vector.
+// Extract the arguments into a simple vector.  Don't pass null args.
+
       Octave_object args = list->convert_to_const_vector ();
-// Don't pass null arguments.
+
+      int nargin = args.length ();
+
       if (error_state)
 	eval_error ();
-      else if (args.length () > 1 && all_args_defined (args))
+      else if (nargin > 0 && all_args_defined (args))
 	{
 	  retval = id->eval (print, nargout, args);
 	  if (error_state)
@@ -1199,7 +1200,7 @@
   if (error_state)
     return tree_constant ();
 
-  tree_constant ans;
+  tree_constant retval;
 
   switch (etype)
     {
@@ -1214,10 +1215,10 @@
 	    eval_error ();
 	  else if (u.is_defined ())
 	    {
-	      ans = do_unary_op (u, etype);
+	      retval = do_unary_op (u, etype);
 	      if (error_state)
 		{
-		  ans = tree_constant ();
+		  retval = tree_constant ();
 		  if (error_state)
 		    eval_error ();
 		}
@@ -1229,7 +1230,7 @@
       break;
     }
 
-  return ans;
+  return retval;
 }
 
 char *
@@ -1298,7 +1299,8 @@
   if (error_state)
     return tree_constant ();
 
-  tree_constant ans;
+  tree_constant retval;
+
   switch (etype)
     {
     case tree_expression::add:
@@ -1331,10 +1333,10 @@
 		eval_error ();
 	      else if (b.is_defined ())
 		{
-		  ans = do_binary_op (a, b, etype);
+		  retval = do_binary_op (a, b, etype);
 		  if (error_state)
 		    {
-		      ans = tree_constant ();
+		      retval = tree_constant ();
 		      if (error_state)
 			eval_error ();
 		    }
@@ -1397,7 +1399,7 @@
 	      }
 	  }
       done:
-	ans = tree_constant ((double) result);
+	retval = tree_constant ((double) result);
       }
       break;
     default:
@@ -1405,7 +1407,7 @@
       break;
     }
 
-  return ans;
+  return retval;
 }
 
 char *
@@ -1488,7 +1490,6 @@
 {
   assert (etype == tree_expression::assignment);
 
-  tree_constant ans;
   tree_constant retval;
 
   if (error_state)
@@ -1504,34 +1505,35 @@
 	}
       else if (! index)
 	{
-	  ans = lhs->assign (rhs_val);
+	  retval = lhs->assign (rhs_val);
 	  if (error_state)
 	    eval_error ();
 	}
       else
 	{
 // Extract the arguments into a simple vector.
+
 	  Octave_object args = index->convert_to_const_vector ();
 
 	  int nargin = args.length ();
 
 	  if (error_state)
 	    eval_error ();
-	  else if (nargin > 1)
+	  else if (nargin > 0)
 	    {
-	      ans = lhs->assign (rhs_val, args);
+	      retval = lhs->assign (rhs_val, args);
 	      if (error_state)
 		eval_error ();
 	    }
 	}
     }
 
-  if (! error_state && ans.is_defined ())
+  if (! error_state && retval.is_defined ())
     {
       int pad_after = 0;
       if (print && user_pref.print_answer_id_name)
 	{
-	  if (print_as_scalar (ans))
+	  if (print_as_scalar (retval))
 	    {
 	      ostrstream output_buf;
 	      output_buf << lhs->name () << " = " << ends;
@@ -1546,7 +1548,7 @@
 	    }
 	}
 
-      retval = ans.eval (print);
+      retval.eval (print);
 
       if (print && pad_after)
 	{
@@ -1950,7 +1952,6 @@
     eval_fcn:
 
       Octave_object args;
-      args(0) = tree_constant (my_name);
       Octave_object tmp = (*fcn) (args, 1);
       if (tmp.length () > 0)
 	retval = tmp(0);
@@ -1991,10 +1992,9 @@
     {
       if (nargin > nargin_max)
 	::error ("%s: too many arguments", my_name);
-      else if (nargin > 0 && args.length () > 0 && args(1).is_defined ())
+      else if (nargin > 0 && args(0).is_defined ())
 	{
-	  tree_constant tmp = args(1).mapper (mapper_fcn, 0);
-	  retval.resize (1);
+	  tree_constant tmp = args(0).mapper (mapper_fcn, 0);
 	  retval(0) = tmp;
 	}	
     }
@@ -2228,14 +2228,9 @@
 // Copy return values out.
 
     if (ret_list)
-      {
-	retval = ret_list->convert_to_const_vector ();
-      }
+      retval = ret_list->convert_to_const_vector ();
     else if (user_pref.return_last_computed_value)
-      {
-	retval.resize (1);
-	retval(0) = last_computed_value;
-      }
+      retval(0) = last_computed_value;
   }
 
  abort:
@@ -2337,7 +2332,7 @@
   print_code_new_line (os);
 }
 
-DEFUN ("va_arg", Fva_arg, Sva_arg, 1, 1,
+DEFUN ("va_arg", Fva_arg, Sva_arg, 0, 1,
   "va_arg (): return next argument in a function that takes a\n\
 variable number of parameters")
 {
@@ -2345,7 +2340,7 @@
 
   int nargin = args.length ();
 
-  if (nargin == 1)
+  if (nargin == 0)
     {
       if (curr_function)
 	{
@@ -2366,7 +2361,7 @@
   return retval;
 }
 
-DEFUN ("va_start", Fva_start, Sva_start, 1, 0,
+DEFUN ("va_start", Fva_start, Sva_start, 0, 0,
   "va_start (): reset the pointer to the list of optional arguments\n\
 to the beginning")
 {
@@ -2374,7 +2369,7 @@
 
   int nargin = args.length ();
 
-  if (nargin == 1)
+  if (nargin == 0)
     {
       if (curr_function)
 	{
--- a/src/pt-misc.cc	Sun Sep 18 23:34:35 1994 +0000
+++ b/src/pt-misc.cc	Mon Sep 19 14:18:48 1994 +0000
@@ -205,15 +205,13 @@
 Octave_object
 tree_argument_list::convert_to_const_vector (void)
 {
-  int len = length () + 1;
+  int len = length ();
 
   Octave_object args;
   args.resize (len);
 
-// args[0] may eventually hold something useful, like the function
-// name.
   Pix p = first ();
-  for (int k = 1; k < len; k++)
+  for (int k = 0; k < len; k++)
     {
       tree_expression *elt = this->operator () (p);
       if (elt)
@@ -232,6 +230,7 @@
 	  break;
 	}
     }
+
   return args;
 }
 
@@ -271,16 +270,16 @@
 void
 tree_parameter_list::define_from_arg_vector (const Octave_object& args)
 {
-  if (args.length () <= 0)
+  int nargin = args.length ();
+
+  if (nargin <= 0)
     return;
 
-  int nargin = args.length ();
-
-  int expected_nargin = length () + 1;
+  int expected_nargin = length ();
 
   Pix p = first ();
 
-  for (int i = 1; i < expected_nargin; i++)
+  for (int i = 0; i < expected_nargin; i++)
     {
       tree_identifier *elt = this->operator () (p);
 
--- a/src/qpsol.cc	Sun Sep 18 23:34:35 1994 +0000
+++ b/src/qpsol.cc	Mon Sep 19 14:18:48 1994 +0000
@@ -91,14 +91,14 @@
 
   int nargin = args.length ();
 
-  if (nargin < 4 || nargin == 5 || nargin == 8 || nargin > 9
+  if (nargin < 3 || nargin == 4 || nargin == 7 || nargin > 8
       || nargout > 4)
     {
       print_usage ("qpsol");
       return retval;
     }
 
-  ColumnVector x = args(1).vector_value ();
+  ColumnVector x = args(0).vector_value ();
 
   if (error_state || x.capacity () == 0)
     {
@@ -106,7 +106,7 @@
       return retval;
     }
 
-  Matrix H = args(2).matrix_value ();
+  Matrix H = args(1).matrix_value ();
 
   if (error_state || H.rows () != H.columns () || H.rows () != x.capacity ())
     {
@@ -114,7 +114,7 @@
       return retval;
     }
 
-  ColumnVector c = args(3).vector_value ();
+  ColumnVector c = args(2).vector_value ();
 
   if (error_state || c.capacity () != x.capacity ())
     {
@@ -123,10 +123,10 @@
     }
 
   Bounds bounds;
-  if (nargin == 6 || nargin == 9)
+  if (nargin == 5 || nargin == 8)
     {
-      ColumnVector lb = args(4).vector_value ();
-      ColumnVector ub = args(5).vector_value ();
+      ColumnVector lb = args(3).vector_value ();
+      ColumnVector ub = args(4).vector_value ();
 
       int lb_len = lb.capacity ();
       int ub_len = ub.capacity ();
@@ -148,7 +148,7 @@
   ColumnVector lambda;
   int inform;
 
-  if (nargin == 4)
+  if (nargin == 3)
     {
       // 1. qpsol (x, H, c)
 
@@ -159,7 +159,7 @@
       goto solved;
     }
 
-  if (nargin == 6)
+  if (nargin == 5)
     {
       //  2. qpsol (x, H, c, lb, ub)
 
@@ -170,10 +170,10 @@
       goto solved;
     }
 
-  if (nargin == 7 || nargin == 9)
+  if (nargin == 6 || nargin == 8)
     {
-      ColumnVector lub = args(nargin-1).vector_value ();
-      ColumnVector llb = args(nargin-3).vector_value ();
+      ColumnVector lub = args(nargin).vector_value ();
+      ColumnVector llb = args(nargin-2).vector_value ();
 
       if (error_state || llb.capacity () == 0 || lub.capacity () == 0)
 	{
@@ -181,7 +181,7 @@
 	  return retval;
 	}
 
-      Matrix A = args(nargin-2).matrix_value ();
+      Matrix A = args(nargin-1).matrix_value ();
 
       if (error_state)
 	{
@@ -194,7 +194,7 @@
 
       LinConst linear_constraints (llb, A, lub);
 
-      if (nargin == 9)
+      if (nargin == 8)
 	{
 	  // 3. qpsol (x, H, c, lb, ub, llb, A, lub)
 
@@ -374,18 +374,18 @@
 
   int nargin = args.length ();
 
-  if (nargin == 1)
+  if (nargin == 0)
     {
       print_qpsol_option_list ();
       return retval;
     }
-  else if (nargin == 3)
+  else if (nargin == 2)
     {
-      char *keyword = args(1).string_value ();
+      char *keyword = args(0).string_value ();
 
       if (! error_state)
 	{
-	  double val = args(2).double_value ();
+	  double val = args(1).double_value ();
 
 	  if (! error_state)
 	    {
--- a/src/qr.cc	Sun Sep 18 23:34:35 1994 +0000
+++ b/src/qr.cc	Mon Sep 19 14:18:48 1994 +0000
@@ -60,19 +60,19 @@
 
   int nargin = args.length ();
 
-  if (nargin != 2 && nargin != 3 || nargout > 3)
+  if (nargin != 1 && nargin != 2 || nargout > 3)
     {
       print_usage ("qr");
       return retval;
     }
 
-  tree_constant arg = args(1);
+  tree_constant arg = args(0);
     
   if (empty_arg ("qr", arg.rows (), arg.columns ()) < 0)
     return retval;
 
   QR::type type = nargout == 1 ? QR::raw
-    : (nargin == 3 ? QR::economy : QR::std);
+    : (nargin == 2 ? QR::economy : QR::std);
 
   if (arg.is_real_type ())
     {
--- a/src/quad.cc	Sun Sep 18 23:34:35 1994 +0000
+++ b/src/quad.cc	Mon Sep 19 14:18:48 1994 +0000
@@ -49,10 +49,8 @@
 {
   double retval = 0.0;
 
-//  tree_constant name = quad_fcn->name ();
   Octave_object args;
-  args(1) = x;
-//  args(0) = name;
+  args(0) = x;
 
   if (quad_fcn)
     {
@@ -104,17 +102,17 @@
 
   int nargin = args.length ();
 
-  if (nargin < 4 || nargin > 6 || nargout > 4)
+  if (nargin < 3 || nargin > 5 || nargout > 4)
     {
       print_usage ("quad");
       return retval;
     }
 
-  quad_fcn = is_valid_function (args(1), "fsolve", 1);
+  quad_fcn = is_valid_function (args(0), "fsolve", 1);
   if (! quad_fcn || takes_correct_nargs (quad_fcn, 2, "fsolve", 1) != 1)
     return retval;
 
-  double a = args(2).double_value ();
+  double a = args(1).double_value ();
 
   if (error_state)
     {
@@ -122,7 +120,7 @@
       return retval;
     }
 
-  double b = args(3).double_value ();
+  double b = args(2).double_value ();
 
   if (error_state)
     {
@@ -162,7 +160,7 @@
   int have_sing = 0;
   switch (nargin)
     {
-    case 6:
+    case 5:
       if (indefinite)
 	{
 	  error("quad: singularities not allowed on infinite intervals");
@@ -171,7 +169,7 @@
 
       have_sing = 1;
 
-      sing = args(5).vector_value ();
+      sing = args(4).vector_value ();
 
       if (error_state)
 	{
@@ -179,8 +177,8 @@
 	  return retval;
 	}
 
-    case 5:
-      tol = args(4).vector_value ();
+    case 4:
+      tol = args(3).vector_value ();
 
       if (error_state)
 	{
@@ -202,7 +200,7 @@
 	  return retval;
 	}
 
-    case 4:
+    case 3:
       if (indefinite)
 	{
 	  IndefQuad iq (quad_user_function, bound, indef_type, abstol, reltol);
@@ -337,18 +335,18 @@
 
   int nargin = args.length ();
 
-  if (nargin == 1)
+  if (nargin == 0)
     {
       print_quad_option_list ();
       return retval;
     }
-  else if (nargin == 3)
+  else if (nargin == 2)
     {
-      char *keyword = args(1).string_value ();
+      char *keyword = args(0).string_value ();
 
       if (! error_state)
 	{
-	  double val = args(2).double_value ();
+	  double val = args(1).double_value ();
 
 	  if (! error_state)
 	    {
--- a/src/qzval.cc	Sun Sep 18 23:34:35 1994 +0000
+++ b/src/qzval.cc	Mon Sep 19 14:18:48 1994 +0000
@@ -62,14 +62,16 @@
 {
   Octave_object retval;
 
-  if (args.length () != 3 || nargout > 1)
+  int nargin = args.length ();
+
+  if (nargin != 2 || nargout > 1)
     {
       print_usage ("qzvalue");
       return retval;
     }
 
-  tree_constant arg_a = args(1);
-  tree_constant arg_b = args(2);
+  tree_constant arg_a = args(0);
+  tree_constant arg_b = args(1);
 
   int a_nr = arg_a.rows();
   int a_nc = arg_a.columns();
--- a/src/rand.cc	Sun Sep 18 23:34:35 1994 +0000
+++ b/src/rand.cc	Mon Sep 19 14:18:48 1994 +0000
@@ -112,7 +112,7 @@
 
   int nargin = args.length ();
 
-  if (nargin > 3 || nargout > 1)
+  if (nargin > 2 || nargout > 1)
     {
       print_usage ("rand");
       return retval;
@@ -145,15 +145,15 @@
 
   int n = 0;
   int m = 0;
-  if (nargin == 1)
+  if (nargin == 0)
     {
       n = 1;
       m = 1;
       goto gen_matrix;
     }
-  else if (nargin == 2)
+  else if (nargin == 1)
     {
-      tree_constant tmp = args(1);
+      tree_constant tmp = args(0);
 
       if (tmp.is_string ())
 	{
@@ -191,8 +191,8 @@
 	}
       else if (tmp.is_matrix_type ())
 	{
-	  n = NINT (args(1).rows ());
-	  m = NINT (args(1).columns ());
+	  n = NINT (args(0).rows ());
+	  m = NINT (args(0).columns ());
 	  goto gen_matrix;
 	}
       else
@@ -201,23 +201,23 @@
 	  return retval;
 	}
     }
-  else if (nargin == 3)
+  else if (nargin == 2)
     {
-      if (args(1).is_string ()
-	  && strcmp (args(1).string_value (), "seed") == 0)
+      if (args(0).is_string ()
+	  && strcmp (args(0).string_value (), "seed") == 0)
 	{
-	  double d = args(2).double_value ();
+	  double d = args(1).double_value ();
 
 	  if (! error_state)
 	    set_rand_seed (d);
 	}
       else
 	{
-	  n = NINT (args(1).double_value ());
+	  n = NINT (args(0).double_value ());
 
 	  if (! error_state)
 	    {
-	      m = NINT (args(2).double_value ());
+	      m = NINT (args(1).double_value ());
 
 	      if (! error_state)
 		goto gen_matrix;
--- a/src/schur.cc	Sun Sep 18 23:34:35 1994 +0000
+++ b/src/schur.cc	Mon Sep 19 14:18:48 1994 +0000
@@ -53,18 +53,18 @@
 
   int nargin = args.length ();
 
-  if (nargin == 1 || nargin > 3 || nargout > 2)
+  if (nargin < 1 || nargin > 2 || nargout > 2)
     {
       print_usage ("schur");
       return retval;
     }
 
-  tree_constant arg = args(1);
+  tree_constant arg = args(0);
 
   char *ord = "U";
-  if (nargin == 3)
+  if (nargin == 2)
     {
-      ord = args(2).string_value ();
+      ord = args(1).string_value ();
 
       if (error_state)
 	{
--- a/src/sort.cc	Sun Sep 18 23:34:35 1994 +0000
+++ b/src/sort.cc	Mon Sep 19 14:18:48 1994 +0000
@@ -172,7 +172,7 @@
 
   int nargin = args.length ();
 
-  if (nargin != 2)
+  if (nargin != 1)
     {
       print_usage ("sort");
       return retval;
@@ -184,7 +184,7 @@
   else
     retval.resize (1);
 
-  tree_constant arg = args(1);
+  tree_constant arg = args(0);
 
   if (arg.is_real_type ())
     {
--- a/src/svd.cc	Sun Sep 18 23:34:35 1994 +0000
+++ b/src/svd.cc	Mon Sep 19 14:18:48 1994 +0000
@@ -47,18 +47,18 @@
 
   int nargin = args.length ();
 
-  if (nargin < 2 || nargin > 3 || nargout == 2 || nargout > 3)
+  if (nargin < 1 || nargin > 2 || nargout == 2 || nargout > 3)
     {
       print_usage ("svd");
       return retval;
     }
 
-  tree_constant arg = args(1);
+  tree_constant arg = args(0);
 
   if (empty_arg ("svd", arg.rows (), arg.columns ()) < 0)
     return retval;
 
-  SVD::type type = (nargin == 3) ? SVD::economy : SVD::std;
+  SVD::type type = (nargin == 2) ? SVD::economy : SVD::std;
 
   if (arg.is_real_type ())
     {
--- a/src/syl.cc	Sun Sep 18 23:34:35 1994 +0000
+++ b/src/syl.cc	Mon Sep 19 14:18:48 1994 +0000
@@ -61,15 +61,17 @@
 {
   Octave_object retval;
 
-  if (args.length () != 4 || nargout > 1)
+  int nargin = args.length ();
+
+  if (nargin != 3 || nargout > 1)
     {
       print_usage ("syl");
       return retval;
     }
 
-  tree_constant arg_a = args(1);
-  tree_constant arg_b = args(2);
-  tree_constant arg_c = args(3);
+  tree_constant arg_a = args(0);
+  tree_constant arg_b = args(1);
+  tree_constant arg_c = args(2);
 
   int a_nr = arg_a.rows ();
   int a_nc = arg_a.columns ();
--- a/src/sysdep.cc	Sun Sep 18 23:34:35 1994 +0000
+++ b/src/sysdep.cc	Mon Sep 19 14:18:48 1994 +0000
@@ -373,7 +373,7 @@
   return c;
 }
 
-DEFUN ("clc", Fclc, Sclc, 1, 0,
+DEFUN ("clc", Fclc, Sclc, 0, 0,
   "clc (): clear screen")
 {
   Octave_object retval;
@@ -397,16 +397,16 @@
 
 DEFALIAS (home, clc);
 
-DEFUN ("getenv", Fgetenv, Sgetenv, 2, 1,
+DEFUN ("getenv", Fgetenv, Sgetenv, 1, 1,
   "getenv (STRING): get environment variable values")
 {
   Octave_object retval;
 
   int nargin = args.length ();
 
-  if (nargin == 2)
+  if (nargin == 1)
     {
-      char *name = args(1).string_value ();
+      char *name = args(0).string_value ();
 
       if (! error_state)
 	{
@@ -423,7 +423,7 @@
   return retval;
 }
 
-DEFUN ("kbhit", Fkbhit, Skbhit, 1, 1,
+DEFUN ("kbhit", Fkbhit, Skbhit, 0, 1,
   "kbhit: get a single character from the terminal")
 {
   Octave_object retval;
@@ -449,7 +449,7 @@
 
   int nargin = args.length ();
 
-  if (! (nargin == 1 || nargin == 2))
+  if (! (nargin == 0 || nargin == 1))
     {
       print_usage ("pause");
       return retval;
@@ -459,9 +459,9 @@
     {
       switch (nargin)
 	{
-	case 2:
+	case 1:
 	  {
-	    double dval = args(1).double_value ();
+	    double dval = args(0).double_value ();
 
 	    if (! error_state)
 	      {
--- a/src/tc-rep.cc	Sun Sep 18 23:34:35 1994 +0000
+++ b/src/tc-rep.cc	Mon Sep 19 14:18:48 1994 +0000
@@ -235,11 +235,11 @@
 {
   int nargin = args.length ();
 
-  return ((nargin == 3
-	   && args(2).valid_as_scalar_index ()
-	   && args(1).valid_as_scalar_index ())
-	  || (nargin == 2
-	      && args(1).valid_as_scalar_index ()));
+  return ((nargin == 2
+	   && args(1).valid_as_scalar_index ()
+	   && args(0).valid_as_scalar_index ())
+	  || (nargin == 1
+	      && args(0).valid_as_scalar_index ()));
 }
 
 // Now, the classes.
@@ -1804,11 +1804,13 @@
 
       switch (nargin)
 	{
-	case 3:
+	case 2:
 	  {
-	    if (args(2).is_matrix_type ())
+	    tree_constant arg = args(1);
+
+	    if (arg.is_matrix_type ())
 	      {
-		Matrix mj = args(2).matrix_value ();
+		Matrix mj = arg.matrix_value ();
 
 		idx_vector j (mj, user_pref.do_fortran_indexing, "");
 		if (! j)
@@ -1818,9 +1820,9 @@
 		if (len == j.ones_count ())
 		  cols = len;
 	      }
-	    else if (args(2).const_type () == magic_colon
-		     || (args(2).is_scalar_type ()
-			 && NINT (args(2).double_value ()) == 1))
+	    else if (arg.const_type () == magic_colon
+		     || (arg.is_scalar_type ()
+			 && NINT (arg.double_value ()) == 1))
 	      {
 		cols = 1;
 	      }
@@ -1830,11 +1832,13 @@
 
 // Fall through...
 
-	case 2:
+	case 1:
 	  {
-	    if (args(1).is_matrix_type ())
+	    tree_constant arg = args(0);
+
+	    if (arg.is_matrix_type ())
 	      {
-		Matrix mi = args(1).matrix_value ();
+		Matrix mi = arg.matrix_value ();
 
 		idx_vector i (mi, user_pref.do_fortran_indexing, "");
 		if (! i)
@@ -1844,14 +1848,14 @@
 		if (len == i.ones_count ())
 		  rows = len;
 	      }
-	    else if (args(1).const_type () == magic_colon
-		     || (args(1).is_scalar_type ()
-			 && NINT (args(1).double_value ()) == 1))
+	    else if (arg.const_type () == magic_colon
+		     || (arg.is_scalar_type ()
+			 && NINT (arg.double_value ()) == 1))
 	      {
 		rows = 1;
 	      }
-	    else if (args(1).is_scalar_type ()
-		     && NINT (args(1).double_value ()) == 0)
+	    else if (arg.is_scalar_type ()
+		     && NINT (arg.double_value ()) == 0)
 	      {
 		return Matrix ();
 	      }
@@ -1902,28 +1906,36 @@
 
   switch (nargin)
     {
-    case 2:
-      if (args.length () <= 0)
-	::error ("matrix index is null");
-      else if (args(1).is_undefined ())
-	::error ("matrix index is a null expression");
-      else
-	retval = do_matrix_index (args(1));
+    case 1:
+      {
+	tree_constant arg = args(0);
+
+	if (arg.is_undefined ())
+	  ::error ("matrix index is a null expression");
+	else
+	  retval = do_matrix_index (arg);
+      }
       break;
 
     case 3:
-      if (args.length () <= 0)
-	::error ("matrix indices are null");
-      else if (args(1).is_undefined ())
+      {
+	tree_constant arg_a = args(0);
+	tree_constant arg_b = args(1);
+
+	if (arg_a.is_undefined ())
 	::error ("first matrix index is a null expression");
-      else if (args(2).is_undefined ())
-	::error ("second matrix index is a null expression");
-      else
-	retval = do_matrix_index (args(1), args(2));
+	else if (arg_b.is_undefined ())
+	  ::error ("second matrix index is a null expression");
+	else
+	  retval = do_matrix_index (arg_a, arg_b);
+      }
       break;
 
     default:
-      ::error ("too many indices for matrix expression");
+      if (nargin == 0)
+	::error ("matrix indices expected, but none provided");
+      else
+	::error ("too many indices for matrix expression");
       break;
     }
 
@@ -3235,7 +3247,7 @@
 	  type_tag = unknown_constant;
 	}
     }
-  else if (nargin > 3 || nargin < 2)
+  else if (nargin > 2 || nargin < 1)
     ::error ("invalid index expression for scalar type");
   else
     ::error ("index invalid or out of range for scalar type");
@@ -3281,39 +3293,47 @@
 // don't let any pass through here.
   switch (nargin)
     {
+    case 1:
+      {
+	tree_constant arg = args(0);
+
+	if (arg.is_undefined ())
+	  ::error ("matrix index is undefined");
+	else
+	  do_matrix_assignment (rhs, arg);
+      }
+      break;
+
     case 2:
-      if (args.length () <= 0)
-	::error ("matrix index is null");
-      else if (args(1).is_undefined ())
-	::error ("matrix index is undefined");
-      else
-	do_matrix_assignment (rhs, args(1));
-      break;
-
-    case 3:
-      if (args.length () <= 0)
-	::error ("matrix indices are null");
-      else if (args(1).is_undefined ())
-	::error ("first matrix index is undefined");
-      else if (args(2).is_undefined ())
-	::error ("second matrix index is undefined");
-      else if (args(1).is_empty () || args(2).is_empty ())
-	{
-	  if (! rhs.is_empty ())
-	    {
-	      ::error ("in assignment expression, a matrix index is empty");
-	      ::error ("but hte right hand side is not an empty matrix");
-	    }
+      {
+	tree_constant arg_a = args(0);
+	tree_constant arg_b = args(1);
+
+	if (arg_a.is_undefined ())
+	  ::error ("first matrix index is undefined");
+	else if (arg_b.is_undefined ())
+	  ::error ("second matrix index is undefined");
+	else if (arg_a.is_empty () || arg_b.is_empty ())
+	  {
+	    if (! rhs.is_empty ())
+	      {
+		::error ("in assignment expression, a matrix index is empty");
+		::error ("but the right hand side is not an empty matrix");
+	      }
 // XXX FIXME XXX -- to really be correct here, we should probably
 // check to see if the assignment conforms, but that seems like more
 // work than it's worth right now...
-	}
-      else
-	do_matrix_assignment (rhs, args(1), args(2));
+	  }
+	else
+	  do_matrix_assignment (rhs, arg_a, arg_b);
+      }
       break;
 
     default:
-      ::error ("too many indices for matrix expression");
+      if (nargin == 0)
+	::error ("matrix indices expected, but none provided");
+      else
+	::error ("too many indices for matrix expression");
       break;
     }
 }
--- a/src/utils.cc	Sun Sep 18 23:34:35 1994 +0000
+++ b/src/utils.cc	Mon Sep 19 14:18:48 1994 +0000
@@ -498,7 +498,7 @@
 all_strings (const Octave_object& args)
 {
   int n = args.length ();
-  for (int i = 1; i < n; i++)
+  for (int i = 0; i < n; i++)
     if (! args(i).is_string ())
       return 0;
   return 1;
@@ -513,8 +513,8 @@
       int n = args.length ();
       argv = new char * [n + 1];
       argv[0] = strsave (fcn_name);
-      for (int i = 1; i < n; i++)
-	argv[i] = strsave (args(i).string_value ());
+      for (int i = 0; i < n; i++)
+	argv[i+1] = strsave (args(i).string_value ());
     }
   else
     error ("%s: expecting all arguments to be strings", fcn_name);
--- a/src/variables.cc	Sun Sep 18 23:34:35 1994 +0000
+++ b/src/variables.cc	Mon Sep 19 14:18:48 1994 +0000
@@ -167,8 +167,8 @@
 takes_correct_nargs (tree_fvc *fcn, int expected_nargin, char *warn_for,
 		     int warn)
 {
-  int nargin = fcn->max_expected_args () - 1;
-  int e_nargin = expected_nargin - 1;
+  int nargin = fcn->max_expected_args ();
+  int e_nargin = expected_nargin;
   if (nargin != e_nargin)
     {
       if (warn)
@@ -179,13 +179,15 @@
   return 1;
 }
 
-DEFUN ("is_global", Fis_global, Sis_global, 2, 1,
+DEFUN ("is_global", Fis_global, Sis_global, 1, 1,
   "is_global (X): return 1 if the string X names a global variable\n\
 otherwise, return 0.")
 {
   Octave_object retval = 0.0;
 
-  if (args.length () != 2)
+  int nargin = args.length ();
+
+  if (nargin != 1)
     {
       print_usage ("is_global");
       return retval;
@@ -206,7 +208,7 @@
   return retval;
 }
 
-DEFUN ("exist", Fexist, Sexist, 2, 1,
+DEFUN ("exist", Fexist, Sexist, 1, 1,
   "exist (NAME): check if variable or file exists\n\
 \n\
 return 0 if NAME is undefined, 1 if it is a variable, or 2 if it is\n\
@@ -214,7 +216,9 @@
 {
   Octave_object retval;
 
-  if (args.length () != 2)
+  int nargin = args.length ();
+
+  if (nargin != 1)
     {
       print_usage ("exist");
       return retval;
@@ -1141,10 +1145,13 @@
 {
   Octave_object retval;
 
+  int nargin = args.length ();
+
   Octave_object tmp_args = args;
-  tmp_args(args.length ()) = "-long";
 
-  int argc = tmp_args.length ();
+  tmp_args(nargin) = "-long";
+
+  int argc = nargin + 1;
   char **argv = make_argv (tmp_args, "whos");
 
   if (error_state)
@@ -1260,7 +1267,7 @@
 
   sr = sym_tab->lookup ("nargin", 1, 0);
   sr->unprotect ();
-  tmp = new tree_constant (nargin-1);
+  tmp = new tree_constant (nargin);
   sr->define (tmp);
   sr->protect ();