# HG changeset patch # User jwe # Date 1155801674 0 # Node ID 1bcd9dd629c3456e74adca9cc3f40cbc7bf01641 # Parent 51cbaa2539f4667247ee51e1e4d79f87d96caae5 [project @ 2006-08-17 08:01:14 by jwe] diff -r 51cbaa2539f4 -r 1bcd9dd629c3 src/ChangeLog --- a/src/ChangeLog Wed Aug 16 06:55:23 2006 +0000 +++ b/src/ChangeLog Thu Aug 17 08:01:14 2006 +0000 @@ -1,3 +1,9 @@ +2006-08-17 John W. Eaton + + * ls-mat5.cc (save_mat5_element_length): Correctly compute element + length for character data. Handle N-d character data + (save_mat5_binary_element): Handle N-d character data. + 2006-08-16 John W. Eaton * parse.y (gobble_leading_white_space): New arg, SKIP_CODE. diff -r 51cbaa2539f4 -r 1bcd9dd629c3 src/ls-mat5.cc --- a/src/ls-mat5.cc Wed Aug 16 06:55:23 2006 +0000 +++ b/src/ls-mat5.cc Thu Aug 17 08:01:14 2006 +0000 @@ -1352,10 +1352,10 @@ if (tc.is_string ()) { - charMatrix chm = tc.char_matrix_value (); + charNDArray chm = tc.char_array_value (); ret += 8; - if (chm.nelem () > 1) - ret += PAD (2 * chm.rows () * chm.cols ()); + if (chm.nelem () > 2) + ret += PAD (2 * chm.nelem ()); } else if (cname == "sparse") { @@ -1618,27 +1618,26 @@ // data element if (tc.is_string ()) { - charMatrix chm = tc.char_matrix_value (); - int nr = chm.rows (); - int nc = chm.cols (); - int len = nr*nc*2; - int paddedlength = PAD (nr*nc*2); + charNDArray chm = tc.char_array_value (); + int nel = chm.nelem (); + int len = nel*2; + int paddedlength = PAD (len); - OCTAVE_LOCAL_BUFFER (int16_t, buf, nc*nr+3); + OCTAVE_LOCAL_BUFFER (int16_t, buf, nel+3); write_mat5_tag (os, miUINT16, len); - for (int i = 0; i < nr; i++) - { - std::string tstr = chm.row_as_string (i); - const char *s = tstr.data (); + const char *s = chm.data (); - for (int j = 0; j < nc; j++) - buf[j*nr+i] = *s++ & 0x00FF; - } - os.write (reinterpret_cast (buf), nr*nc*2); + for (int i = 0; i < nel; i++) + buf[i] = *s++ & 0x00FF; + + os.write (reinterpret_cast (buf), len); if (paddedlength > len) - os.write (reinterpret_cast (buf), paddedlength - len); + { + static char padbuf[9]="\x00\x00\x00\x00\x00\x00\x00\x00"; + os.write (padbuf, paddedlength - len); + } } else if (cname == "sparse") {