Mercurial > octave-nkf
annotate src/load-save.cc @ 11542:695141f1c05c ss-3-3-55
snapshot 3.3.55
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Sat, 15 Jan 2011 04:53:04 -0500 |
parents | fd0a3ac60b0e |
children | e1851653d59c |
rev | line source |
---|---|
6763 | 1 /* |
604 | 2 |
11523 | 3 Copyright (C) 1994-2011 John W. Eaton |
604 | 4 |
5 This file is part of Octave. | |
6 | |
7 Octave is free software; you can redistribute it and/or modify it | |
8 under the terms of the GNU General Public License as published by the | |
7016 | 9 Free Software Foundation; either version 3 of the License, or (at your |
10 option) any later version. | |
604 | 11 |
12 Octave is distributed in the hope that it will be useful, but WITHOUT | |
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
15 for more details. | |
16 | |
17 You should have received a copy of the GNU General Public License | |
7016 | 18 along with Octave; see the file COPYING. If not, see |
19 <http://www.gnu.org/licenses/>. | |
604 | 20 |
21 */ | |
22 | |
3911 | 23 // Author: John W. Eaton. |
24 // HDF5 support by Steven G. Johnson <stevenj@alum.mit.edu> | |
25 // Matlab v5 support by James R. Van Zandt <jrv@vanzandt.mv.com> | |
3687 | 26 |
604 | 27 #ifdef HAVE_CONFIG_H |
1192 | 28 #include <config.h> |
604 | 29 #endif |
30 | |
1343 | 31 #include <cfloat> |
32 #include <cstring> | |
33 #include <cctype> | |
34 | |
4249 | 35 #include <fstream> |
3503 | 36 #include <iomanip> |
37 #include <iostream> | |
5765 | 38 #include <sstream> |
1728 | 39 #include <string> |
40 | |
9946 | 41 #include "strftime.h" |
42 | |
1961 | 43 #include "byte-swap.h" |
44 #include "data-conv.h" | |
2926 | 45 #include "file-ops.h" |
6159 | 46 #include "file-stat.h" |
2926 | 47 #include "glob-match.h" |
2890 | 48 #include "lo-mappers.h" |
2318 | 49 #include "mach-info.h" |
3185 | 50 #include "oct-env.h" |
3258 | 51 #include "oct-time.h" |
4171 | 52 #include "quit.h" |
1755 | 53 #include "str-vec.h" |
8377
25bc2d31e1bf
improve OCTAVE_LOCAL_BUFFER
Jaroslav Hajek <highegg@gmail.com>
parents:
8110
diff
changeset
|
54 #include "oct-locbuf.h" |
1755 | 55 |
4332 | 56 #include "Cell.h" |
1352 | 57 #include "defun.h" |
604 | 58 #include "error.h" |
777 | 59 #include "gripes.h" |
6159 | 60 #include "load-path.h" |
1352 | 61 #include "load-save.h" |
1750 | 62 #include "oct-obj.h" |
3687 | 63 #include "oct-map.h" |
4332 | 64 #include "ov-cell.h" |
1352 | 65 #include "pager.h" |
1750 | 66 #include "pt-exp.h" |
1352 | 67 #include "symtab.h" |
68 #include "sysdep.h" | |
69 #include "unwind-prot.h" | |
604 | 70 #include "utils.h" |
2371 | 71 #include "variables.h" |
3185 | 72 #include "version.h" |
3688 | 73 #include "dMatrix.h" |
74 | |
4633 | 75 #include "ls-hdf5.h" |
76 #include "ls-mat-ascii.h" | |
77 #include "ls-mat4.h" | |
78 #include "ls-mat5.h" | |
79 #include "ls-oct-ascii.h" | |
80 #include "ls-oct-binary.h" | |
3688 | 81 |
10309 | 82 // Remove gnulib definitions, if any. |
83 #ifdef close | |
84 #undef close | |
85 #endif | |
86 #ifdef open | |
87 #undef open | |
5269 | 88 #endif |
89 | |
10309 | 90 #ifdef HAVE_ZLIB |
91 #include "zfstream.h" | |
10305
d6cdf08d0424
load-save.cc: avoid gnulib definition of close
John W. Eaton <jwe@octave.org>
parents:
10250
diff
changeset
|
92 #endif |
d6cdf08d0424
load-save.cc: avoid gnulib definition of close
John W. Eaton <jwe@octave.org>
parents:
10250
diff
changeset
|
93 |
3598 | 94 // Write octave-core file if Octave crashes or is killed by a signal. |
5794 | 95 static bool Vcrash_dumps_octave_core = true; |
3189 | 96 |
4791 | 97 // The maximum amount of memory (in kilobytes) that we will attempt to |
98 // write to the Octave core file. | |
5794 | 99 static double Voctave_core_file_limit = -1.0; |
4791 | 100 |
101 // The name of the Octave core file. | |
5794 | 102 static std::string Voctave_core_file_name = "octave-core"; |
4791 | 103 |
3687 | 104 // The default output format. May be one of "binary", "text", |
105 // "mat-binary", or "hdf5". | |
5794 | 106 static std::string Vdefault_save_options = "-text"; |
2194 | 107 |
5284 | 108 // The output format for Octave core files. |
5794 | 109 static std::string Voctave_core_file_options = "-binary"; |
110 | |
111 static std::string | |
112 default_save_header_format (void) | |
113 { | |
114 return | |
115 std::string ("# Created by Octave " OCTAVE_VERSION | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
116 ", %a %b %d %H:%M:%S %Y %Z <") |
5794 | 117 + octave_env::get_user_name () |
118 + std::string ("@") | |
119 + octave_env::get_host_name () | |
120 + std::string (">"); | |
121 } | |
4788 | 122 |
3709 | 123 // The format string for the comment line at the top of text-format |
124 // save files. Passed to strftime. Should begin with `#' and contain | |
125 // no newline characters. | |
5794 | 126 static std::string Vsave_header_format_string = default_save_header_format (); |
3709 | 127 |
5369 | 128 static void |
129 gripe_file_open (const std::string& fcn, const std::string& file) | |
130 { | |
131 if (fcn == "load") | |
132 error ("%s: unable to open input file `%s'", fcn.c_str (), file.c_str ()); | |
133 else if (fcn == "save") | |
134 error ("%s: unable to open output file `%s'", fcn.c_str (), file.c_str ()); | |
135 else | |
136 error ("%s: unable to open file `%s'", fcn.c_str (), file.c_str ()); | |
137 } | |
138 | |
7336 | 139 // Install a variable with name NAME and the value VAL in the |
140 // symbol table. If GLOBAL is TRUE, make the variable global. | |
604 | 141 |
142 static void | |
7336 | 143 install_loaded_variable (const std::string& name, |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
144 const octave_value& val, |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
145 bool global, const std::string& /*doc*/) |
604 | 146 { |
147 if (global) | |
148 { | |
10628
d406d91aa9c3
correctly load global variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10315
diff
changeset
|
149 symbol_table::symbol_record& sr = symbol_table::insert (name); |
d406d91aa9c3
correctly load global variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10315
diff
changeset
|
150 sr.clear (); |
d406d91aa9c3
correctly load global variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10315
diff
changeset
|
151 sr.mark_global (); |
d406d91aa9c3
correctly load global variables
Jaroslav Hajek <highegg@gmail.com>
parents:
10315
diff
changeset
|
152 sr.varref () = val; |
604 | 153 } |
154 else | |
7336 | 155 symbol_table::varref (name) = val; |
604 | 156 } |
157 | |
3019 | 158 // Return TRUE if NAME matches one of the given globbing PATTERNS. |
604 | 159 |
3013 | 160 static bool |
3769 | 161 matches_patterns (const string_vector& patterns, int pat_idx, |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
162 int num_pat, const std::string& name) |
604 | 163 { |
1755 | 164 for (int i = pat_idx; i < num_pat; i++) |
604 | 165 { |
1792 | 166 glob_match pattern (patterns[i]); |
3013 | 167 |
1792 | 168 if (pattern.match (name)) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
169 return true; |
604 | 170 } |
3688 | 171 |
3013 | 172 return false; |
604 | 173 } |
174 | |
4329 | 175 int |
3523 | 176 read_binary_file_header (std::istream& is, bool& swap, |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
177 oct_mach_info::float_format& flt_fmt, bool quiet) |
604 | 178 { |
3552 | 179 const int magic_len = 10; |
180 char magic[magic_len+1]; | |
5760 | 181 is.read (magic, magic_len); |
604 | 182 magic[magic_len] = '\0'; |
3688 | 183 |
604 | 184 if (strncmp (magic, "Octave-1-L", magic_len) == 0) |
2318 | 185 swap = oct_mach_info::words_big_endian (); |
604 | 186 else if (strncmp (magic, "Octave-1-B", magic_len) == 0) |
2318 | 187 swap = ! oct_mach_info::words_big_endian (); |
604 | 188 else |
189 { | |
190 if (! quiet) | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
191 error ("load: unable to read read binary file"); |
604 | 192 return -1; |
193 } | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
194 |
604 | 195 char tmp = 0; |
5760 | 196 is.read (&tmp, 1); |
604 | 197 |
2318 | 198 flt_fmt = mopt_digit_to_float_format (tmp); |
199 | |
4574 | 200 if (flt_fmt == oct_mach_info::flt_fmt_unknown) |
604 | 201 { |
202 if (! quiet) | |
203 error ("load: unrecognized binary format!"); | |
3688 | 204 |
604 | 205 return -1; |
206 } | |
207 | |
208 return 0; | |
209 } | |
210 | |
5269 | 211 #ifdef HAVE_ZLIB |
212 static bool | |
213 check_gzip_magic (const std::string& fname) | |
214 { | |
215 bool retval = false; | |
216 std::ifstream file (fname.c_str ()); | |
217 OCTAVE_LOCAL_BUFFER (unsigned char, magic, 2); | |
218 | |
5760 | 219 if (file.read (reinterpret_cast<char *> (magic), 2) && magic[0] == 0x1f && |
5269 | 220 magic[1] == 0x8b) |
221 retval = true; | |
222 | |
223 file.close (); | |
224 return retval; | |
225 } | |
226 #endif | |
227 | |
604 | 228 static load_save_format |
6625 | 229 get_file_format (std::istream& file, const std::string& filename) |
604 | 230 { |
231 load_save_format retval = LS_UNKNOWN; | |
232 | |
4574 | 233 oct_mach_info::float_format flt_fmt = oct_mach_info::flt_fmt_unknown; |
604 | 234 |
3019 | 235 bool swap = false; |
236 | |
237 if (read_binary_file_header (file, swap, flt_fmt, true) == 0) | |
604 | 238 retval = LS_BINARY; |
239 else | |
240 { | |
6202 | 241 file.clear (); |
3538 | 242 file.seekg (0, std::ios::beg); |
604 | 243 |
5828 | 244 int32_t mopt, nr, nc, imag, len; |
1180 | 245 |
246 int err = read_mat_file_header (file, swap, mopt, nr, nc, imag, len, 1); | |
247 | |
248 if (! err) | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
249 retval = LS_MAT_BINARY; |
604 | 250 else |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
251 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
252 file.clear (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
253 file.seekg (0, std::ios::beg); |
604 | 254 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
255 err = read_mat5_binary_file_header (file, swap, true, filename); |
3688 | 256 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
257 if (! err) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
258 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
259 file.clear (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
260 file.seekg (0, std::ios::beg); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
261 retval = LS_MAT5_BINARY; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
262 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
263 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
264 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
265 file.clear (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
266 file.seekg (0, std::ios::beg); |
3688 | 267 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
268 std::string tmp = extract_keyword (file, "name"); |
4171 | 269 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
270 if (! tmp.empty ()) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
271 retval = LS_ASCII; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
272 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
273 } |
604 | 274 } |
275 | |
5269 | 276 return retval; |
277 } | |
5977 | 278 |
5269 | 279 static load_save_format |
280 get_file_format (const std::string& fname, const std::string& orig_fname, | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
281 bool &use_zlib) |
5269 | 282 { |
283 load_save_format retval = LS_UNKNOWN; | |
284 | |
285 #ifdef HAVE_HDF5 | |
286 // check this before we open the file | |
287 if (H5Fis_hdf5 (fname.c_str ()) > 0) | |
288 return LS_HDF5; | |
289 #endif /* HAVE_HDF5 */ | |
604 | 290 |
5269 | 291 std::ifstream file (fname.c_str ()); |
292 use_zlib = false; | |
293 | |
294 if (file) | |
295 { | |
6625 | 296 retval = get_file_format (file, orig_fname); |
5269 | 297 file.close (); |
5977 | 298 |
5383 | 299 #ifdef HAVE_ZLIB |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
300 if (retval == LS_UNKNOWN && check_gzip_magic (fname)) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
301 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
302 gzifstream gzfile (fname.c_str ()); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
303 use_zlib = true; |
5269 | 304 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
305 if (gzfile) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
306 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
307 retval = get_file_format (gzfile, orig_fname); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
308 gzfile.close (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
309 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
310 } |
5977 | 311 #endif |
5269 | 312 |
313 if (retval == LS_UNKNOWN) | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
314 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
315 // Try reading the file as numbers only, determining the |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
316 // number of rows and columns from the data. We don't |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
317 // even bother to check to see if the first item in the |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
318 // file is a number, so that get_complete_line() can |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
319 // skip any comments that might appear at the top of the |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
320 // file. |
5269 | 321 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
322 retval = LS_MAT_ASCII; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
323 } |
5269 | 324 } |
325 else | |
5369 | 326 gripe_file_open ("load", orig_fname); |
604 | 327 |
328 return retval; | |
329 } | |
330 | |
4329 | 331 octave_value |
7336 | 332 do_load (std::istream& stream, const std::string& orig_fname, |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
333 load_save_format format, oct_mach_info::float_format flt_fmt, |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
334 bool list_only, bool swap, bool verbose, |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
335 const string_vector& argv, int argv_idx, int argc, int nargout) |
604 | 336 { |
3727 | 337 octave_value retval; |
338 | |
11059
4ffa19147604
replace Octave_map->octave_scalar_map in help.cc and load-save.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
10846
diff
changeset
|
339 octave_scalar_map retstruct; |
604 | 340 |
5765 | 341 std::ostringstream output_buf; |
7779
791231dac333
Add regexp matching to Fwho and Fclear
David Bateman <dbateman@free.fr>
parents:
7767
diff
changeset
|
342 std::list<std::string> symbol_names; |
4051 | 343 |
5754 | 344 octave_idx_type count = 0; |
4051 | 345 |
604 | 346 for (;;) |
347 { | |
3019 | 348 bool global = false; |
2086 | 349 octave_value tc; |
604 | 350 |
4171 | 351 std::string name; |
352 std::string doc; | |
604 | 353 |
8425
2e777f5135a3
support -tabs option for save -ascii
Jaroslav Hajek <highegg@gmail.com>
parents:
8418
diff
changeset
|
354 switch (format.type) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
355 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
356 case LS_ASCII: |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
357 name = read_ascii_data (stream, orig_fname, global, tc, count); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
358 break; |
604 | 359 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
360 case LS_BINARY: |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
361 name = read_binary_data (stream, swap, flt_fmt, orig_fname, |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
362 global, tc, doc); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
363 break; |
604 | 364 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
365 case LS_MAT_ASCII: |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
366 name = read_mat_ascii_data (stream, orig_fname, tc); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
367 break; |
2511 | 368 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
369 case LS_MAT_BINARY: |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
370 name = read_mat_binary_data (stream, orig_fname, tc); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
371 break; |
604 | 372 |
3687 | 373 #ifdef HAVE_HDF5 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
374 case LS_HDF5: |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
375 name = read_hdf5_data (stream, orig_fname, global, tc, doc); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
376 break; |
3687 | 377 #endif /* HAVE_HDF5 */ |
378 | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
379 case LS_MAT5_BINARY: |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
380 case LS_MAT7_BINARY: |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
381 name = read_mat5_binary_element (stream, orig_fname, swap, |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
382 global, tc); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
383 break; |
3688 | 384 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
385 default: |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
386 gripe_unrecognized_data_fmt ("load"); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
387 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
388 } |
604 | 389 |
4171 | 390 if (error_state || stream.eof () || name.empty ()) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
391 break; |
4171 | 392 else if (! error_state && ! name.empty ()) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
393 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
394 if (tc.is_defined ()) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
395 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
396 if (format == LS_MAT_ASCII && argv_idx < argc) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
397 warning ("load: loaded ASCII file `%s' -- ignoring extra args", |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
398 orig_fname.c_str ()); |
3136 | 399 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
400 if (format == LS_MAT_ASCII |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
401 || argv_idx == argc |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
402 || matches_patterns (argv, argv_idx, argc, name)) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
403 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
404 count++; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
405 if (list_only) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
406 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
407 if (verbose) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
408 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
409 if (count == 1) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
410 output_buf |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
411 << "type rows cols name\n" |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
412 << "==== ==== ==== ====\n"; |
621 | 413 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
414 output_buf |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
415 << std::setiosflags (std::ios::left) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
416 << std::setw (16) << tc.type_name () . c_str () |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
417 << std::setiosflags (std::ios::right) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
418 << std::setw (7) << tc.rows () |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
419 << std::setw (7) << tc.columns () |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
420 << " " << name << "\n"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
421 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
422 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
423 symbol_names.push_back (name); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
424 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
425 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
426 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
427 if (nargout == 1) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
428 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
429 if (format == LS_MAT_ASCII) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
430 retval = tc; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
431 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
432 retstruct.assign (name, tc); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
433 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
434 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
435 install_loaded_variable (name, tc, global, doc); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
436 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
437 } |
2511 | 438 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
439 // Only attempt to read one item from a headless text file. |
2511 | 440 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
441 if (format == LS_MAT_ASCII) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
442 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
443 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
444 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
445 error ("load: unable to load variable `%s'", name.c_str ()); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
446 } |
604 | 447 else |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
448 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
449 if (count == 0) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
450 error ("load: are you sure `%s' is an Octave data file?", |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
451 orig_fname.c_str ()); |
604 | 452 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
453 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
454 } |
604 | 455 } |
456 | |
621 | 457 if (list_only && count) |
458 { | |
7779
791231dac333
Add regexp matching to Fwho and Fclear
David Bateman <dbateman@free.fr>
parents:
7767
diff
changeset
|
459 if (verbose) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
460 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
461 std::string msg = output_buf.str (); |
2095 | 462 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
463 if (nargout > 0) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
464 retval = msg; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
465 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
466 octave_stdout << msg; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
467 } |
621 | 468 else |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
469 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
470 if (nargout > 0) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
471 retval = Cell (string_vector (symbol_names)); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
472 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
473 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
474 string_vector names (symbol_names); |
7779
791231dac333
Add regexp matching to Fwho and Fclear
David Bateman <dbateman@free.fr>
parents:
7767
diff
changeset
|
475 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
476 names.list_in_columns (octave_stdout); |
7779
791231dac333
Add regexp matching to Fwho and Fclear
David Bateman <dbateman@free.fr>
parents:
7767
diff
changeset
|
477 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
478 octave_stdout << "\n"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
479 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
480 } |
621 | 481 } |
6639 | 482 else if (retstruct.nfields () != 0) |
3727 | 483 retval = retstruct; |
621 | 484 |
863 | 485 return retval; |
486 } | |
487 | |
6159 | 488 std::string |
489 find_file_to_load (const std::string& name, const std::string& orig_name) | |
490 { | |
491 std::string fname = name; | |
492 | |
6838 | 493 if (! (octave_env::absolute_pathname (fname) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
494 || octave_env::rooted_relative_pathname (fname))) |
6159 | 495 { |
496 file_stat fs (fname); | |
497 | |
6584 | 498 if (! (fs.exists () && fs.is_reg ())) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
499 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
500 std::string tmp |
10250 | 501 = octave_env::make_absolute (load_path::find_file (fname)); |
6159 | 502 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
503 if (! tmp.empty ()) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
504 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
505 warning_with_id ("Octave:load-file-in-path", |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
506 "load: file found in load path"); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
507 fname = tmp; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
508 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
509 } |
6159 | 510 } |
511 | |
6838 | 512 size_t dot_pos = fname.rfind ("."); |
8007
a2ab20ba78f7
make file_ops a proper singleton class
John W. Eaton <jwe@octave.org>
parents:
7819
diff
changeset
|
513 size_t sep_pos = fname.find_last_of (file_ops::dir_sep_chars ()); |
6838 | 514 |
8021 | 515 if (dot_pos == std::string::npos |
516 || (sep_pos != std::string::npos && dot_pos < sep_pos)) | |
6159 | 517 { |
6838 | 518 // Either no '.' in name or no '.' appears after last directory |
519 // separator. | |
520 | |
6159 | 521 file_stat fs (fname); |
522 | |
6584 | 523 if (! (fs.exists () && fs.is_reg ())) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
524 fname = find_file_to_load (fname + ".mat", orig_name); |
6159 | 525 } |
526 else | |
527 { | |
528 file_stat fs (fname); | |
529 | |
6584 | 530 if (! (fs.exists () && fs.is_reg ())) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
531 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
532 fname = ""; |
6159 | 533 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
534 error ("load: unable to find file %s", orig_name.c_str ()); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
535 } |
6159 | 536 } |
537 | |
538 return fname; | |
539 } | |
540 | |
541 | |
3687 | 542 // HDF5 load/save documentation is included in the Octave manual |
543 // regardless, but if HDF5 is not linked in we also include a | |
544 // sentence noting this, so the user understands that the features | |
545 // aren't available. Define a macro for this sentence: | |
546 | |
547 #ifdef HAVE_HDF5 | |
548 #define HAVE_HDF5_HELP_STRING "" | |
549 #else /* ! HAVE_HDF5 */ | |
550 #define HAVE_HDF5_HELP_STRING "\n\ | |
551 HDF5 load and save are not available, as this Octave executable was\n\ | |
552 not linked with the HDF5 library." | |
553 #endif /* ! HAVE HDF5 */ | |
554 | |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8676
diff
changeset
|
555 DEFUN (load, args, nargout, |
3372 | 556 "-*- texinfo -*-\n\ |
9306
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
557 @deffn {Command} load file\n\ |
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
558 @deffnx {Command} load options file\n\ |
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
559 @deffnx {Command} load options file v1 v2 @dots{}\n\ |
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
560 @deffnx {Command} S = load(\"options\", \"file\", \"v1\", \"v2\", @dots{})\n\ |
7247 | 561 Load the named variables @var{v1}, @var{v2}, @dots{}, from the file\n\ |
9306
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
562 @var{file}. If no variables are specified then all variables found in the\n\ |
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
563 file will be loaded. As with @code{save}, the list of variables to extract\n\ |
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
564 can be full names or use a pattern syntax. The format of the file is\n\ |
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
565 automatically detected but may be overridden by supplying the appropriate\n\ |
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
566 option.\n\ |
863 | 567 \n\ |
5665 | 568 If load is invoked using the functional form\n\ |
569 \n\ | |
570 @example\n\ | |
7247 | 571 load (\"-option1\", @dots{}, \"file\", \"v1\", @dots{})\n\ |
5665 | 572 @end example\n\ |
573 \n\ | |
574 @noindent\n\ | |
575 then the @var{options}, @var{file}, and variable name arguments\n\ | |
576 (@var{v1}, @dots{}) must be specified as character strings.\n\ | |
577 \n\ | |
3372 | 578 If a variable that is not marked as global is loaded from a file when a\n\ |
579 global symbol with the same name already exists, it is loaded in the\n\ | |
580 global symbol table. Also, if a variable is marked as global in a file\n\ | |
581 and a local symbol exists, the local symbol is moved to the global\n\ | |
9306
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
582 symbol table and given the value from the file.\n\ |
863 | 583 \n\ |
3727 | 584 If invoked with a single output argument, Octave returns data instead\n\ |
585 of inserting variables in the symbol table. If the data file contains\n\ | |
586 only numbers (TAB- or space-delimited columns), a matrix of values is\n\ | |
587 returned. Otherwise, @code{load} returns a structure with members\n\ | |
588 corresponding to the names of the variables in the file.\n\ | |
589 \n\ | |
3372 | 590 The @code{load} command can read data stored in Octave's text and\n\ |
9064
7c02ec148a3c
Check grammar on all .cc files
Rik <rdrider0-list@yahoo.com>
parents:
9039
diff
changeset
|
591 binary formats, and @sc{matlab}'s binary format. If compiled with zlib\n\ |
9306
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
592 support, it can also load gzip-compressed files. It will automatically\n\ |
3372 | 593 detect the type of file and do conversion from different floating point\n\ |
594 formats (currently only IEEE big and little endian, though other formats\n\ | |
9306
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
595 may be added in the future).\n\ |
3372 | 596 \n\ |
597 Valid options for @code{load} are listed in the following table.\n\ | |
863 | 598 \n\ |
3372 | 599 @table @code\n\ |
600 @item -force\n\ | |
9306
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
601 This option is accepted for backward compatibility but is ignored.\n\ |
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
602 Octave now overwrites variables currently in memory with\n\ |
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
603 those of the same name found in the file.\n\ |
3372 | 604 \n\ |
605 @item -ascii\n\ | |
5938 | 606 Force Octave to assume the file contains columns of numbers in text format\n\ |
607 without any header or other information. Data in the file will be loaded\n\ | |
608 as a single numeric matrix with the name of the variable derived from the\n\ | |
609 name of the file.\n\ | |
5197 | 610 \n\ |
3372 | 611 @item -binary\n\ |
612 Force Octave to assume the file is in Octave's binary format.\n\ | |
613 \n\ | |
3687 | 614 @item -hdf5\n\ |
10840 | 615 Force Octave to assume the file is in @sc{hdf5} format.\n\ |
3687 | 616 (HDF5 is a free, portable binary format developed by the National\n\ |
617 Center for Supercomputing Applications at the University of Illinois.)\n\ | |
10840 | 618 Note that Octave can read @sc{hdf5} files not created by itself, but may\n\ |
4687 | 619 skip some datasets in formats that it cannot support.\n" |
3687 | 620 |
621 HAVE_HDF5_HELP_STRING | |
622 | |
623 "\n\ | |
624 @item -import\n\ | |
9306
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
625 This option is accepted for backward compatibility but is ignored.\n\ |
4884 | 626 Octave can now support multi-dimensional HDF data and automatically\n\ |
627 modifies variable names if they are invalid Octave identifiers.\n\ | |
3687 | 628 \n\ |
9306
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
629 @item -mat\n\ |
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
630 @itemx -mat-binary\n\ |
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
631 @itemx -6\n\ |
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
632 @itemx -v6\n\ |
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
633 @itemx -7\n\ |
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
634 @itemx -v7\n\ |
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
635 Force Octave to assume the file is in @sc{matlab}'s version 6 or 7 binary\n\ |
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
636 format.\n\ |
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
637 \n\ |
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
638 @item -mat4-binary\n\ |
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
639 @itemx -4\n\ |
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
640 @itemx -v4\n\ |
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
641 @itemx -V4\n\ |
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
642 Force Octave to assume the file is in the binary format written by\n\ |
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
643 @sc{matlab} version 4.\n\ |
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
644 \n\ |
5198 | 645 @item -text\n\ |
5197 | 646 Force Octave to assume the file is in Octave's text format.\n\ |
3372 | 647 @end table\n\ |
9306
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
648 @seealso{save, dlmwrite, csvwrite, fwrite}\n\ |
3372 | 649 @end deffn") |
863 | 650 { |
2086 | 651 octave_value_list retval; |
863 | 652 |
1755 | 653 int argc = args.length () + 1; |
654 | |
1968 | 655 string_vector argv = args.make_argv ("load"); |
1755 | 656 |
657 if (error_state) | |
658 return retval; | |
863 | 659 |
1358 | 660 // It isn't necessary to have the default load format stored in a |
661 // user preference variable since we can determine the type of file | |
662 // as we are reading. | |
863 | 663 |
664 load_save_format format = LS_UNKNOWN; | |
665 | |
3019 | 666 bool list_only = false; |
667 bool verbose = false; | |
863 | 668 |
1755 | 669 int i; |
670 for (i = 1; i < argc; i++) | |
863 | 671 { |
1755 | 672 if (argv[i] == "-force" || argv[i] == "-f") |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
673 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
674 // Silently ignore this |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
675 // warning ("load: -force ignored"); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
676 } |
1755 | 677 else if (argv[i] == "-list" || argv[i] == "-l") |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
678 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
679 list_only = true; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
680 } |
1755 | 681 else if (argv[i] == "-verbose" || argv[i] == "-v") |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
682 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
683 verbose = true; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
684 } |
1755 | 685 else if (argv[i] == "-ascii" || argv[i] == "-a") |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
686 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
687 format = LS_MAT_ASCII; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
688 } |
1755 | 689 else if (argv[i] == "-binary" || argv[i] == "-b") |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
690 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
691 format = LS_BINARY; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
692 } |
5269 | 693 else if (argv[i] == "-mat-binary" || argv[i] == "-mat" || argv[i] == "-m" |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
694 || argv[i] == "-6" || argv[i] == "-v6") |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
695 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
696 format = LS_MAT5_BINARY; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
697 } |
7819
b7e8ea6a5143
trivial fix option in Fload
Jaroslav Hajek <highegg@gmail.com>
parents:
7779
diff
changeset
|
698 else if (argv[i] == "-7" || argv[i] == "-v7") |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
699 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
700 format = LS_MAT7_BINARY; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
701 } |
5256 | 702 else if (argv[i] == "-mat4-binary" || argv[i] == "-V4" |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
703 || argv[i] == "-v4" || argv[i] == "-4") |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
704 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
705 format = LS_MAT_BINARY; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
706 } |
3687 | 707 else if (argv[i] == "-hdf5" || argv[i] == "-h") |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
708 { |
3687 | 709 #ifdef HAVE_HDF5 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
710 format = LS_HDF5; |
3687 | 711 #else /* ! HAVE_HDF5 */ |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
712 error ("load: octave executable was not linked with HDF5 library"); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
713 return retval; |
3687 | 714 #endif /* ! HAVE_HDF5 */ |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
715 } |
3687 | 716 else if (argv[i] == "-import" || argv[i] == "-i") |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
717 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
718 warning ("load: -import ignored"); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
719 } |
5197 | 720 else if (argv[i] == "-text" || argv[i] == "-t") |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
721 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
722 format = LS_ASCII; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
723 } |
863 | 724 else |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
725 break; |
863 | 726 } |
727 | |
1755 | 728 if (i == argc) |
863 | 729 { |
5823 | 730 print_usage (); |
863 | 731 return retval; |
732 } | |
733 | |
3523 | 734 std::string orig_fname = argv[i]; |
863 | 735 |
4574 | 736 oct_mach_info::float_format flt_fmt = oct_mach_info::flt_fmt_unknown; |
863 | 737 |
3019 | 738 bool swap = false; |
863 | 739 |
1755 | 740 if (argv[i] == "-") |
863 | 741 { |
1755 | 742 i++; |
863 | 743 |
3687 | 744 #ifdef HAVE_HDF5 |
745 if (format == LS_HDF5) | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
746 error ("load: cannot read HDF5 format from stdin"); |
3687 | 747 else |
748 #endif /* HAVE_HDF5 */ | |
863 | 749 if (format != LS_UNKNOWN) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
750 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
751 // FIXME -- if we have already seen EOF on a |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
752 // previous call, how do we fix up the state of std::cin so |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
753 // that we can get additional input? I'm afraid that we |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
754 // can't fix this using std::cin only. |
3531 | 755 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
756 retval = do_load (std::cin, orig_fname, format, flt_fmt, |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
757 list_only, swap, verbose, argv, i, argc, |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
758 nargout); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
759 } |
863 | 760 else |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
761 error ("load: must specify file format if reading from stdin"); |
863 | 762 } |
763 else | |
764 { | |
3523 | 765 std::string fname = file_ops::tilde_expand (argv[i]); |
6159 | 766 |
767 fname = find_file_to_load (fname, orig_fname); | |
863 | 768 |
6159 | 769 if (error_state) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
770 return retval; |
6159 | 771 |
772 bool use_zlib = false; | |
5089 | 773 |
863 | 774 if (format == LS_UNKNOWN) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
775 format = get_file_format (fname, orig_fname, use_zlib); |
863 | 776 |
3687 | 777 #ifdef HAVE_HDF5 |
778 if (format == LS_HDF5) | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
779 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
780 i++; |
3687 | 781 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
782 hdf5_ifstream hdf5_file (fname.c_str ()); |
3687 | 783 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
784 if (hdf5_file.file_id >= 0) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
785 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
786 retval = do_load (hdf5_file, orig_fname, format, |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
787 flt_fmt, list_only, swap, verbose, |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
788 argv, i, argc, nargout); |
4844 | 789 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
790 hdf5_file.close (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
791 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
792 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
793 gripe_file_open ("load", orig_fname); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
794 } |
3687 | 795 else |
796 #endif /* HAVE_HDF5 */ | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
797 // don't insert any statements here; the "else" above has to |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
798 // go with the "if" below!!!!! |
863 | 799 if (format != LS_UNKNOWN) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
800 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
801 i++; |
863 | 802 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
803 // Always open in binary mode and handle various |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
804 // line-endings explicitly. |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
805 std::ios::openmode mode = std::ios::in | std::ios::binary; |
863 | 806 |
5269 | 807 #ifdef HAVE_ZLIB |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
808 if (use_zlib) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
809 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
810 gzifstream file (fname.c_str (), mode); |
863 | 811 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
812 if (file) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
813 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
814 if (format == LS_BINARY) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
815 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
816 if (read_binary_file_header (file, swap, flt_fmt) < 0) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
817 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
818 if (file) file.close (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
819 return retval; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
820 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
821 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
822 else if (format == LS_MAT5_BINARY |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
823 || format == LS_MAT7_BINARY) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
824 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
825 if (read_mat5_binary_file_header (file, swap, false, orig_fname) < 0) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
826 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
827 if (file) file.close (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
828 return retval; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
829 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
830 } |
5269 | 831 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
832 retval = do_load (file, orig_fname, format, |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
833 flt_fmt, list_only, swap, verbose, |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
834 argv, i, argc, nargout); |
5269 | 835 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
836 file.close (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
837 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
838 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
839 gripe_file_open ("load", orig_fname); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
840 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
841 else |
5269 | 842 #endif |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
843 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
844 std::ifstream file (fname.c_str (), mode); |
5269 | 845 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
846 if (file) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
847 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
848 if (format == LS_BINARY) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
849 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
850 if (read_binary_file_header (file, swap, flt_fmt) < 0) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
851 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
852 if (file) file.close (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
853 return retval; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
854 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
855 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
856 else if (format == LS_MAT5_BINARY |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
857 || format == LS_MAT7_BINARY) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
858 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
859 if (read_mat5_binary_file_header (file, swap, false, orig_fname) < 0) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
860 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
861 if (file) file.close (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
862 return retval; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
863 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
864 } |
5269 | 865 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
866 retval = do_load (file, orig_fname, format, |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
867 flt_fmt, list_only, swap, verbose, |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
868 argv, i, argc, nargout); |
5269 | 869 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
870 file.close (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
871 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
872 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
873 error ("load: unable open input file `%s'", |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
874 orig_fname.c_str ()); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
875 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
876 } |
863 | 877 } |
5269 | 878 |
604 | 879 return retval; |
880 } | |
881 | |
3019 | 882 // Return TRUE if PATTERN has any special globbing chars in it. |
883 | |
884 static bool | |
3523 | 885 glob_pattern_p (const std::string& pattern) |
604 | 886 { |
887 int open = 0; | |
888 | |
1755 | 889 int len = pattern.length (); |
890 | |
891 for (int i = 0; i < len; i++) | |
604 | 892 { |
1755 | 893 char c = pattern[i]; |
894 | |
604 | 895 switch (c) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
896 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
897 case '?': |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
898 case '*': |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
899 return true; |
604 | 900 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
901 case '[': // Only accept an open brace if there is a close |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
902 open++; // brace to match it. Bracket expressions must be |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
903 continue; // complete, according to Posix.2 |
604 | 904 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
905 case ']': |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
906 if (open) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
907 return true; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
908 continue; |
4402 | 909 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
910 case '\\': |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
911 if (i == len - 1) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
912 return false; |
604 | 913 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
914 default: |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
915 continue; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
916 } |
604 | 917 } |
918 | |
3019 | 919 return false; |
604 | 920 } |
921 | |
4791 | 922 static void |
923 do_save (std::ostream& os, const octave_value& tc, | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
924 const std::string& name, const std::string& help, |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
925 bool global, load_save_format fmt, bool save_as_floats) |
604 | 926 { |
8425
2e777f5135a3
support -tabs option for save -ascii
Jaroslav Hajek <highegg@gmail.com>
parents:
8418
diff
changeset
|
927 switch (fmt.type) |
604 | 928 { |
929 case LS_ASCII: | |
6974 | 930 save_ascii_data (os, tc, name, global, 0); |
604 | 931 break; |
932 | |
933 case LS_BINARY: | |
630 | 934 save_binary_data (os, tc, name, help, global, save_as_floats); |
604 | 935 break; |
936 | |
5938 | 937 case LS_MAT_ASCII: |
8425
2e777f5135a3
support -tabs option for save -ascii
Jaroslav Hajek <highegg@gmail.com>
parents:
8418
diff
changeset
|
938 if (! save_mat_ascii_data (os, tc, fmt.opts & LS_MAT_ASCII_LONG ? 16 : 8, |
2e777f5135a3
support -tabs option for save -ascii
Jaroslav Hajek <highegg@gmail.com>
parents:
8418
diff
changeset
|
939 fmt.opts & LS_MAT_ASCII_TABS)) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
940 warning ("save: unable to save %s in ASCII format", name.c_str ()); |
5938 | 941 break; |
942 | |
667 | 943 case LS_MAT_BINARY: |
944 save_mat_binary_data (os, tc, name); | |
945 break; | |
946 | |
3687 | 947 #ifdef HAVE_HDF5 |
948 case LS_HDF5: | |
949 save_hdf5_data (os, tc, name, help, global, save_as_floats); | |
950 break; | |
951 #endif /* HAVE_HDF5 */ | |
952 | |
3688 | 953 case LS_MAT5_BINARY: |
5269 | 954 save_mat5_binary_element (os, tc, name, global, false, save_as_floats); |
955 break; | |
956 | |
957 case LS_MAT7_BINARY: | |
958 save_mat5_binary_element (os, tc, name, global, true, save_as_floats); | |
3688 | 959 break; |
960 | |
604 | 961 default: |
775 | 962 gripe_unrecognized_data_fmt ("save"); |
604 | 963 break; |
964 } | |
965 } | |
966 | |
4791 | 967 // Save the info from SR on stream OS in the format specified by FMT. |
968 | |
969 void | |
7336 | 970 do_save (std::ostream& os, const symbol_table::symbol_record& sr, |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
971 load_save_format fmt, bool save_as_floats) |
4791 | 972 { |
7336 | 973 octave_value val = sr.varval (); |
4791 | 974 |
7336 | 975 if (val.is_defined ()) |
4791 | 976 { |
7336 | 977 std::string name = sr.name (); |
978 std::string help; | |
979 bool global = sr.is_global (); | |
4791 | 980 |
7336 | 981 do_save (os, val, name, help, global, fmt, save_as_floats); |
4791 | 982 } |
983 } | |
984 | |
7635
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
985 // save fields of a scalar structure STR matching PATTERN on stream OS |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
986 // in the format specified by FMT. |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
987 |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
988 static size_t |
11059
4ffa19147604
replace Octave_map->octave_scalar_map in help.cc and load-save.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
10846
diff
changeset
|
989 save_fields (std::ostream& os, const octave_scalar_map& m, |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
990 const std::string& pattern, |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
991 load_save_format fmt, bool save_as_floats) |
7635
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
992 { |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
993 glob_match pat (pattern); |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
994 |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
995 size_t saved = 0; |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
996 |
11059
4ffa19147604
replace Octave_map->octave_scalar_map in help.cc and load-save.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
10846
diff
changeset
|
997 for (octave_scalar_map::const_iterator p = m.begin (); p != m.end (); p++) |
7635
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
998 { |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
999 std::string empty_str; |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1000 |
11059
4ffa19147604
replace Octave_map->octave_scalar_map in help.cc and load-save.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
10846
diff
changeset
|
1001 if (pat.match(m.key (p))) |
7635
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1002 { |
11059
4ffa19147604
replace Octave_map->octave_scalar_map in help.cc and load-save.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
10846
diff
changeset
|
1003 do_save (os, m.contents (p), m.key (p), empty_str, |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1004 0, fmt, save_as_floats); |
7635
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1005 |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1006 saved++; |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1007 } |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1008 } |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1009 |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1010 return saved; |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1011 } |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1012 |
604 | 1013 // Save variables with names matching PATTERN on stream OS in the |
5794 | 1014 // format specified by FMT. |
604 | 1015 |
7336 | 1016 static size_t |
5794 | 1017 save_vars (std::ostream& os, const std::string& pattern, |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1018 load_save_format fmt, bool save_as_floats) |
604 | 1019 { |
7336 | 1020 std::list<symbol_table::symbol_record> vars = symbol_table::glob (pattern); |
1021 | |
1022 size_t saved = 0; | |
3355 | 1023 |
7336 | 1024 typedef std::list<symbol_table::symbol_record>::const_iterator const_vars_iterator; |
3355 | 1025 |
7336 | 1026 for (const_vars_iterator p = vars.begin (); p != vars.end (); p++) |
620 | 1027 { |
7336 | 1028 do_save (os, *p, fmt, save_as_floats); |
620 | 1029 |
1030 if (error_state) | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1031 break; |
7336 | 1032 |
1033 saved++; | |
620 | 1034 } |
604 | 1035 |
1036 return saved; | |
1037 } | |
1038 | |
8034
f61bd8e0d682
fix default_save_options parsing and allow mixing options with other arguments.
Jaroslav Hajek <highegg@gmail.com>
parents:
8021
diff
changeset
|
1039 static string_vector |
f61bd8e0d682
fix default_save_options parsing and allow mixing options with other arguments.
Jaroslav Hajek <highegg@gmail.com>
parents:
8021
diff
changeset
|
1040 parse_save_options (const string_vector &argv, |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1041 load_save_format &format, bool &append, |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1042 bool &save_as_floats, bool &use_zlib) |
604 | 1043 { |
8034
f61bd8e0d682
fix default_save_options parsing and allow mixing options with other arguments.
Jaroslav Hajek <highegg@gmail.com>
parents:
8021
diff
changeset
|
1044 string_vector retval; |
f61bd8e0d682
fix default_save_options parsing and allow mixing options with other arguments.
Jaroslav Hajek <highegg@gmail.com>
parents:
8021
diff
changeset
|
1045 int argc = argv.length (); |
f61bd8e0d682
fix default_save_options parsing and allow mixing options with other arguments.
Jaroslav Hajek <highegg@gmail.com>
parents:
8021
diff
changeset
|
1046 |
8425
2e777f5135a3
support -tabs option for save -ascii
Jaroslav Hajek <highegg@gmail.com>
parents:
8418
diff
changeset
|
1047 bool do_double = false, do_tabs = false; |
8418
679c22082ac7
handle -double option for save
John W. Eaton <jwe@octave.org>
parents:
8377
diff
changeset
|
1048 |
8034
f61bd8e0d682
fix default_save_options parsing and allow mixing options with other arguments.
Jaroslav Hajek <highegg@gmail.com>
parents:
8021
diff
changeset
|
1049 for (int i = 0; i < argc; i++) |
5284 | 1050 { |
1051 if (argv[i] == "-append") | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1052 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1053 append = true; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1054 } |
5284 | 1055 else if (argv[i] == "-ascii" || argv[i] == "-a") |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1056 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1057 format = LS_MAT_ASCII; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1058 } |
8418
679c22082ac7
handle -double option for save
John W. Eaton <jwe@octave.org>
parents:
8377
diff
changeset
|
1059 else if (argv[i] == "-double") |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1060 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1061 do_double = true; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1062 } |
8425
2e777f5135a3
support -tabs option for save -ascii
Jaroslav Hajek <highegg@gmail.com>
parents:
8418
diff
changeset
|
1063 else if (argv[i] == "-tabs") |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1064 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1065 do_tabs = true; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1066 } |
5284 | 1067 else if (argv[i] == "-text" || argv[i] == "-t") |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1068 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1069 format = LS_ASCII; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1070 } |
5284 | 1071 else if (argv[i] == "-binary" || argv[i] == "-b") |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1072 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1073 format = LS_BINARY; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1074 } |
5284 | 1075 else if (argv[i] == "-hdf5" || argv[i] == "-h") |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1076 { |
3687 | 1077 #ifdef HAVE_HDF5 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1078 format = LS_HDF5; |
5284 | 1079 #else /* ! HAVE_HDF5 */ |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1080 error ("save: octave executable was not linked with HDF5 library"); |
5284 | 1081 #endif /* ! HAVE_HDF5 */ |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1082 } |
5284 | 1083 else if (argv[i] == "-mat-binary" || argv[i] == "-mat" |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1084 || argv[i] == "-m" || argv[i] == "-6" || argv[i] == "-v6" |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1085 || argv[i] == "-V6") |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1086 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1087 format = LS_MAT5_BINARY; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1088 } |
5284 | 1089 #ifdef HAVE_ZLIB |
1090 else if (argv[i] == "-mat7-binary" || argv[i] == "-7" | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1091 || argv[i] == "-v7" || argv[i] == "-V7") |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1092 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1093 format = LS_MAT7_BINARY; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1094 } |
5284 | 1095 #endif |
1096 else if (argv[i] == "-mat4-binary" || argv[i] == "-V4" | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1097 || argv[i] == "-v4" || argv[i] == "-4") |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1098 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1099 format = LS_MAT_BINARY; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1100 } |
5284 | 1101 else if (argv[i] == "-float-binary" || argv[i] == "-f") |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1102 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1103 format = LS_BINARY; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1104 save_as_floats = true; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1105 } |
5284 | 1106 else if (argv[i] == "-float-hdf5") |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1107 { |
5284 | 1108 #ifdef HAVE_HDF5 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1109 format = LS_HDF5; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1110 save_as_floats = true; |
5284 | 1111 #else /* ! HAVE_HDF5 */ |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1112 error ("save: octave executable was not linked with HDF5 library"); |
5284 | 1113 #endif /* ! HAVE_HDF5 */ |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1114 } |
5284 | 1115 #ifdef HAVE_ZLIB |
1116 else if (argv[i] == "-zip" || argv[i] == "-z") | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1117 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1118 use_zlib = true; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1119 } |
5284 | 1120 #endif |
1121 else | |
8034
f61bd8e0d682
fix default_save_options parsing and allow mixing options with other arguments.
Jaroslav Hajek <highegg@gmail.com>
parents:
8021
diff
changeset
|
1122 retval.append (argv[i]); |
5284 | 1123 } |
1124 | |
8418
679c22082ac7
handle -double option for save
John W. Eaton <jwe@octave.org>
parents:
8377
diff
changeset
|
1125 if (do_double) |
679c22082ac7
handle -double option for save
John W. Eaton <jwe@octave.org>
parents:
8377
diff
changeset
|
1126 { |
679c22082ac7
handle -double option for save
John W. Eaton <jwe@octave.org>
parents:
8377
diff
changeset
|
1127 if (format == LS_MAT_ASCII) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1128 format.opts |= LS_MAT_ASCII_LONG; |
8418
679c22082ac7
handle -double option for save
John W. Eaton <jwe@octave.org>
parents:
8377
diff
changeset
|
1129 else |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1130 warning ("save: \"-double\" option only has an effect with \"-ascii\""); |
8418
679c22082ac7
handle -double option for save
John W. Eaton <jwe@octave.org>
parents:
8377
diff
changeset
|
1131 } |
679c22082ac7
handle -double option for save
John W. Eaton <jwe@octave.org>
parents:
8377
diff
changeset
|
1132 |
8425
2e777f5135a3
support -tabs option for save -ascii
Jaroslav Hajek <highegg@gmail.com>
parents:
8418
diff
changeset
|
1133 if (do_tabs) |
2e777f5135a3
support -tabs option for save -ascii
Jaroslav Hajek <highegg@gmail.com>
parents:
8418
diff
changeset
|
1134 { |
2e777f5135a3
support -tabs option for save -ascii
Jaroslav Hajek <highegg@gmail.com>
parents:
8418
diff
changeset
|
1135 if (format == LS_MAT_ASCII) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1136 format.opts |= LS_MAT_ASCII_TABS; |
8425
2e777f5135a3
support -tabs option for save -ascii
Jaroslav Hajek <highegg@gmail.com>
parents:
8418
diff
changeset
|
1137 else |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1138 warning ("save: \"-tabs\" option only has an effect with \"-ascii\""); |
8425
2e777f5135a3
support -tabs option for save -ascii
Jaroslav Hajek <highegg@gmail.com>
parents:
8418
diff
changeset
|
1139 } |
2e777f5135a3
support -tabs option for save -ascii
Jaroslav Hajek <highegg@gmail.com>
parents:
8418
diff
changeset
|
1140 |
8034
f61bd8e0d682
fix default_save_options parsing and allow mixing options with other arguments.
Jaroslav Hajek <highegg@gmail.com>
parents:
8021
diff
changeset
|
1141 return retval; |
5284 | 1142 } |
1143 | |
8034
f61bd8e0d682
fix default_save_options parsing and allow mixing options with other arguments.
Jaroslav Hajek <highegg@gmail.com>
parents:
8021
diff
changeset
|
1144 static string_vector |
5284 | 1145 parse_save_options (const std::string &arg, load_save_format &format, |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1146 bool &append, bool &save_as_floats, |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1147 bool &use_zlib) |
5284 | 1148 { |
5765 | 1149 std::istringstream is (arg); |
5284 | 1150 std::string str; |
1151 string_vector argv; | |
1152 | |
5765 | 1153 while (! is.eof ()) |
5284 | 1154 { |
1155 is >> str; | |
1156 argv.append (str); | |
1157 } | |
1158 | |
8034
f61bd8e0d682
fix default_save_options parsing and allow mixing options with other arguments.
Jaroslav Hajek <highegg@gmail.com>
parents:
8021
diff
changeset
|
1159 return parse_save_options (argv, format, append, save_as_floats, |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1160 use_zlib); |
604 | 1161 } |
1162 | |
4329 | 1163 void |
3523 | 1164 write_header (std::ostream& os, load_save_format format) |
863 | 1165 { |
8425
2e777f5135a3
support -tabs option for save -ascii
Jaroslav Hajek <highegg@gmail.com>
parents:
8418
diff
changeset
|
1166 switch (format.type) |
863 | 1167 { |
3185 | 1168 case LS_BINARY: |
1169 { | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1170 os << (oct_mach_info::words_big_endian () |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1171 ? "Octave-1-B" : "Octave-1-L"); |
3185 | 1172 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1173 oct_mach_info::float_format flt_fmt = |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1174 oct_mach_info::native_float_format (); |
3185 | 1175 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1176 char tmp = static_cast<char> (float_format_to_mopt_digit (flt_fmt)); |
3185 | 1177 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1178 os.write (&tmp, 1); |
3185 | 1179 } |
3688 | 1180 break; |
1181 | |
1182 case LS_MAT5_BINARY: | |
5269 | 1183 case LS_MAT7_BINARY: |
3688 | 1184 { |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1185 char const * versionmagic; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1186 int16_t number = *(reinterpret_cast<const int16_t *>("\x00\x01")); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1187 struct tm bdt; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1188 time_t now; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1189 char headertext[128]; |
3688 | 1190 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1191 time (&now); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1192 bdt = *gmtime (&now); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1193 memset (headertext, ' ', 124); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1194 // ISO 8601 format date |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1195 nstrftime (headertext, 124, "MATLAB 5.0 MAT-file, written by Octave " |
9947
31436dcf7d0f
call nstrftime, not my_strftime
John W. Eaton <jwe@octave.org>
parents:
9946
diff
changeset
|
1196 OCTAVE_VERSION ", %Y-%m-%d %T UTC", &bdt, 1, 0); |
3688 | 1197 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1198 // The first pair of bytes give the version of the MAT file |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1199 // format. The second pair of bytes form a magic number which |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1200 // signals a MAT file. MAT file data are always written in |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1201 // native byte order. The order of the bytes in the second |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1202 // pair indicates whether the file was written by a big- or |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1203 // little-endian machine. However, the version number is |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1204 // written in the *opposite* byte order from everything else! |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1205 if (number == 1) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1206 versionmagic = "\x01\x00\x4d\x49"; // this machine is big endian |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1207 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1208 versionmagic = "\x00\x01\x49\x4d"; // this machine is little endian |
3688 | 1209 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1210 memcpy (headertext+124, versionmagic, 4); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1211 os.write (headertext, 128); |
3688 | 1212 } |
1213 | |
1214 break; | |
3185 | 1215 |
3687 | 1216 #ifdef HAVE_HDF5 |
1217 case LS_HDF5: | |
1218 #endif /* HAVE_HDF5 */ | |
3185 | 1219 case LS_ASCII: |
1220 { | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1221 octave_localtime now; |
3709 | 1222 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1223 std::string comment_string = now.strftime (Vsave_header_format_string); |
3709 | 1224 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1225 if (! comment_string.empty ()) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1226 { |
3687 | 1227 #ifdef HAVE_HDF5 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1228 if (format == LS_HDF5) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1229 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1230 hdf5_ofstream& hs = dynamic_cast<hdf5_ofstream&> (os); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1231 H5Gset_comment (hs.file_id, "/", comment_string.c_str ()); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1232 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1233 else |
3687 | 1234 #endif /* HAVE_HDF5 */ |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1235 os << comment_string << "\n"; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1236 } |
3185 | 1237 } |
1238 break; | |
1239 | |
1240 default: | |
1241 break; | |
863 | 1242 } |
1243 } | |
1244 | |
1245 static void | |
3769 | 1246 save_vars (const string_vector& argv, int argv_idx, int argc, |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1247 std::ostream& os, load_save_format fmt, |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1248 bool save_as_floats, bool write_header_info) |
863 | 1249 { |
3185 | 1250 if (write_header_info) |
1251 write_header (os, fmt); | |
863 | 1252 |
1755 | 1253 if (argv_idx == argc) |
863 | 1254 { |
5794 | 1255 save_vars (os, "*", fmt, save_as_floats); |
863 | 1256 } |
7635
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1257 else if (argv[argv_idx] == "-struct") |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1258 { |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1259 if (++argv_idx >= argc) |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1260 { |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1261 error ("save: missing struct name"); |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1262 return; |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1263 } |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1264 |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1265 std::string struct_name = argv[argv_idx]; |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1266 |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1267 if (! symbol_table::is_variable (struct_name)) |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1268 { |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1269 error ("save: no such variable: `%s'", struct_name.c_str ()); |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1270 return; |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1271 } |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1272 |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1273 octave_value struct_var = symbol_table::varref (struct_name); |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1274 |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1275 if (! struct_var.is_map () || struct_var.numel () != 1) |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1276 { |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1277 error ("save: `%s' is not a scalar structure", |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1278 struct_name.c_str ()); |
7635
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1279 return; |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1280 } |
11059
4ffa19147604
replace Octave_map->octave_scalar_map in help.cc and load-save.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
10846
diff
changeset
|
1281 octave_scalar_map struct_var_map = struct_var.scalar_map_value (); |
7635
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1282 |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1283 ++argv_idx; |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1284 |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1285 if (argv_idx < argc) |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1286 { |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1287 for (int i = argv_idx; i < argc; i++) |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1288 { |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1289 if (! save_fields (os, struct_var_map, argv[i], fmt, |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1290 save_as_floats)) |
7635
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1291 { |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1292 warning ("save: no such field `%s.%s'", |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1293 struct_name.c_str (), argv[i].c_str ()); |
7635
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1294 } |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1295 } |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1296 } |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1297 else |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1298 save_fields (os, struct_var_map, "*", fmt, save_as_floats); |
7635
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1299 } |
863 | 1300 else |
1301 { | |
1755 | 1302 for (int i = argv_idx; i < argc; i++) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1303 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1304 if (! save_vars (os, argv[i], fmt, save_as_floats)) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1305 warning ("save: no such variable `%s'", argv[i].c_str ()); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1306 } |
863 | 1307 } |
1308 } | |
1309 | |
5284 | 1310 static void |
1311 dump_octave_core (std::ostream& os, const char *fname, load_save_format fmt, | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1312 bool save_as_floats) |
4791 | 1313 { |
1314 write_header (os, fmt); | |
1315 | |
7767
71f068b22fcc
scope and context fixes for function handles
John W. Eaton <jwe@octave.org>
parents:
7752
diff
changeset
|
1316 std::list<symbol_table::symbol_record> vars |
71f068b22fcc
scope and context fixes for function handles
John W. Eaton <jwe@octave.org>
parents:
7752
diff
changeset
|
1317 = symbol_table::all_variables (symbol_table::top_scope (), 0); |
4791 | 1318 |
1319 double save_mem_size = 0; | |
1320 | |
7336 | 1321 typedef std::list<symbol_table::symbol_record>::const_iterator const_vars_iterator; |
1322 | |
1323 for (const_vars_iterator p = vars.begin (); p != vars.end (); p++) | |
4791 | 1324 { |
7336 | 1325 octave_value val = p->varval (); |
4791 | 1326 |
7336 | 1327 if (val.is_defined ()) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1328 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1329 std::string name = p->name (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1330 std::string help; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1331 bool global = p->is_global (); |
4791 | 1332 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1333 double val_size = val.byte_size () / 1024; |
4791 | 1334 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1335 // FIXME -- maybe we should try to throw out the largest first... |
4791 | 1336 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1337 if (Voctave_core_file_limit < 0 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1338 || save_mem_size + val_size < Voctave_core_file_limit) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1339 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1340 save_mem_size += val_size; |
4791 | 1341 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1342 do_save (os, val, name, help, global, fmt, save_as_floats); |
7336 | 1343 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1344 if (error_state) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1345 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1346 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1347 } |
4791 | 1348 } |
1349 | |
1350 message (0, "save to `%s' complete", fname); | |
1351 } | |
1352 | |
1353 void | |
1354 dump_octave_core (void) | |
1380 | 1355 { |
3189 | 1356 if (Vcrash_dumps_octave_core) |
1380 | 1357 { |
5775 | 1358 // FIXME -- should choose better file name? |
3189 | 1359 |
4791 | 1360 const char *fname = Voctave_core_file_name.c_str (); |
3189 | 1361 |
1362 message (0, "attempting to save variables to `%s'...", fname); | |
1363 | |
5284 | 1364 load_save_format format = LS_BINARY; |
1365 | |
1366 bool save_as_floats = false; | |
1367 | |
1368 bool append = false; | |
3189 | 1369 |
5284 | 1370 bool use_zlib = false; |
1371 | |
1372 parse_save_options (Voctave_core_file_options, format, append, | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1373 save_as_floats, use_zlib); |
5284 | 1374 |
1375 std::ios::openmode mode = std::ios::out; | |
4791 | 1376 |
6625 | 1377 // Matlab v7 files are always compressed |
1378 if (format == LS_MAT7_BINARY) | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1379 use_zlib = false; |
6625 | 1380 |
4791 | 1381 if (format == LS_BINARY |
1382 #ifdef HAVE_HDF5 | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1383 || format == LS_HDF5 |
4791 | 1384 #endif |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1385 || format == LS_MAT_BINARY |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1386 || format == LS_MAT5_BINARY |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1387 || format == LS_MAT7_BINARY) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1388 mode |= std::ios::binary; |
3189 | 1389 |
5284 | 1390 mode |= append ? std::ios::ate : std::ios::trunc; |
1391 | |
3687 | 1392 #ifdef HAVE_HDF5 |
1393 if (format == LS_HDF5) | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1394 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1395 hdf5_ofstream file (fname, mode); |
3687 | 1396 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1397 if (file.file_id >= 0) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1398 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1399 dump_octave_core (file, fname, format, save_as_floats); |
3687 | 1400 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1401 file.close (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1402 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1403 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1404 warning ("unable to open `%s' for writing...", fname); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1405 } |
3189 | 1406 else |
3687 | 1407 #endif /* HAVE_HDF5 */ |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1408 // don't insert any commands here! The open brace below must |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1409 // go with the else above! |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1410 { |
5284 | 1411 #ifdef HAVE_ZLIB |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1412 if (use_zlib) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1413 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1414 gzofstream file (fname, mode); |
4791 | 1415 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1416 if (file) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1417 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1418 dump_octave_core (file, fname, format, save_as_floats); |
5284 | 1419 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1420 file.close (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1421 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1422 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1423 warning ("unable to open `%s' for writing...", fname); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1424 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1425 else |
5284 | 1426 #endif |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1427 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1428 std::ofstream file (fname, mode); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1429 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1430 if (file) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1431 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1432 dump_octave_core (file, fname, format, save_as_floats); |
5284 | 1433 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1434 file.close (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1435 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1436 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1437 warning ("unable to open `%s' for writing...", fname); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1438 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1439 } |
1380 | 1440 } |
1441 } | |
1442 | |
5269 | 1443 #ifdef HAVE_ZLIB |
1444 #define HAVE_ZLIB_HELP_STRING "" | |
1445 #else /* ! HAVE_ZLIB */ | |
1446 #define HAVE_ZLIB_HELP_STRING "\n\ | |
1447 This option is not available, as this Octave executable was not linked with\n\ | |
1448 the zlib library." | |
1449 #endif /* ! HAVE ZLIB */ | |
1450 | |
8746
5dd06f19e9be
handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents:
8676
diff
changeset
|
1451 DEFUN (save, args, , |
3372 | 1452 "-*- texinfo -*-\n\ |
9306
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
1453 @deffn {Command} save file\n\ |
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
1454 @deffnx {Command} save options file\n\ |
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
1455 @deffnx {Command} save options file @var{v1} @var{v2} @dots{}\n\ |
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
1456 @deffnx {Command} save options file -struct @var{STRUCT} @var{f1} @var{f2} @dots{}\n\ |
7247 | 1457 Save the named variables @var{v1}, @var{v2}, @dots{}, in the file\n\ |
9306
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
1458 @var{file}. The special filename @samp{-} may be used to write\n\ |
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
1459 output to the terminal. If no variable names are listed, Octave saves\n\ |
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
1460 all the variables in the current scope. Otherwise, full variable names or\n\ |
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
1461 pattern syntax can be used to specify the variables to save.\n\ |
10840 | 1462 If the @option{-struct} modifier is used, fields @var{f1} @var{f2} @dots{}\n\ |
9306
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
1463 of the scalar structure @var{STRUCT} are saved as if they were variables\n\ |
7635
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1464 with corresponding names.\n\ |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1465 Valid options for the @code{save} command are listed in the following table.\n\ |
ba7a3e20ee3d
add -struct modifier to save
Jaroslav Hajek <highegg@gmail.com>
parents:
7336
diff
changeset
|
1466 Options that modify the output format override the format specified by \n\ |
5794 | 1467 @code{default_save_options}.\n\ |
3372 | 1468 \n\ |
5665 | 1469 If save is invoked using the functional form\n\ |
1470 \n\ | |
1471 @example\n\ | |
7247 | 1472 save (\"-option1\", @dots{}, \"file\", \"v1\", @dots{})\n\ |
5665 | 1473 @end example\n\ |
1474 \n\ | |
1475 @noindent\n\ | |
1476 then the @var{options}, @var{file}, and variable name arguments\n\ | |
7247 | 1477 (@var{v1}, @dots{}) must be specified as character strings.\n\ |
5665 | 1478 \n\ |
3372 | 1479 @table @code\n\ |
1480 @item -ascii\n\ | |
9306
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
1481 Save a single matrix in a text file without header or any other information.\n\ |
5197 | 1482 \n\ |
3372 | 1483 @item -binary\n\ |
1484 Save the data in Octave's binary data format.\n\ | |
1485 \n\ | |
1486 @item -float-binary\n\ | |
1487 Save the data in Octave's binary data format but only using single\n\ | |
9306
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
1488 precision. Only use this format if you know that all the\n\ |
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
1489 values to be saved can be represented in single precision.\n\ |
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
1490 \n\ |
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
1491 @item -hdf5\n\ |
10840 | 1492 Save the data in @sc{hdf5} format.\n\ |
9306
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
1493 (HDF5 is a free, portable binary format developed by the National\n\ |
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
1494 Center for Supercomputing Applications at the University of Illinois.)\n" |
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
1495 |
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
1496 HAVE_HDF5_HELP_STRING |
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
1497 |
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
1498 "\n\ |
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
1499 @item -float-hdf5\n\ |
10840 | 1500 Save the data in @sc{hdf5} format but only using single precision.\n\ |
9306
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
1501 Only use this format if you know that all the\n\ |
3372 | 1502 values to be saved can be represented in single precision.\n\ |
1503 \n\ | |
5269 | 1504 @item -V7\n\ |
1505 @itemx -v7\n\ | |
1506 @itemx -7\n\ | |
1507 @itemx -mat7-binary\n\ | |
9064
7c02ec148a3c
Check grammar on all .cc files
Rik <rdrider0-list@yahoo.com>
parents:
9039
diff
changeset
|
1508 Save the data in @sc{matlab}'s v7 binary data format.\n" |
5269 | 1509 |
1510 HAVE_ZLIB_HELP_STRING | |
1511 | |
1512 "\n\ | |
1513 @item -V6\n\ | |
5284 | 1514 @itemx -v6\n\ |
5269 | 1515 @itemx -6\n\ |
1516 @itemx -mat\n\ | |
4884 | 1517 @itemx -mat-binary\n\ |
9064
7c02ec148a3c
Check grammar on all .cc files
Rik <rdrider0-list@yahoo.com>
parents:
9039
diff
changeset
|
1518 Save the data in @sc{matlab}'s v6 binary data format.\n\ |
3372 | 1519 \n\ |
5256 | 1520 @item -V4\n\ |
1521 @itemx -v4\n\ | |
1522 @itemx -4\n\ | |
1523 @itemx -mat4-binary\n\ | |
9064
7c02ec148a3c
Check grammar on all .cc files
Rik <rdrider0-list@yahoo.com>
parents:
9039
diff
changeset
|
1524 Save the data in the binary format written by @sc{matlab} version 4.\n\ |
3688 | 1525 \n\ |
9306
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
1526 @item -text\n\ |
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
1527 Save the data in Octave's text data format. (default).\n\ |
3687 | 1528 \n\ |
5269 | 1529 @item -zip\n\ |
1530 @itemx -z\n\ | |
10846
a4f482e66b65
Grammarcheck more of the documentation.
Rik <octave@nomad.inbox5.com>
parents:
10840
diff
changeset
|
1531 Use the gzip algorithm to compress the file. This works equally on files\n\ |
a4f482e66b65
Grammarcheck more of the documentation.
Rik <octave@nomad.inbox5.com>
parents:
10840
diff
changeset
|
1532 that are compressed with gzip outside of octave, and gzip can equally be\n\ |
a4f482e66b65
Grammarcheck more of the documentation.
Rik <octave@nomad.inbox5.com>
parents:
10840
diff
changeset
|
1533 used to convert the files for backward compatibility.\n" |
5322 | 1534 |
1535 HAVE_ZLIB_HELP_STRING | |
1536 | |
5269 | 1537 "@end table\n\ |
604 | 1538 \n\ |
9306
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
1539 The list of variables to save may use wildcard patterns containing\n\ |
3372 | 1540 the following special characters:\n\ |
1541 @table @code\n\ | |
1542 @item ?\n\ | |
1543 Match any single character.\n\ | |
1544 \n\ | |
1545 @item *\n\ | |
1546 Match zero or more characters.\n\ | |
1547 \n\ | |
1548 @item [ @var{list} ]\n\ | |
1549 Match the list of characters specified by @var{list}. If the first\n\ | |
1550 character is @code{!} or @code{^}, match all characters except those\n\ | |
9306
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
1551 specified by @var{list}. For example, the pattern @code{[a-zA-Z]} will\n\ |
9064
7c02ec148a3c
Check grammar on all .cc files
Rik <rdrider0-list@yahoo.com>
parents:
9039
diff
changeset
|
1552 match all lower and upper case alphabetic characters. \n\ |
7718
62279ce5654c
save: fix continuation character in doc string
John W. Eaton <jwe@octave.org>
parents:
7635
diff
changeset
|
1553 \n\ |
9306
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
1554 Wildcards may also be used in the field name specifications when using\n\ |
10840 | 1555 the @option{-struct} modifier (but not in the struct name itself).\n\ |
5197 | 1556 \n\ |
3372 | 1557 @end table\n\ |
1558 \n\ | |
9306
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
1559 Except when using the @sc{matlab} binary data file format or the\n\ |
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
1560 @samp{-ascii} format, saving global\n\ |
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
1561 variables also saves the global status of the variable. If the variable\n\ |
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
1562 is restored at a later time using @samp{load}, it will be restored as a\n\ |
3372 | 1563 global variable.\n\ |
1564 \n\ | |
1565 The command\n\ | |
1566 \n\ | |
1567 @example\n\ | |
1568 save -binary data a b*\n\ | |
1569 @end example\n\ | |
1570 \n\ | |
1571 @noindent\n\ | |
1572 saves the variable @samp{a} and all variables beginning with @samp{b} to\n\ | |
1573 the file @file{data} in Octave's binary format.\n\ | |
9306
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
1574 @seealso{load, default_save_options, dlmread, csvread, fread}\n\ |
3372 | 1575 @end deffn") |
604 | 1576 { |
2086 | 1577 octave_value_list retval; |
604 | 1578 |
8034
f61bd8e0d682
fix default_save_options parsing and allow mixing options with other arguments.
Jaroslav Hajek <highegg@gmail.com>
parents:
8021
diff
changeset
|
1579 int argc = args.length (); |
1755 | 1580 |
8034
f61bd8e0d682
fix default_save_options parsing and allow mixing options with other arguments.
Jaroslav Hajek <highegg@gmail.com>
parents:
8021
diff
changeset
|
1581 string_vector argv = args.make_argv (); |
1755 | 1582 |
1583 if (error_state) | |
1584 return retval; | |
604 | 1585 |
1358 | 1586 // Here is where we would get the default save format if it were |
1587 // stored in a user preference variable. | |
604 | 1588 |
3019 | 1589 bool save_as_floats = false; |
630 | 1590 |
5284 | 1591 load_save_format format = LS_ASCII; |
604 | 1592 |
3185 | 1593 bool append = false; |
1594 | |
5269 | 1595 bool use_zlib = false; |
1596 | |
8034
f61bd8e0d682
fix default_save_options parsing and allow mixing options with other arguments.
Jaroslav Hajek <highegg@gmail.com>
parents:
8021
diff
changeset
|
1597 // get default options |
f61bd8e0d682
fix default_save_options parsing and allow mixing options with other arguments.
Jaroslav Hajek <highegg@gmail.com>
parents:
8021
diff
changeset
|
1598 parse_save_options (Vdefault_save_options, format, append, save_as_floats, |
f61bd8e0d682
fix default_save_options parsing and allow mixing options with other arguments.
Jaroslav Hajek <highegg@gmail.com>
parents:
8021
diff
changeset
|
1599 use_zlib); |
5351 | 1600 |
8034
f61bd8e0d682
fix default_save_options parsing and allow mixing options with other arguments.
Jaroslav Hajek <highegg@gmail.com>
parents:
8021
diff
changeset
|
1601 // override from command line |
f61bd8e0d682
fix default_save_options parsing and allow mixing options with other arguments.
Jaroslav Hajek <highegg@gmail.com>
parents:
8021
diff
changeset
|
1602 argv = parse_save_options (argv, format, append, save_as_floats, |
f61bd8e0d682
fix default_save_options parsing and allow mixing options with other arguments.
Jaroslav Hajek <highegg@gmail.com>
parents:
8021
diff
changeset
|
1603 use_zlib); |
f61bd8e0d682
fix default_save_options parsing and allow mixing options with other arguments.
Jaroslav Hajek <highegg@gmail.com>
parents:
8021
diff
changeset
|
1604 argc = argv.length (); |
f61bd8e0d682
fix default_save_options parsing and allow mixing options with other arguments.
Jaroslav Hajek <highegg@gmail.com>
parents:
8021
diff
changeset
|
1605 int i = 0; |
5197 | 1606 |
5284 | 1607 if (error_state) |
1608 return retval; | |
604 | 1609 |
2057 | 1610 if (i == argc) |
604 | 1611 { |
5823 | 1612 print_usage (); |
604 | 1613 return retval; |
1614 } | |
1615 | |
630 | 1616 if (save_as_floats && format == LS_ASCII) |
1617 { | |
1618 error ("save: cannot specify both -ascii and -float-binary"); | |
1619 return retval; | |
1620 } | |
1621 | |
1755 | 1622 if (argv[i] == "-") |
604 | 1623 { |
1755 | 1624 i++; |
863 | 1625 |
3687 | 1626 #ifdef HAVE_HDF5 |
1627 if (format == LS_HDF5) | |
4687 | 1628 error ("save: cannot write HDF5 format to stdout"); |
3687 | 1629 else |
1630 #endif /* HAVE_HDF5 */ | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1631 // don't insert any commands here! the brace below must go |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1632 // with the "else" above! |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1633 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1634 if (append) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1635 warning ("save: ignoring -append option for output to stdout"); |
6759 | 1636 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1637 // FIXME -- should things intended for the screen end up |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1638 // in a octave_value (string)? |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1639 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1640 save_vars (argv, i, argc, octave_stdout, format, |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1641 save_as_floats, true); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1642 } |
604 | 1643 } |
1755 | 1644 |
1645 // Guard against things like `save a*', which are probably mistakes... | |
1646 | |
1647 else if (i == argc - 1 && glob_pattern_p (argv[i])) | |
1648 { | |
5823 | 1649 print_usage (); |
604 | 1650 return retval; |
1651 } | |
1652 else | |
1653 { | |
3523 | 1654 std::string fname = file_ops::tilde_expand (argv[i]); |
1755 | 1655 |
1656 i++; | |
604 | 1657 |
6625 | 1658 // Matlab v7 files are always compressed |
1659 if (format == LS_MAT7_BINARY) | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1660 use_zlib = false; |
6625 | 1661 |
6759 | 1662 std::ios::openmode mode |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1663 = append ? (std::ios::app | std::ios::ate) : std::ios::out; |
6759 | 1664 |
4791 | 1665 if (format == LS_BINARY |
1666 #ifdef HAVE_HDF5 | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1667 || format == LS_HDF5 |
4791 | 1668 #endif |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1669 || format == LS_MAT_BINARY |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1670 || format == LS_MAT5_BINARY |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1671 || format == LS_MAT7_BINARY) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1672 mode |= std::ios::binary; |
3538 | 1673 |
3687 | 1674 #ifdef HAVE_HDF5 |
1675 if (format == LS_HDF5) | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1676 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1677 // FIXME. It should be possible to append to HDF5 files. |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1678 if (append) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1679 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1680 error ("save: appending to HDF5 files is not implemented"); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1681 return retval; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1682 } |
6759 | 1683 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1684 bool write_header_info = ! (append && |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1685 H5Fis_hdf5 (fname.c_str ()) > 0); |
3687 | 1686 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1687 hdf5_ofstream hdf5_file (fname.c_str (), mode); |
6760 | 1688 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1689 if (hdf5_file.file_id != -1) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1690 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1691 save_vars (argv, i, argc, hdf5_file, format, |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1692 save_as_floats, write_header_info); |
3687 | 1693 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1694 hdf5_file.close (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1695 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1696 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1697 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1698 gripe_file_open ("save", fname); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1699 return retval; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1700 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1701 } |
863 | 1702 else |
3687 | 1703 #endif /* HAVE_HDF5 */ |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1704 // don't insert any statements here! The brace below must go |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1705 // with the "else" above! |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1706 { |
5269 | 1707 #ifdef HAVE_ZLIB |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1708 if (use_zlib) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1709 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1710 gzofstream file (fname.c_str (), mode); |
5269 | 1711 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1712 if (file) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1713 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1714 bool write_header_info = ! file.tellp (); |
6760 | 1715 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1716 save_vars (argv, i, argc, file, format, |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1717 save_as_floats, write_header_info); |
5269 | 1718 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1719 file.close (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1720 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1721 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1722 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1723 gripe_file_open ("save", fname); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1724 return retval; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1725 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1726 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1727 else |
5269 | 1728 #endif |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1729 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1730 std::ofstream file (fname.c_str (), mode); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1731 |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1732 if (file) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1733 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1734 bool write_header_info = ! file.tellp (); |
6760 | 1735 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1736 save_vars (argv, i, argc, file, format, |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1737 save_as_floats, write_header_info); |
5269 | 1738 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1739 file.close (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1740 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1741 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1742 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1743 gripe_file_open ("save", fname); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1744 return retval; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1745 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1746 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10309
diff
changeset
|
1747 } |
604 | 1748 } |
1749 | |
1750 return retval; | |
1751 } | |
1752 | |
5794 | 1753 DEFUN (crash_dumps_octave_core, args, nargout, |
1754 "-*- texinfo -*-\n\ | |
10840 | 1755 @deftypefn {Built-in Function} {@var{val} =} crash_dumps_octave_core ()\n\ |
5794 | 1756 @deftypefnx {Built-in Function} {@var{old_val} =} crash_dumps_octave_core (@var{new_val})\n\ |
1757 Query or set the internal variable that controls whether Octave tries\n\ | |
6653 | 1758 to save all current variables to the file \"octave-core\" if it\n\ |
5794 | 1759 crashes or receives a hangup, terminate or similar signal.\n\ |
1760 @seealso{octave_core_file_limit, octave_core_file_name, octave_core_file_options}\n\ | |
1761 @end deftypefn") | |
2194 | 1762 { |
5794 | 1763 return SET_INTERNAL_VARIABLE (crash_dumps_octave_core); |
2194 | 1764 } |
1765 | |
5794 | 1766 DEFUN (default_save_options, args, nargout, |
1767 "-*- texinfo -*-\n\ | |
9306
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
1768 @deftypefn {Built-in Function} {@var{val} =} default_save_options ()\n\ |
5794 | 1769 @deftypefnx {Built-in Function} {@var{old_val} =} default_save_options (@var{new_val})\n\ |
1770 Query or set the internal variable that specifies the default options\n\ | |
1771 for the @code{save} command, and defines the default format.\n\ | |
9306
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
1772 Typical values include @code{\"-ascii\"}, @code{\"-text -zip\"}.\n\ |
10840 | 1773 The default value is @option{-text}.\n\ |
5794 | 1774 @seealso{save}\n\ |
1775 @end deftypefn") | |
4788 | 1776 { |
5794 | 1777 return SET_NONEMPTY_INTERNAL_STRING_VARIABLE (default_save_options); |
4788 | 1778 } |
1779 | |
5794 | 1780 DEFUN (octave_core_file_limit, args, nargout, |
1781 "-*- texinfo -*-\n\ | |
10840 | 1782 @deftypefn {Built-in Function} {@var{val} =} octave_core_file_limit ()\n\ |
5794 | 1783 @deftypefnx {Built-in Function} {@var{old_val} =} octave_core_file_limit (@var{new_val})\n\ |
1784 Query or set the internal variable that specifies the maximum amount\n\ | |
1785 of memory (in kilobytes) of the top-level workspace that Octave will\n\ | |
1786 attempt to save when writing data to the crash dump file (the name of\n\ | |
1787 the file is specified by @var{octave_core_file_name}). If\n\ | |
7001 | 1788 @var{octave_core_file_options} flags specify a binary format,\n\ |
5794 | 1789 then @var{octave_core_file_limit} will be approximately the maximum\n\ |
1790 size of the file. If a text file format is used, then the file could\n\ | |
1791 be much larger than the limit. The default value is -1 (unlimited)\n\ | |
1792 @seealso{crash_dumps_octave_core, octave_core_file_name, octave_core_file_options}\n\ | |
1793 @end deftypefn") | |
3709 | 1794 { |
5794 | 1795 return SET_INTERNAL_VARIABLE (octave_core_file_limit); |
3709 | 1796 } |
1797 | |
5794 | 1798 DEFUN (octave_core_file_name, args, nargout, |
1799 "-*- texinfo -*-\n\ | |
10840 | 1800 @deftypefn {Built-in Function} {@var{val} =} octave_core_file_name ()\n\ |
5794 | 1801 @deftypefnx {Built-in Function} {@var{old_val} =} octave_core_file_name (@var{new_val})\n\ |
1802 Query or set the internal variable that specifies the name of the file\n\ | |
1803 used for saving data from the top-level workspace if Octave aborts.\n\ | |
1804 The default value is @code{\"octave-core\"}\n\ | |
1805 @seealso{crash_dumps_octave_core, octave_core_file_name, octave_core_file_options}\n\ | |
1806 @end deftypefn") | |
2194 | 1807 { |
5794 | 1808 return SET_NONEMPTY_INTERNAL_STRING_VARIABLE (octave_core_file_name); |
1809 } | |
4791 | 1810 |
5794 | 1811 DEFUN (octave_core_file_options, args, nargout, |
1812 "-*- texinfo -*-\n\ | |
10840 | 1813 @deftypefn {Built-in Function} {@var{val} =} octave_core_file_options ()\n\ |
5794 | 1814 @deftypefnx {Built-in Function} {@var{old_val} =} octave_core_file_options (@var{new_val})\n\ |
1815 Query or set the internal variable that specifies the options used for\n\ | |
1816 saving the workspace data if Octave aborts. The value of\n\ | |
1817 @code{octave_core_file_options} should follow the same format as the\n\ | |
9039
51dc9691f23f
Cleanup documentation files errors.texi, debug.texi, io.texi
Rik <rdrider0-list@yahoo.com>
parents:
8946
diff
changeset
|
1818 options for the @code{save} function. The default value is Octave's binary\n\ |
5284 | 1819 format.\n\ |
5642 | 1820 @seealso{crash_dumps_octave_core, octave_core_file_name, octave_core_file_limit}\n\ |
5794 | 1821 @end deftypefn") |
1822 { | |
1823 return SET_NONEMPTY_INTERNAL_STRING_VARIABLE (octave_core_file_options); | |
1824 } | |
2194 | 1825 |
5794 | 1826 DEFUN (save_header_format_string, args, nargout, |
1827 "-*- texinfo -*-\n\ | |
9306
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
1828 @deftypefn {Built-in Function} {@var{val} =} save_header_format_string ()\n\ |
5794 | 1829 @deftypefnx {Built-in Function} {@var{old_val} =} save_header_format_string (@var{new_val})\n\ |
1830 Query or set the internal variable that specifies the format\n\ | |
1831 string used for the comment line written at the beginning of\n\ | |
1832 text-format data files saved by Octave. The format string is\n\ | |
1833 passed to @code{strftime} and should begin with the character\n\ | |
1834 @samp{#} and contain no newline characters. If the value of\n\ | |
1835 @code{save_header_format_string} is the empty string,\n\ | |
3709 | 1836 the header comment is omitted from text-format data files. The\n\ |
1837 default value is\n\ | |
10846
a4f482e66b65
Grammarcheck more of the documentation.
Rik <octave@nomad.inbox5.com>
parents:
10840
diff
changeset
|
1838 @c Set example in small font to prevent overfull line\n\ |
3709 | 1839 \n\ |
7031 | 1840 @smallexample\n\ |
4060 | 1841 \"# Created by Octave VERSION, %a %b %d %H:%M:%S %Y %Z <USER@@HOST>\"\n\ |
7031 | 1842 @end smallexample\n\ |
9306
de124edcebf6
Update documentation for load and save
Rik <rdrider0-list@yahoo.com>
parents:
9153
diff
changeset
|
1843 @seealso{strftime, save}\n\ |
5794 | 1844 @end deftypefn") |
1845 { | |
1846 return SET_INTERNAL_VARIABLE (save_header_format_string); | |
2194 | 1847 } |