*** ../octave-cvs/octave/src/utils.cc Fri Aug 1 09:46:30 2003 --- octave/src/utils.cc Wed Aug 6 08:40:42 2003 *************** check_dimensions (int& nr, int& nc, cons *** 766,771 **** --- 766,828 ---- } void + check_dimensions (Array& dim, const char *warnfor) + { + bool neg = false; + + int n = dim.length (); + for (int i = 0; i < dim.length (); i++) + { + if (dim(i) < 0) + { + dim(i) = 0; + neg = true; + } + } + + if (neg && Vwarn_neg_dim_as_zero) + { + warning ("%s: converting negative dimension to zero", warnfor); + } + } + + + void + get_dimensions (const octave_value& a, const char *warn_for, + Array& dim) + { + if (a.is_scalar_type ()) + { + dim.resize (2); + dim(0) = a.nint_value (); + dim(1) = dim(0); + } + else + { + int nr = a.rows (); + int nc = a.columns (); + + if (nr == 1 || nc == 1) + { + Array v = a.vector_value (); + + if (error_state) + return; + + int n = v.length (); + dim.resize (n); + for (int i = 0; i < n; i++) + dim(i) = NINT (v(i)); + } + else + warning ("%s (A): use %s (size (A)) instead", warn_for, warn_for); + } + + check_dimensions (dim, warn_for); // May set error_state. + } + + + void get_dimensions (const octave_value& a, const char *warn_for, int& nr, int& nc) {