More documentation on values.
[pspp] / spv-file-format.texi
index 2ac8de6700de9a7c2f9e4eecb3067d6dbc7b5cae..82367ddef40185f38a5d6a6ff1fc017cdc5d72d3 100644 (file)
@@ -55,10 +55,12 @@ Same format used for tables, with a different name.
 The structure of a chart plus its data.  Charts do not have a
 ``light'' format.
 
-@item @var{prefix}_model.xml
-@itemx @var{prefix}_pmml.xml
-@itemx @var{prefix}_stats.xml
+@item @var{prefix}_model.scf
+@itemx @var{prefix}_pmml.scf
 Not yet investigated.  The corpus contains only one example of each.
+
+@itemx @var{prefix}_stats.xml
+Not yet investigated.  The corpus contains few examples.
 @end table
 
 The @file{@var{prefix}} in the names of the detail members is
@@ -417,7 +419,7 @@ x6 := 01 00 (03 | 04) 00 00 00
       byte*8 01
       (string[dataset] string[datafile] i0 int i0)?
       int[n-ccs] string*[n-ccs]
-      2e (00 | 01)
+      2e (00 | 01) (i2000000 i0)?
 @end example
 
 In every example in the corpus, @code{x1} is 240.  The meaning of the
@@ -619,10 +621,10 @@ index @math{5 \times (4 \times (3 \times 0 + 1) + 2) + 3 = 33}.
 
 @example
 value := 00? 00? 00? 00? raw-value
-raw-value := 01 opt-value int32[format] double
-           | 02 opt-value int32[format] double string[varname] string[vallab]
-             (01 | 02 | 03)
-           | 03 string[local] opt-value string[id] string[c] (00 | 01)
+raw-value := 01 opt-value int32[format] double[x]
+           | 02 opt-value int32[format] double[x]
+             string[varname] string[vallab] (01 | 02 | 03)
+           | 03 string[local] opt-value string[id] string[c] (00 | 01)[type]
            | 04 opt-value int32[format] string[vallab] string[varname]
              (01 | 02 | 03) string[vallab]
            | 05 opt-value string[varname] string[varlabel] (01 | 02 | 03)
@@ -632,19 +634,62 @@ substitution := i0 value
 opt-value := 31 i0 (i0 | i1 string) opt-value-i0-v1        /* @r{version 1} */
            | 31 i0 (i0 | i1 string) opt-value-i0-v3        /* @r{version 3} */
            | 31 i1 int32[footnote-number] nested-string
-           | 31 i2 (00 | 02) 00 (i1 | i2 | i3) nested-string
+           | 31 i2 (00 | 01 | 02) 00 (i1 | i2 | i3) nested-string
            | 31 i3 00 00 01 00 i2 nested-string
            | 58
 opt-value-i0-v1 := 00 (i1 | i2) 00 00 int32 00 00
 opt-value-i0-v3 := count(counted-string
-                         (58
-                          | 31 01? 00? 00? 00? 01
-                            string[fgcolor] string[bgcolor] string[typeface]
-                            byte)
+                         (58 | 31 style)
                          (58
                           | 31 i0 i0 i0 i0 01 00 (01 | 02 | 08)
                             00 08 00 0a 00))
 
-nested-string := 00 00 count(counted-string 58 58)
+style := 01? 00? 00? 00? 01 string[fgcolor] string[bgcolor] string[font] byte
+nested-string := 00 00 count(counted-string (58 | 31 style) 58)
 counted-string := count((i0 (58 | 31 string))?)
 @end example
+
+A @code{value} boils down to a number or a string.  There are several
+possibilities, which one can distinguish by the first nonzero byte in
+the encoding:
+
+@table @code
+@item 01
+The numeric value @code{x}, presented to the user formatted according
+to @code{format}, which is in the format described for system files.
+@xref{System File Output Formats}, for details.  Most commonly
+@code{format} has width 40 (the maximum).
+
+An @code{x} with the maximum negative double @code{-DBL_MAX}
+represents the system-missing value SYSMIS.  (HIGHEST and LOWEST have
+not been observed.)  @xref{System File Format}, for more about these
+special values.
+
+@item 02
+Similar to @code{01}, with the additional information that @code{x} is
+a value of variable @code{varname} and has value label @code{vallab}.
+Both @code{varname} and @code{vallab} can be the empty string, the
+latter very commonly.
+
+The meaning of the final byte is unknown.  Possibly it is connected to
+whether the value or the label should be displayed.
+
+@item 03
+A text string that originates from the software program (rather than
+from user data).  The string is provided in two forms: @code{c} is in
+English and @code{local} is localized to the user's language
+environment.  In an English-language locale, the two strings are often
+the same, and in cases where they differ @code{c} is often abbreviated
+or obscure and @code{local} is more appropriate for a user interface,
+e.g.@: @code{c} of ``Not a PxP table for MCN...'' versus @code{local}
+of ``Computed only for a PxP table, where P must be greater than 1.''
+
+@code{id} is a brief identifying string whose form seems to resemble a
+programming language identifier, e.g.@: @code{cumulative_percent} or
+@code{factor_14}.  It is not unique.
+
+@code{type} is 00 for text taken from user input, such as syntax
+fragment, expressions, file names, data set names, and 01 for fixed
+text strings such as names of procedures or statistics.
+
+@item 04