changeset 2745:76411ce43c05

[project @ 1997-02-26 07:52:14 by jwe]
author jwe
date Wed, 26 Feb 1997 07:52:17 +0000
parents b1474687fb83
children c51575839b21
files NEWS WWW/index.html doc/interpreter/eval.texi doc/interpreter/set.texi scripts/ChangeLog scripts/general/is_matrix.m scripts/linear-algebra/vech.m scripts/special-matrix/hadamard.m src/ChangeLog src/error.cc src/lex.h src/lex.l src/parse.y src/pt-fvc.cc src/time.cc
diffstat 15 files changed, 120 insertions(+), 44 deletions(-) [+]
line wrap: on
line diff
--- a/NEWS	Wed Feb 26 07:15:29 1997 +0000
+++ b/NEWS	Wed Feb 26 07:52:17 1997 +0000
@@ -1,3 +1,11 @@
+Summary of changes for version 2.0.5:
+------------------------------------
+
+  * Commands like ls, save, and cd may now also be used as formal
+    parameters for functions.
+
+  * More tests.
+
 Summary of changes for version 2.0.4:
 ------------------------------------
 
--- a/WWW/index.html	Wed Feb 26 07:15:29 1997 +0000
+++ b/WWW/index.html	Wed Feb 26 07:52:17 1997 +0000
@@ -73,7 +73,7 @@
 <h3>Contributed Functions</h3>
 <p>
 An archive of contributed functions for Octave is available from
-<a href="http://www.tsc.uvigo.es/GTS/Octave/oct_arch.html">http://www.tsc.uvigo.es/GTS/Octave/oct_arch.html</a>.
+<a href="http://www.tsc.uvigo.es/GTS/Octave">http://www.tsc.uvigo.es/GTS/Octave</a>.
 </p>
 
 <hr>
--- a/doc/interpreter/eval.texi	Wed Feb 26 07:15:29 1997 +0000
+++ b/doc/interpreter/eval.texi	Wed Feb 26 07:52:17 1997 +0000
@@ -66,13 +66,13 @@
 by name, and use @code{feval} to call them.
 @end deftypefn
 
-@cindex Fordyce, A. P.
-@findex newtroot
 Here is a simple-minded function using @code{feval} that finds the root
 of a user-supplied function of one variable using Newton's method.
 
 @example
 @group
+@cindex Fordyce, A. P.
+@findex newtroot
 function result = newtroot (fname, x)
 
 # usage: newtroot (fname, x)
--- a/doc/interpreter/set.texi	Wed Feb 26 07:15:29 1997 +0000
+++ b/doc/interpreter/set.texi	Wed Feb 26 07:52:17 1997 +0000
@@ -27,8 +27,8 @@
 
 @example
 @group
-union ([ 1, 2, 3 ], [ 2, 3, 5 ])
-     @result{} [ 1, 2, 5 ]
+union ([ 1, 2, 4 ], [ 2, 3, 5 ])
+     @result{} [ 1, 2, 3, 4, 5 ]
 @end group
 @end example
 @end deftypefn
--- a/scripts/ChangeLog	Wed Feb 26 07:15:29 1997 +0000
+++ b/scripts/ChangeLog	Wed Feb 26 07:52:17 1997 +0000
@@ -1,3 +1,11 @@
+Wed Feb 26 01:48:28 1997  John W. Eaton  <jwe@bevo.che.wisc.edu>
+
+	* general/is_matrix.m: Return zero for empty matrices.
+
+Tue Feb 25 15:16:04 1997  John W. Eaton  <jwe@bevo.che.wisc.edu>
+
+	* linear-algebra/vech.m: Size result just once.
+
 Sun Feb 23 00:15:57 1997  John W. Eaton  <jwe@bevo.che.wisc.edu>
 
 	* general/is_square.m: Handle empty matrices correctly.
--- a/scripts/general/is_matrix.m	Wed Feb 26 07:15:29 1997 +0000
+++ b/scripts/general/is_matrix.m	Wed Feb 26 07:52:17 1997 +0000
@@ -29,7 +29,7 @@
 
   if (nargin == 1)
     [nr, nc] = size (x);
-    retval = (nr >= 0 && nc >= 0);
+    retval = (nr > 0 && nc > 0);
   else
     usage ("is_matrix (x)");
   endif
--- a/scripts/linear-algebra/vech.m	Wed Feb 26 07:15:29 1997 +0000
+++ b/scripts/linear-algebra/vech.m	Wed Feb 26 07:52:17 1997 +0000
@@ -40,6 +40,7 @@
   ## This should be quicker than having an inner `for' loop as well.
   ## Ideally, vech should be written in C++.
   n = rows (x);
+  v = zeros ((n+1)*n/2, 1);
   count = 0;
   for j = 1 : n
     i = j : n; 
--- a/scripts/special-matrix/hadamard.m	Wed Feb 26 07:15:29 1997 +0000
+++ b/scripts/special-matrix/hadamard.m	Wed Feb 26 07:52:17 1997 +0000
@@ -31,11 +31,15 @@
     usage ("hadamard (n)");
   endif
 
