LightMember @result{}
Header Title
Caption Footnotes
- Fonts Formats Borders PrintSettings TableSettings
+ Fonts Borders PrintSettings TableSettings Formats
Dimensions Data
01
@end format
@menu
* SPV Light Member Header::
* SPV Light Member Title::
-* PSV Light Member Caption::
+* SPV Light Member Caption::
* SPV Light Member Footnotes::
* SPV Light Member Fonts::
* SPV Light Member Borders::
(i1 @math{|} i3)[@t{version}]
01 bool*4 int
int[@t{min-column-width}] int[@t{max-column-width}]
- int[@t{min-row-height}] int[@t{max-row-height}]
+ int[@t{min-row-width}] int[@t{max-row-width}]
int64[@t{table-id}]
@end format
@end cartouche
if @code{tableId} is @code{-4122591256483201023}, then @code{table-id}
would be 0xc6c99d183b300001.
+@code{min-column-width} is the minimum width that a column will be
+assigned automatically. @code{max-column-width} is the maximum width
+that a column will be assigned to accommodate a long column label.
+@code{min-row-width} and @code{max-row-width} are a similar range for
+the width of row labels. All of these measurements are in 1/96 inch
+units.
+
The meaning of the other variable parts of the header is not known.
@node SPV Light Member Title
well formatted. For example, for a frequency table, @code{title1} and
@code{title2} name the variable and @code{c} is simply ``Frequencies''.
-@node PSV Light Member Caption
+@node SPV Light Member Caption
@subsection Caption
@cartouche
should be the same color. When @code{alternate} is 01, @code{altfg}
and @code{altbg} specify the colors for the alternate rows.
+@code{left-margin}, @code{right-margin}, @code{top-margin}, and
+@code{bottom-margin} are measured in multiples of 1/96 inch.
+
@node SPV Light Member Borders
@subsection Borders
@code{show-grid-lines} is 1 to draw grid lines, otherwise 0.
Each Border describes one kind of border. @code{n-borders} seems to
-always be 19. Each @code{border-type} appears once in order, and they
-correspond to the following borders:
+always be 19. Each @code{border-type} appears once (although in an
+unpredictable order) and correspond to the following borders:
@table @asis
@item 0
@format
PrintSettings @result{}
b1[@t{endian}]
- bool[@t{layers}]
+ bool[@t{all-layers}]
bool[@t{paginate-layers}]
bool[@t{fit-width}]
bool[@t{fit-length}]
The PrintSettings reflect settings for printing. The fixed value of
@code{endian} can be used to validate the endianness.
-@code{layers} is 1 to print all layers, 0 to print only the visible
-layers.
+@code{all-layers} is 1 to print all layers, 0 to print only the
+visible layers.
@code{paginate-layers} is 1 to print each layer at the start of a new
-page, 0 otherwise.
+page, 0 otherwise. (This setting is honored only @code{all-layers} is
+1, since otherwise only one layer is printed.)
@code{fit-width} and @code{fit-length} control whether the table is
shrunk to fit within a page's width or length, respectively.
v3(
byte
be32[@t{n}] byte*[@t{n}]
- bestring
+ bestring[@t{notes}]
bestring[@t{table-look}]
00...
)
When @code{footnote-marker-position} is 1, footnote markers are shown
as superscripts, otherwise as subscripts.
+@code{notes} is a text string that contains user-specified notes. It
+is displayed when the user hovers the cursor over the table, like
+``alt text'' on a webpage. It is not printed. It is usually empty.
+
@code{table-look} is the name of a SPSS ``TableLook'' table style,
such as ``Default'' or ``Academic''; it is often empty.
@cartouche
@format
Formats @result{}
- int[@t{n4}] int*[@t{n4}]
+ int[@t{nwidths}] int*[@t{nwidths}]
string[@t{encoding}]
- (i0 @math{|} i-1) (00 @math{|} 01) 00 (00 @math{|} 01)
- int
+ int (00 @math{|} 01) 00 (00 @math{|} 01)
+ int[@t{epoch}]
byte[@t{decimal}] byte[@t{grouping}]
- int[@t{n-ccs}] string*[@t{n-ccs}]
+ CustomCurrency
v1(i0)
v3(count(count(X5) count(X6)))
+CustomCurrency @result{} int[@t{n-ccs}] string*[@t{n-ccs}]
+
X5 @result{} byte*33 int[@t{n}] int*[@t{n}]
X6 @result{}
01 00 (03 @math{|} 04) 00 00 00
string[@t{command}] string[@t{subcommand}]
string[@t{language}] string[@t{charset}] string[@t{locale}]
- (00 @math{|} 01) 00 (00 @math{|} 01) (00 @math{|} 01)
+ (00 @math{|} 01) 00 bool bool
int[@t{epoch}]
byte[@t{decimal}] byte[@t{grouping}]
- byte*8 01
- (string[@t{dataset}] string[@t{data file}] i0 int i0)?
- int[@t{n-ccs}] string*[@t{n-ccs}]
- 2e (00 @math{|} 01) (i2000000 i0)?
+ double[@t{small}] 01
+ (string[@t{dataset}] string[@t{datafile}] i0 int[@t{date}] i0)?
+ CustomCurrency
+ byte[@t{missing}] bool (i2000000 i0)?
@end format
@end cartouche
-Observed values of @code{n4} vary from 0 to 17. Out of 7,060 examples
-in the corpus, it is nonzero only 36 times.
+If @code{nwidths} is nonzero, then the accompanying integers are
+column widths as manually adjusted by the user. (Row heights are
+computed automatically based on the widths.)
@code{encoding} is a character encoding, usually a Windows code page
such as @code{en_US.windows-1252} or @code{it_IT.windows-1252}. The
@code{epoch} is the year that starts the epoch. A 2-digit year is
interpreted as belonging to the 100 years beginning at the epoch. The
default epoch year is 69 years prior to the current year; thus, in
-2017 this field by default contains 1948. In the corpus, @t{epoch}
+2017 this field by default contains 1948. In the corpus, @code{epoch}
ranges from 1943 to 1948, plus some contain -1.
@code{decimal} is the decimal point character. The observed values
@samp{'} (apostrophe), @samp{ } (space), and zero (presumably
indicating that digits should not be grouped).
+@code{dataset} is the name of the dataset analyzed to produce the
+output, e.g.@: @code{DataSet1}, and @code{datafile} the name of the
+file it was read from, e.g.@: @file{C:\Users\foo\bar.sav}. The latter
+is sometimes the empty string.
+
+@code{date} is a date, as seconds since the epoch, i.e.@: since
+January 1, 1970. Pivot tables within an SPV files often have dates a
+few minutes apart, so this is probably a creation date for the tables
+rather than for the file.
+
+Sometimes @code{dataset}, @code{datafile}, and @code{date} are present
+and other times they are absent. The reader can distinguish by
+assuming that they are present and then checking whether the
+presumptive @code{dataset} contains a null byte (a valid string never
+will).
+
@code{n-ccs} is observed as either 0 or 5. When it is 5, the
following strings are CCA through CCE format strings. @xref{Custom
Currency Formats,,, pspp, PSPP}. Most commonly these are all
v3(count(FormatString Style ValueModUnknown))
@math{|} 31 int[@t{n-refs}] int16*[@t{n-refs}] Format
@math{|} 58
-Style @result{} 58 @math{|} 31 01? 00? 00? 00? 01 string[@t{fgcolor}] string[@t{bgcolor}] string[@t{typeface}] byte
+
+Style @result{}
+ 58
+ @math{|} 31
+ bool[@t{bold}] bool[@t{italic}] bool[@t{underline}] bool
+ string[@t{fgcolor}] string[@t{bgcolor}]
+ string[@t{typeface}] byte[@t{size}]
+
Format @result{} 00 00 count(FormatString Style 58)
+
FormatString @result{} count((i0 (58 @math{|} 31 string))?)
-ValueModUnknown @result{} 58 @math{|} 31 i0 i0 i0 i0 01 00 (01 @math{|} 02 @math{|} 08) 00 08 00 0a 00)
+
+ValueModUnknown @result{}
+ 58
+ @math{|} 31 int[@t{halign}] int[@t{valign}] double[@t{offset}]
+ int16[@t{left-margin}] int16[@t{right-margin}]
+ int16[@t{top-margin}] int16[@t{bottom-margin}]
@end format
@end cartouche
Format is nested.
The Style, if present, changes the style for this individual Value.
+The @code{size} is a font size in units of 1/96 inch.
+
+@code{halign} is 0 for center, 2 for left, 4 for right, 6 for decimal,
+0xffffffad for mixed. For decimal alignment, @code{offset} is the
+decimal point's offset from the right side of the cell, in units of
+1/72 inch.
+
+@code{valign} specifies vertical alignment: 0 for center, 1 for top, 3
+for bottom.
+
+@code{left-margin}, @code{right-margin}, @code{top-margin}, and
+@code{bottom-margin} are in units of 1/72 inch.
@node SPV Legacy Detail Member Binary Format
@section Legacy Detail Member Binary Format