1 <?xml version="1.0" encoding="UTF-8"?>
2 <refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns5="http://www.w3.org/1999/xhtml" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" version="5.0-subset Scilab" xml:id="save_format" xml:lang="en">
4 <refname>save_format</refname>
5 <refpurpose>format of files produced by "save"</refpurpose>
8 <title>Description</title>
10 Variables are saved by Scilab with the <link linkend="save">save</link> function in the following format:
13 each variable record is appended consecutively to the file. The variable record begins with 6 <literal>long integer</literal> holding the variable name in encoded format (see the Remarks section below), after that comes the variable type (<literal>long integer</literal>), then, depending on it, for:
17 <term>Floating matrices (type 1)</term>
20 <varname>row_size</varname> <varname>m</varname> (a <literal>long integer</literal>),
23 <varname>column_size</varname> <varname>n</varname> (a <literal>long integer</literal>),
26 real/complex flag <varname>it</varname> (a <literal>long integer</literal> in {0,1}),
29 data (n*m*(it+1) <literal>double</literal>s)
36 <term>Polynomials (type 2) and Size implicit indices (type 129)</term>
39 <varname>row_size</varname> <varname>m</varname> (a <literal>long integer</literal>),
42 <varname>column_size</varname> <varname>n</varname> (a <literal>long integer</literal>),
45 real/complex flag <varname>it</varname> (long integer in {0,1}),
48 formal variable name (16 bytes),
51 <varname>index_table</varname> (m*n+1 <literal>long integer</literal>s),
54 data ((N-1)*(it+1) <literal>double</literal>s), where <varname>N</varname> is the
55 value of the last entry of the <varname>index_table</varname>.
62 <term>Booleans (type 4)</term>
65 <varname>row_size</varname> <varname>m</varname> (a <literal>long integer</literal>),
68 <varname>column_size</varname> <varname>n</varname> (a <literal>long integer</literal>),
71 data (n*m <literal>long integer</literal>s).
78 <term>Floating sparse matrices (type 5)</term>
81 <varname>row_size</varname> <varname>m</varname> (a <literal>long integer</literal>),
84 <varname>column_size</varname> <varname>n</varname> (a <literal>long integer</literal>),
87 real/complex_flag <varname>it</varname> (a <literal>long integer</literal> in {0,1}),
90 <varname>total_number_of_non_zero_elements</varname> <varname>nel</varname> (a <literal>long integer</literal>),
93 <varname>number_of_non_zero_elements_per_row</varname> (m <literal>long integer</literal>s),
96 <varname>column_index_non_zero_elements</varname> (nel <literal>long integer</literal>s),
99 <varname>non_zero_values</varname> (nel*(it+1) <literal>double</literal>s).
106 <term>Boolean sparse matrices (type 6)</term>
109 <varname>row_size</varname> <varname>m</varname> (a <literal>long integer</literal>),
112 <varname>column_size</varname> <varname>n</varname> (a <literal>long integer</literal>),
115 unused <varname>it</varname> (a <literal>long integer</literal>),
118 <varname>total_number_of_non_zero_elements</varname> <varname>nel</varname> (a <literal>long integer</literal>),
121 <varname>number_of_non_zero_elements_per_row</varname> (m <literal>long integer</literal>s),
124 <varname>column_index_non_zero_elements</varname> (nel <literal>long integer</literal>s).
131 <term>Matlab sparse matrix (type 7)</term>
134 <varname>row_size</varname> <varname>m</varname> (a <literal>long integer</literal>),
137 <varname>column_size</varname> <varname>n</varname> (a <literal>long integer</literal>),
140 real/complex_flag <varname>it</varname> (a <literal>long integer</literal> in {0,1}),
143 <varname>total_number_of_non_zero_elements</varname> <varname>nel</varname> (a <literal>long integer</literal>),
146 <varname>number_of_non_zero_elements_per_column</varname> (n <literal>long integer</literal>s),
149 <varname>row_index_non_zero_elements</varname> (nel <literal>long integer</literal>s),
152 <varname>non_zero_values</varname> (nel*(it+1) <literal>double</literal>s).
159 <term>Integer matrices (type 8)</term>
162 <varname>row_size</varname> <varname>m</varname> (a <literal>long integer</literal>),
165 <varname>column_size</varname> <varname>n</varname> (a <literal>long integer</literal>),
168 <varname>integer_type</varname> (a <literal>long integer</literal>): 1,2,4, or 11,12,14 for signed and unsigned 1,2,4 bytes integers,
171 data (n*m bytes for <varname>integer_type</varname> 1 or 11, n*m <literal>short integer</literal>s for <varname>integer_type</varname> 2 or 12, n*m <literal>long integer</literal>s for <varname>integer_type</varname> 4 or
179 <term>handles (type 9)</term>
181 <para>version (4 bytes)</para>
183 <varname>row_size</varname> <varname>m</varname> (a byte),
186 <varname>column_size</varname> <varname>n</varname> (a byte),
189 data (m*n <varname>serialization_record</varname>s)
192 A <varname>serialization_record</varname> is a flat
193 representation of the C data structure associated with the
194 corresponding graphic object. Each graphic object is defined by
195 a (recursive) set of properties (see the <link linkend="get">get</link> function).
198 The saved <varname>serialization_record</varname> of a graphic object is structured as follow.
202 <term>serialization_record</term>
205 <varname>type_length</varname> <varname>n</varname> (a byte),
208 type (n bytes, the ascii codes of the type name),
211 <varname>property_values</varname> record (variable length).
221 <term>Strings (type 10)</term>
224 <varname>row_size</varname> <varname>m</varname> (a <literal>long integer</literal>),
227 <varname>column_size</varname> <varname>n</varname> (a <literal>long integer</literal>),
230 <varname>index_table</varname> (n*m+1 <literal>long integer</literal>s),
233 data (N <literal>long integer</literal>s, the Scilab encoding of the characters (see <link linkend="code2str">code2str</link>), where <varname>N</varname> is the value of the last entry of the <varname>index_table</varname>.
240 <term>Uncompiled functions (type 11)</term>
243 <varname>nout</varname> (a <literal>long integer</literal>),
246 <varname>lhs_names</varname> (6*nout <literal>long integer</literal>s, see the Remarks section below),
249 <varname>nin</varname> (a <literal>long integer</literal>),
252 <varname>rhs_names</varname> (6*nin <literal>long integer</literal>s, see the Remarks section below),
255 <varname>code_length</varname> <varname>N</varname> (a <literal>long integer</literal>),
258 <varname>code</varname> (N <literal>long integer</literal>s).
265 <term>Compiled functions (type 13)</term>
268 <varname>nout</varname> (a <literal>long integer</literal>),
271 <varname>lhs_names</varname> (6*nout <literal>long integer</literal>s, see the Remarks section below),
274 <varname>nin</varname> (a <literal>long integer</literal>),
277 <varname>rhs_names</varname> (6*nin <literal>long integer</literal>s, see the Remarks section below),
280 <varname>pseudo_code_length</varname> <varname>N</varname> (a <literal>long integer</literal>),
283 <varname>pseudo_code</varname> (N <literal>long integer</literal>s).
290 <term>Libraries (type 14)</term>
293 <varname>path_length</varname> np (a <literal>long integer</literal>),
296 <varname>path_name</varname> (np <literal>long integer</literal>s: the path character codes sequence, (see <link linkend="code2str">code2str</link>)),
299 number of names nn (a <literal>long integer</literal>),
302 names (6*nn <literal>long integer</literal>s, see the Remarks section
310 <term>Lists (type 15), tlists (type 16), mlists (type 17)</term>
313 number of fields <varname>n</varname> (a <literal>long integer</literal>),
316 index (n+1 <literal>long integer</literal>s),
319 <varname>variables_sequence</varname> (n variables, each one written according to its format).
326 <term>Pointers (type 128)</term>
328 <para>Not handled</para>
334 <term>Function pointers (type 130)</term>
337 <varname>function_ptr</varname> (a <literal>long integer</literal>, (see <link linkend="funptr">funptr</link>)),
340 <varname>function_name_code</varname> (6 <literal>long integer</literal>s, see the
341 Remarks section below).
348 <title>Remarks</title>
350 Numbers (a <literal>long interger</literal>, <literal>short integer</literal>s, <literal>double</literal>) are stored using the
351 little endian convention.
354 The variable names are stored as a sequence of 6 <literal>long integer</literal>s, with
355 a specific encoding. See the <literal>cvname.f</literal> file for
359 <refsection role="see also">
360 <title>See Also</title>
361 <simplelist type="inline">
363 <link linkend="save">save</link>
366 <link linkend="load">load</link>
369 <link linkend="listvarinfile">listvarinfile</link>
372 <link linkend="type">type</link>
375 <link linkend="typeof">typeof</link>