# HG changeset patch # User jwe # Date 1171610629 0 # Node ID a3a2580435c2ad0b443c01c09edb9fe046e7807c # Parent cf52583fe055b6ee2f5294ee75781e815c7ced20 [project @ 2007-02-16 07:23:49 by jwe] diff -r cf52583fe055 -r a3a2580435c2 scripts/ChangeLog --- a/scripts/ChangeLog Fri Feb 16 04:52:42 2007 +0000 +++ b/scripts/ChangeLog Fri Feb 16 07:23:49 2007 +0000 @@ -1,3 +1,7 @@ +2007-02-16 Muthiah Annamalai + + * specfun/nchoosek.m: Check nargin. + 2007-02-15 John W. Eaton * path/addpath.m, path/rmpath.m: Delete diff -r cf52583fe055 -r a3a2580435c2 scripts/specfun/nchoosek.m --- a/scripts/specfun/nchoosek.m Fri Feb 16 04:52:42 2007 +0000 +++ b/scripts/specfun/nchoosek.m Fri Feb 16 07:23:49 2007 +0000 @@ -49,30 +49,34 @@ ## resulting @var{c} has size @code{[nchoosek (length (@var{n}), ## @var{k}), @var{k}]}. ## +## @seealso{bincoeff} ## @end deftypefn -##AUTHORS Rolf Fabian -## Paul Kienzle +## Author: Rolf Fabian +## Author: Paul Kienzle -## XXX FIXME XXX This function is identical to bincoeff for scalar +## FIXME -- This function is identical to bincoeff for scalar ## values, and so should probably be combined with bincoeff. function A = nchoosek (v, k) - n = length (v); - - if (n == 1) - A = round (exp (sum (log (k+1:v)) - sum (log (2:v-k)))); - elseif (k == 0) - A = []; - elseif (k == 1) - A = v(:); - elseif (k == n) - A = v(:).'; + if (nargin == 2) + n = length (v); + if (n == 1) + A = round (exp (sum (log (k+1:v)) - sum (log (2:v-k)))); + elseif (k == 0) + A = []; + elseif (k == 1) + A = v(:); + elseif (k == n) + A = v(:).'; + else + m = round (exp (sum (log (k:n-1)) - sum (log (2:n-k)))); + A = [v(1)*ones(m,1), nchoosek(v(2:n),k-1); + nchoosek(v(2:n),k)]; + endif else - m = round (exp (sum (log (k:n-1)) - sum (log (2:n-k)))); - A = [v(1)*ones(m,1), nchoosek(v(2:n),k-1); - nchoosek(v(2:n),k)]; + print_usage (); endif endfunction diff -r cf52583fe055 -r a3a2580435c2 src/ChangeLog --- a/src/ChangeLog Fri Feb 16 04:52:42 2007 +0000 +++ b/src/ChangeLog Fri Feb 16 07:23:49 2007 +0000 @@ -1,3 +1,12 @@ +2007-02-16 John W. Eaton + + * toplev.cc (wait_for_input): New function. + (run_command_and_return_output): Use it instead of napping. + + * oct-procbuf.h (octave_procbuf::pid): Now const. + * procstream.h (procstreambase::pid): Now const. + (procstreambase::file_number): New function. + 2007-02-15 John W. Eaton * mxarray.h (mxChar): Use char instead of unsigned short. diff -r cf52583fe055 -r a3a2580435c2 src/oct-procbuf.h --- a/src/oct-procbuf.h Fri Feb 16 04:52:42 2007 +0000 +++ b/src/oct-procbuf.h Fri Feb 16 07:23:49 2007 +0000 @@ -56,7 +56,7 @@ bool is_open (void) const { return open_p; } - pid_t pid (void) { return proc_pid; } + pid_t pid (void) const { return proc_pid; } protected: diff -r cf52583fe055 -r a3a2580435c2 src/procstream.h --- a/src/procstream.h Fri Feb 16 04:52:42 2007 +0000 +++ b/src/procstream.h Fri Feb 16 07:23:49 2007 +0000 @@ -56,7 +56,9 @@ int close (void); - pid_t pid (void) { return pb.pid (); } + pid_t pid (void) const { return pb.pid (); } + + int file_number (void) const { return pb.file_number (); } private: diff -r cf52583fe055 -r a3a2580435c2 src/toplev.cc --- a/src/toplev.cc Fri Feb 16 04:52:42 2007 +0000 +++ b/src/toplev.cc Fri Feb 16 07:23:49 2007 +0000 @@ -397,6 +397,28 @@ delete cmd; } +static int +wait_for_input (int fid) +{ + int retval = -1; + +#if defined (HAVE_SELECT) + if (fid >= 0) + { + fd_set set; + + FD_ZERO (&set); + FD_SET (fid, &set); + + retval = select (FD_SETSIZE, &set, 0, 0, 0); + } +#else + retval = 1; +#endif + + return retval; +} + static octave_value_list run_command_and_return_output (const std::string& cmd_str) { @@ -410,15 +432,9 @@ if (*cmd) { - std::ostringstream output_buf; + int fid = cmd->file_number (); - // FIXME -- Perhaps we should read more than one - // character at a time and find a way to avoid the call to - // octave_usleep as well? - - // This is a bit of a kluge... - - octave_usleep (100); + std::ostringstream output_buf; char ch; @@ -432,7 +448,8 @@ { cmd->clear (); - octave_usleep (100); + if (wait_for_input (fid) != 1) + break; } else break;