-  if (k < 1)
-    retval = 1;
+  if (is_scalar (k))
+    if (k < 1)
+      retval = 1;
+    else
+      tmp = hadamard (k-1);
+      retval = [tmp, tmp; tmp, -tmp];
+    endif
   else
-    tmp = hadamard (k-1);
-    retval = [tmp, tmp; tmp, -tmp];
+    error ("hadamard: expecting scalar argument");
   endif
 
 endfunction
--- a/src/ChangeLog	Wed Feb 26 07:15:29 1997 +0000
+++ b/src/ChangeLog	Wed Feb 26 07:52:17 1997 +0000
@@ -1,3 +1,22 @@
+Tue Feb 25 22:21:05 1997  John W. Eaton  <jwe@bevo.che.wisc.edu>
+
+	* time.cc (strftime): increase initial buffer size.
+
+Mon Feb 24 17:49:21 1997  John W. Eaton  <jwe@bevo.che.wisc.edu>
+
+	* pt-fvc.cc (tree_builtin::eval): Enable checking for max number
+	of arguments.
+
+	* error.cc (handle_message): Don't fail if args is empty.
+
+Sun Feb 23 22:42:52 1997  John W. Eaton  <jwe@bevo.che.wisc.edu>
+
+	* lex.h (lexical_feedback::looking_at_return_list): New field.
+	(lexical_feedback::looking_at_parameter_list): Ditto.
+	* lex.l (lexical_feedback::init): Initialize them.
+	(handle_identifier): Use them.
+	* parse.y: Likewise.
+
 Fri Feb 21 15:35:18 1997  John W. Eaton  <jwe@bevo.che.wisc.edu>
 
 	* lex.l: Require flex 2.5 or later (we really want 2.5.4 or later,
--- a/src/error.cc	Wed Feb 26 07:15:29 1997 +0000
+++ b/src/error.cc	Wed Feb 26 07:52:17 1997 +0000
@@ -211,20 +211,23 @@
 
   int nargin = args.length ();
 
-  octave_value arg = ((nargin > 1) ? Fsprintf (args, 1) : args) (0);
-
-  if (arg.is_defined ())
+  if (nargin > 0)
     {
-      if (arg.is_string ())
+      octave_value arg = ((nargin > 1) ? Fsprintf (args, 1) : args) (0);
+
+      if (arg.is_defined ())
 	{
-	  tstr = arg.string_value ();
-	  msg = tstr.c_str ();
-
-	  if (! msg)
+	  if (arg.is_string ())
+	    {
+	      tstr = arg.string_value ();
+	      msg = tstr.c_str ();
+	      
+	      if (! msg)
+		return retval;
+	    }
+	  else if (arg.is_empty ())
 	    return retval;
 	}
-      else if (arg.is_empty ())
-	return retval;
     }
 
 // Ugh.
--- a/src/lex.h	Wed Feb 26 07:15:29 1997 +0000
+++ b/src/lex.h	Wed Feb 26 07:52:17 1997 +0000
@@ -137,6 +137,12 @@
   // Nonzero means we're in the middle of defining a function.
   int defining_func;
 
+  // Nonzero means we're parsing the return list for a function.
+  int looking_at_return_list;
+
+  // Nonzero means we're parsing the parameter list for a function.
+  int looking_at_parameter_list;
+
   // GAG.  Stupid kludge so that [[1,2][3,4]] will work.
   int do_comma_insert;
 
--- a/src/lex.l	Wed Feb 26 07:15:29 1997 +0000
+++ b/src/lex.l	Wed Feb 26 07:52:17 1997 +0000
@@ -1759,13 +1759,20 @@
   // Kluge alert.
   //
   // If we are looking at a text style function, set up to gobble its
-  // arguments.  If the following token is `=', force the symbol to be
+  // arguments.
+  //
+  // If the following token is `=', or if we are parsing a function
+  // return list or function parameter list, force the symbol to be
   // inserted as a variable in the current symbol table.
 
   if (is_text_function_name (tok) && ! is_variable (tok))
     {
-      if (next_tok_is_eq)
-	force_local_variable (tok);
+      if (next_tok_is_eq
+	  || lexer_flags.looking_at_return_list
+	  || lexer_flags.looking_at_parameter_list)
+	{
+	  force_local_variable (tok);
+	}
       else if (! next_tok_is_paren)
 	{
 	  if (tok == "gset")
@@ -1877,6 +1884,10 @@
   beginning_of_function = 0;
   defining_func = 0;
 
+  // Not parsing a function return or parameter list.
+  looking_at_return_list = 0;
+  looking_at_parameter_list = 0;
+
   // Not initially defining a matrix list.
   braceflag = 0;
 
--- a/src/parse.y	Wed Feb 26 07:15:29 1997 +0000
+++ b/src/parse.y	Wed Feb 26 07:52:17 1997 +0000
@@ -855,6 +855,10 @@
 		  { curr_sym_tab = global_sym_tab; }
 		;
 
+in_return_list	: // empty
+		  { lexer_flags.looking_at_return_list = 1; }
+		;
+
 local_symtab	: // empty
 		  { curr_sym_tab = tmp_local_sym_tab; }
 		;
@@ -887,21 +891,29 @@
 		  { $$ = finish_function_def ($1, $4); }
 		;
 
-return_list_x	: '[' safe local_symtab
+return_list_x	: '[' safe local_symtab in_return_list
 		;
 
 return_list	: return_list_x ']'
-		  { $$ = new tree_parameter_list (); }
+		  {
+		    lexer_flags.looking_at_return_list = 0;
+		    $$ = new tree_parameter_list ();
+		  }
 		| return_list_x ELLIPSIS ']'
 		  {
+		    lexer_flags.looking_at_return_list = 0;
 		    tree_parameter_list *tmp = new tree_parameter_list ();
 		    tmp->mark_varargs_only ();
 		    $$ = tmp;
 		  }
 		| return_list1 ']'
-		  { $$ = $1; }
+		  {
+		    lexer_flags.looking_at_return_list = 0;
+		    $$ = $1;
+		  }
 		| return_list1 ',' ELLIPSIS ']'
 		  {
+		    lexer_flags.looking_at_return_list = 0;
 		    $1->mark_varargs ();
 		    $$ = $1;
 		  }
@@ -981,6 +993,10 @@
 		  }
 		;
 
+in_param_list	: // empty
+		  { lexer_flags.looking_at_parameter_list = 1; }
+		;
+
 param_list	: '(' ')'
 		  {
 		    lexer_flags.quote_is_transpose = 0;
@@ -995,12 +1011,14 @@
 		  }
 		| param_list1 ')'
 		  {
+		    lexer_flags.looking_at_parameter_list = 0;
 		    lexer_flags.quote_is_transpose = 0;
 		    $1->mark_as_formal_parameters ();
 		    $$ = $1;
 		  }
 		| param_list1 ',' ELLIPSIS ')'
 		  {
+		    lexer_flags.looking_at_parameter_list = 0;
 		    lexer_flags.quote_is_transpose = 0;
 		    $1->mark_as_formal_parameters ();
 		    $1->mark_varargs ();
@@ -1008,8 +1026,8 @@
 		  }
 		;
 
-param_list1	: '(' identifier
-		  { $$ = new tree_parameter_list ($2); }
+param_list1	: '(' in_param_list identifier
+		  { $$ = new tree_parameter_list ($3); }
 		| param_list1 ',' identifier
 		  {
 		    $1->append ($3);
--- a/src/pt-fvc.cc	Wed Feb 26 07:15:29 1997 +0000
+++ b/src/pt-fvc.cc	Wed Feb 26 07:52:17 1997 +0000
@@ -779,19 +779,19 @@
     }
   else if (is_mapper)
     {
-// XXX FIXME XXX -- should we just assume nargin_max == 1?
-//
-//      if (nargin > nargin_max)
-//	::error ("%s: too many arguments", my_name.c_str ());
-//      else
-      if (nargin > 0 && args(0).is_defined ())
-	{
-	  octave_value tmp = apply_mapper_fcn (args(0), mapper_fcn, 0);
-	  retval(0) = tmp;
-	}
+      if (nargin > 1)
+	::error ("%s: too many arguments", my_name.c_str ());
+      else if (nargin < 1)
+	::error ("%s: too few arguments", my_name.c_str ());
       else
 	{
-	  ::error ("%s: too few arguments", my_name.c_str ());
+	  if (args(0).is_defined ())
+	    {
+	      octave_value tmp = apply_mapper_fcn (args(0), mapper_fcn, 0);
+	      retval(0) = tmp;
+	    }
+	  else
+	    ::error ("%s: argument undefined", my_name.c_str ());
 	}
     }
   else
--- a/src/time.cc	Wed Feb 26 07:15:29 1997 +0000
+++ b/src/time.cc	Wed Feb 26 07:52:17 1997 +0000
@@ -55,10 +55,8 @@
 #if defined (HAVE_TM_ZONE)
   m ["zone"]  = tm->tm_zone;
 #elif defined (HAVE_TZNAME)
-  if (tm->tm_isdst && tzname[1] && *tzname[1])
-    m ["zone"] = tzname[1];
-  else
-    m ["zone"] = tzname[0];
+  if (tm->tm_isdst == 0 || tm->tm_isdst == 1)
+    m ["zone"] = tzname[tm->tm_isdst];
 #else
   m ["zone"] = zone_name (tm);
 #endif
@@ -285,7 +283,7 @@
 
       if (! error_state)
 	{
-	  int bufsize = 128;
+	  int bufsize = 1024;
 	  char *buf = new char [bufsize];
 
 	  while (! strftime (buf, bufsize, fmt.c_str (), tm))