Change license from GPLv2+ to GPLv3+.
[pspp-builds.git] / doc / data-file-format.texi
1 @node Data File Format
2 @appendix Data File Format
3
4 PSPP necessarily uses the same format for system files as do the
5 products with which it is compatible.  This chapter is a description of
6 that format.
7
8 There are three data types used in system files: 32-bit integers, 64-bit
9 floating points, and 1-byte characters.  In this document these will
10 simply be referred to as @code{int32}, @code{flt64}, and @code{char},
11 the names that are used in the PSPP source code.  Every field of type
12 @code{int32} or @code{flt64} is aligned on a 32-bit boundary relative to 
13 the start of the record.
14
15 The endianness of data in PSPP system files is not specified.  System
16 files output on a computer of a particular endianness will have the
17 endianness of that computer.  However, PSPP can read files of either
18 endianness, regardless of its host computer's endianness.  PSPP
19 translates endianness for both integer and floating point numbers.
20
21 Floating point formats are also not specified.  PSPP does not
22 translate between floating point formats.  This is unlikely to be a
23 problem as all modern computer architectures use IEEE 754 format for
24 floating point representation.
25
26 The PSPP system-missing value is represented by the largest possible
27 negative number in the floating point format; in C, this is most likely
28 @code{-DBL_MAX}.  There are two other important values used in missing
29 values: @code{HIGHEST} and @code{LOWEST}.  These are represented by the
30 largest possible positive number (probably @code{DBL_MAX}) and the
31 second-largest negative number.  The latter must be determined in a
32 system-dependent manner; in IEEE 754 format it is represented by value
33 @code{0xffeffffffffffffe}.
34
35 System files are divided into records.  Each record begins with an
36 @code{int32} giving a numeric record type.  Individual record types are
37 described below:
38
39 @menu
40 * File Header Record::          
41 * Variable Record::             
42 * Value Label Record::          
43 * Value Label Variable Record::  
44 * Document Record::             
45 * Machine int32 Info Record::   
46 * Machine flt64 Info Record::   
47 * Auxiliary Variable Parameter Record::
48 * Long Variable Names Record::
49 * Very Long String Length Record::
50 * Miscellaneous Informational Records::  
51 * Dictionary Termination Record::  
52 * Data Record::                 
53 @end menu
54
55 @node File Header Record
56 @section File Header Record
57
58 The file header is always the first record in the file.
59
60 @example
61 struct sysfile_header
62   @{
63     char                rec_type[4];
64     char                prod_name[60];
65     int32               layout_code;
66     int32               nominal_case_size;
67     int32               compressed;
68     int32               weight_index;
69     int32               ncases;
70     flt64               bias;
71     char                creation_date[9];
72     char                creation_time[8];
73     char                file_label[64];
74     char                padding[3];
75   @};
76 @end example
77
78 @table @code
79 @item char rec_type[4];
80 Record type code.  Always set to @samp{$FL2}.  This is the only record
81 for which the record type is not of type @code{int32}.
82
83 @item char prod_name[60];
84 Product identification string.  This always begins with the characters
85 @samp{@@(#) SPSS DATA FILE}.  PSPP uses the remaining characters to
86 give its version and the operating system name; for example, @samp{GNU
87 pspp 0.1.4 - sparc-sun-solaris2.5.2}.  The string is truncated if it
88 would be longer than 60 characters; otherwise it is padded on the right
89 with spaces.
90
91 @item int32 layout_code;
92 Always set to 2.  PSPP reads this value to determine the
93 file's endianness.
94
95 @item int32 nominal_case_size;
96 Number of data elements per case.  This is the number of variables,
97 except that long string variables add extra data elements (one for every
98 8 characters after the first 8).  However, string variables do not 
99 contribute to this value beyond the first 255 bytes.   Further, system
100 files written by some systems set this value to -1.  In general, it is
101 unsafe for systems reading system files to rely upon this value.
102
103 @item int32 compressed;
104 Set to 1 if the data in the file is compressed, 0 otherwise.
105
106 @item int32 weight_index;
107 If one of the variables in the data set is used as a weighting variable,
108 set to the index of that variable.  Otherwise, set to 0.
109
110 @item int32 ncases;
111 Set to the number of cases in the file if it is known, or -1 otherwise.
112
113 In the general case it is not possible to determine the number of cases
114 that will be output to a system file at the time that the header is
115 written.  The way that this is dealt with is by writing the entire
116 system file, including the header, then seeking back to the beginning of
117 the file and writing just the @code{ncases} field.  For `files' in which
118 this is not valid, the seek operation fails.  In this case,
119 @code{ncases} remains -1.
120
121 @item flt64 bias;
122 Compression bias.  Always set to 100.  The significance of this value is
123 that only numbers between @code{(1 - bias)} and @code{(251 - bias)} can
124 be compressed.
125
126 @item char creation_date[9];
127 Set to the date of creation of the system file, in @samp{dd mmm yy}
128 format, with the month as standard English abbreviations, using an
129 initial capital letter and following with lowercase.  If the date is not
130 available then this field is arbitrarily set to @samp{01 Jan 70}.
131
132 @item char creation_time[8];
133 Set to the time of creation of the system file, in @samp{hh:mm:ss}
134 format and using 24-hour time.  If the time is not available then this
135 field is arbitrarily set to @samp{00:00:00}.
136
137 @item char file_label[64];
138 Set the file label declared by the user, if any (@pxref{FILE LABEL}).
139 Padded on the right with spaces.
140
141 @item char padding[3];
142 Ignored padding bytes to make the structure a multiple of 32 bits in
143 length.  Set to zeros.
144 @end table
145
146 @node Variable Record
147 @section Variable Record
148
149 Immediately following the header must come the variable records.  There
150 must be one variable record for every variable and every 8 characters in
151 a long string beyond the first 8.
152
153 @example
154 struct sysfile_variable
155   @{
156     int32               rec_type;
157     int32               type;
158     int32               has_var_label;
159     int32               n_missing_values;
160     int32               print;
161     int32               write;
162     char                name[8];
163
164     /* The following two fields are present 
165        only if has_var_label is 1. */
166     int32               label_len;
167     char                label[/* variable length */];
168
169     /* The following field is present only
170        if n_missing_values is not 0. */
171     flt64               missing_values[/* variable length */];
172   @};
173 @end example
174
175 @table @code
176 @item int32 rec_type;
177 Record type code.  Always set to 2.
178
179 @item int32 type;
180 Variable type code.  Set to 0 for a numeric variable.  For a short
181 string variable or the first part of a long string variable, this is set
182 to the width of the string.  For the second and subsequent parts of a
183 long string variable, set to -1, and the remaining fields in the
184 structure are ignored.
185
186 @item int32 has_var_label;
187 If this variable has a variable label, set to 1; otherwise, set to 0.
188
189 @item int32 n_missing_values;
190 If the variable has no missing values, set to 0.  If the variable has
191 one, two, or three discrete missing values, set to 1, 2, or 3,
192 respectively.  If the variable has a range for missing variables, set to
193 -2; if the variable has a range for missing variables plus a single
194 discrete value, set to -3.
195
196 @item int32 print;
197 Print format for this variable.  See below.
198
199 @item int32 write;
200 Write format for this variable.  See below.
201
202 @item char name[8];
203 Variable name.  The variable name must begin with a capital letter or
204 the at-sign (@samp{@@}).  Subsequent characters may also be digits, octothorpes
205 (@samp{#}), dollar signs (@samp{$}), underscores (@samp{_}), or full
206 stops (@samp{.}).  The variable name is padded on the right with spaces.
207
208 @item int32 label_len;
209 This field is present only if @code{has_var_label} is set to 1.  It is
210 set to the length, in characters, of the variable label, which must be a
211 number between 0 and 120.
212
213 @item char label[/* variable length */];
214 This field is present only if @code{has_var_label} is set to 1.  It has
215 length @code{label_len}, rounded up to the nearest multiple of 32 bits.
216 The first @code{label_len} characters are the variable's variable label.
217
218 @item flt64 missing_values[/* variable length */];
219 This field is present only if @code{n_missing_values} is not 0.  It has
220 the same number of elements as the absolute value of
221 @code{n_missing_values}.  For discrete missing values, each element
222 represents one missing value.  When a range is present, the first
223 element denotes the minimum value in the range, and the second element
224 denotes the maximum value in the range.  When a range plus a value are
225 present, the third element denotes the additional discrete missing
226 value.  HIGHEST and LOWEST are indicated as described in the chapter
227 introduction.
228 @end table
229
230 The @code{print} and @code{write} members of sysfile_variable are output
231 formats coded into @code{int32} types.  The LSB (least-significant byte)
232 of the @code{int32} represents the number of decimal places, and the
233 next two bytes in order of increasing significance represent field width
234 and format type, respectively.  The MSB (most-significant byte) is not
235 used and should be set to zero.
236
237 Format types are defined as follows:
238 @table @asis
239 @item 0
240 Not used.
241 @item 1
242 @code{A}
243 @item 2
244 @code{AHEX}
245 @item 3
246 @code{COMMA}
247 @item 4
248 @code{DOLLAR}
249 @item 5
250 @code{F}
251 @item 6
252 @code{IB}
253 @item 7
254 @code{PIBHEX}
255 @item 8
256 @code{P}
257 @item 9
258 @code{PIB}
259 @item 10
260 @code{PK}
261 @item 11
262 @code{RB}
263 @item 12
264 @code{RBHEX}
265 @item 13
266 Not used.
267 @item 14
268 Not used.
269 @item 15
270 @code{Z}
271 @item 16
272 @code{N}
273 @item 17
274 @code{E}
275 @item 18
276 Not used.
277 @item 19
278 Not used.
279 @item 20
280 @code{DATE}
281 @item 21
282 @code{TIME}
283 @item 22
284 @code{DATETIME}
285 @item 23
286 @code{ADATE}
287 @item 24
288 @code{JDATE}
289 @item 25
290 @code{DTIME}
291 @item 26
292 @code{WKDAY}
293 @item 27
294 @code{MONTH}
295 @item 28
296 @code{MOYR}
297 @item 29
298 @code{QYR}
299 @item 30
300 @code{WKYR}
301 @item 31
302 @code{PCT}
303 @item 32
304 @code{DOT}
305 @item 33
306 @code{CCA}
307 @item 34
308 @code{CCB}
309 @item 35
310 @code{CCC}
311 @item 36
312 @code{CCD}
313 @item 37
314 @code{CCE}
315 @item 38
316 @code{EDATE}
317 @item 39
318 @code{SDATE}
319 @end table
320
321 @node Value Label Record
322 @section Value Label Record
323
324 Value label records must follow the variable records and must precede
325 the header termination record.  Other than this, they may appear
326 anywhere in the system file.  Every value label record must be
327 immediately followed by a label variable record, described below.
328
329 Value label records begin with @code{rec_type}, an @code{int32} value
330 set to the record type of 3.  This is followed by @code{count}, an
331 @code{int32} value set to the number of value labels present in this
332 record.
333
334 These two fields are followed by a series of @code{count} tuples.  Each
335 tuple is divided into two fields, the value and the label.  The first of
336 these, the value, is composed of a 64-bit value, which is either a
337 @code{flt64} value or up to 8 characters (padded on the right to 8
338 bytes) denoting a short string value.  Whether the value is a
339 @code{flt64} or a character string is not defined inside the value label
340 record.
341
342 The second field in the tuple, the label, has variable length.  The
343 first @code{char} is a count of the number of characters in the value
344 label.  The remainder of the field is the label itself.  The field is
345 padded on the right to a multiple of 64 bits in length.
346
347 @node Value Label Variable Record
348 @section Value Label Variable Record
349
350 Every value label variable record must be immediately preceded by a
351 value label record, described above.
352
353 @example
354 struct sysfile_value_label_variable
355   @{
356      int32              rec_type;
357      int32              count;
358      int32              vars[/* variable length */];
359   @};
360 @end example
361
362 @table @code
363 @item int32 rec_type;
364 Record type.  Always set to 4.
365
366 @item int32 count;
367 Number of variables that the associated value labels from the value
368 label record are to be applied.
369
370 @item int32 vars[/* variable length */];
371 A list of variables to which to apply the value labels.  There are
372 @code{count} elements.  Each element identifies a variable record, where
373 the first element is numbered 1 and long string variables are considered
374 to occupy multiple indexes.
375 @end table
376
377 @node Document Record
378 @section Document Record
379
380 There must be no more than one document record per system file.
381 Document records must follow the variable records and precede the
382 dictionary termination record.
383
384 @example
385 struct sysfile_document
386   @{
387     int32               rec_type;
388     int32               n_lines;
389     char                lines[/* variable length */][80];
390   @};
391 @end example
392
393 @table @code
394 @item int32 rec_type;
395 Record type.  Always set to 6.
396
397 @item int32 n_lines;
398 Number of lines of documents present.
399
400 @item char lines[/* variable length */][80];
401 Document lines.  The number of elements is defined by @code{n_lines}.
402 Lines shorter than 80 characters are padded on the right with spaces.
403 @end table
404
405 @node Machine int32 Info Record
406 @section Machine @code{int32} Info Record
407
408 There must be no more than one machine @code{int32} info record per
409 system file.  Machine @code{int32} info records must follow the variable
410 records and precede the dictionary termination record.
411
412 @example
413 struct sysfile_machine_int32_info
414   @{
415     /* Header. */
416     int32               rec_type;
417     int32               subtype;
418     int32               size;
419     int32               count;
420
421     /* Data. */
422     int32               version_major;
423     int32               version_minor;
424     int32               version_revision;
425     int32               machine_code;
426     int32               floating_point_rep;
427     int32               compression_code;
428     int32               endianness;
429     int32               character_code;
430   @};
431 @end example
432
433 @table @code
434 @item int32 rec_type;
435 Record type.  Always set to 7.
436
437 @item int32 subtype;
438 Record subtype.  Always set to 3.
439
440 @item int32 size;
441 Size of each piece of data in the data part, in bytes.  Always set to 4.
442
443 @item int32 count;
444 Number of pieces of data in the data part.  Always set to 8.
445
446 @item int32 version_major;
447 PSPP major version number.  In version @var{x}.@var{y}.@var{z}, this
448 is @var{x}.
449
450 @item int32 version_minor;
451 PSPP minor version number.  In version @var{x}.@var{y}.@var{z}, this
452 is @var{y}.
453
454 @item int32 version_revision;
455 PSPP version revision number.  In version @var{x}.@var{y}.@var{z},
456 this is @var{z}.
457
458 @item int32 machine_code;
459 Machine code.  PSPP always set this field to value to -1, but other
460 values may appear.
461
462 @item int32 floating_point_rep;
463 Floating point representation code.  For IEEE 754 systems this is 1.
464 IBM 370 sets this to 2, and DEC VAX E to 3.
465
466 @item int32 compression_code;
467 Compression code.  Always set to 1.
468
469 @item int32 endianness;
470 Machine endianness.  1 indicates big-endian, 2 indicates little-endian.
471
472 @item int32 character_code;
473 Character code.  1 indicates EBCDIC, 2 indicates 7-bit ASCII, 3
474 indicates 8-bit ASCII, 4 indicates DEC Kanji.
475 Windows code page numbers are also valid.
476 @end table
477
478 @node Machine flt64 Info Record
479 @section Machine @code{flt64} Info Record
480
481 There must be no more than one machine @code{flt64} info record per
482 system file.  Machine @code{flt64} info records must follow the variable
483 records and precede the dictionary termination record.
484
485 @example
486 struct sysfile_machine_flt64_info
487   @{
488     /* Header. */
489     int32               rec_type;
490     int32               subtype;
491     int32               size;
492     int32               count;
493
494     /* Data. */
495     flt64               sysmis;
496     flt64               highest;
497     flt64               lowest;
498   @};
499 @end example
500
501 @table @code
502 @item int32 rec_type;
503 Record type.  Always set to 7.
504
505 @item int32 subtype;
506 Record subtype.  Always set to 4.
507
508 @item int32 size;
509 Size of each piece of data in the data part, in bytes.  Always set to 8.
510
511 @item int32 count;
512 Number of pieces of data in the data part.  Always set to 3.
513
514 @item flt64 sysmis;
515 The system missing value.
516
517 @item flt64 highest;
518 The value used for HIGHEST in missing values.
519
520 @item flt64 lowest;
521 The value used for LOWEST in missing values.
522 @end table
523
524 @node Auxiliary Variable Parameter Record
525 @section Auxiliary Variable Parameter Record
526
527 There must be no more than one auxiliary variable parameter record per
528 system file.  This  record must follow the variable
529 records and precede the dictionary termination record.
530
531 @example
532 struct sysfile_aux_var_parameter
533   @{
534     /* Header. */
535     int32               rec_type;
536     int32               subtype;
537     int32               size;
538     int32               count;
539
540     /* Data. */
541     struct aux_params   aux_params[/* variable length */];
542   @};
543 @end example
544
545 @table @code
546 @item int32 rec_type;
547 Record type.  Always set to 7.
548
549 @item int32 subtype;
550 Record subtype.  Always set to 11.
551
552 @item int32 size;
553 The size  @code{int32}. Always set to 4.
554
555 @item int32 count;
556 The total number of records in @code{aux_params}, multiplied by 3.
557
558 @item struct aux_params aux_params[];
559 An array of @code{struct aux_params}.   The order of the elements corresponds 
560 to the order of the variables in the Variable Records.  No element
561 corresponds to variable records that continue long string variables.
562 The @code{struct aux_params} type is defined as follows:
563
564 @example
565 struct aux_params
566   @{
567     int32 measure;
568     int32 width;
569     int32 alignment;
570   @};
571 @end example
572
573 @table @code
574 @item int32 measure
575 The measurement type of the variable:  
576 @table @asis
577 @item 1
578 Nominal Scale
579 @item 2
580 Ordinal Scale
581 @item 3
582 Continuous Scale
583 @end table
584
585 Occasionally a value of 0 is seen here.  PSPP interprets this to mean
586 a nominal scale.
587
588 @item int32 width
589 The width of the display column for the variable in characters.
590
591 @item int32 alignment 
592 The alignment of the variable for display purposes:
593
594 @table @asis
595 @item 0
596 Left aligned
597 @item 1
598 Right aligned
599 @item 2
600 Centre aligned
601 @end table
602
603 @end table
604
605
606
607 @end table
608
609
610
611 @node Long Variable Names Record
612 @section Long Variable Names Record
613
614 There must be no more than one long variable names record per
615 system file.  This  record must follow the variable
616 records and precede the dictionary termination record.
617
618 @example
619 struct sysfile_long_variable_names
620   @{
621     /* Header. */
622     int32               rec_type;
623     int32               subtype;
624     int32               size;
625     int32               count;
626
627     /* Data. */
628     char                var_name_pairs[/* variable length */];
629   @};
630 @end example
631
632 @table @code
633 @item int32 rec_type;
634 Record type.  Always set to 7.
635
636 @item int32 subtype;
637 Record subtype.  Always set to 13.
638
639 @item int32 size;
640 The size of each element in the @code{var_name_pairs} member. Always set to 1.
641
642 @item int32 count;
643 The total number of bytes in @code{var_name_pairs}.
644
645 @item char var_name_pairs[/* variable length */];
646 A list of @var{key}--@var{value} tuples, where @var{key} is the name
647 of a variable, and @var{value} is its long variable name. 
648 The @var{key} field is at most 8 bytes long and must match the
649 name of a variable which appears in the variable record (@pxref{Variable
650 Record}).
651 The @var{value} field is at most 64 bytes long.
652 The @var{key} and @var{value} fields are separated by a @samp{=} byte.
653 Each tuple is separated by a byte whose value is 09.  There is no
654 trailing separator following the last tuple.
655 The total length is @code{count} bytes.
656 @end table
657
658 @node Very Long String Length Record
659 @comment  node-name,  next,  previous,  up
660 @section Very Long String Length Record
661
662
663 There must be no more than one very long string length record per
664 system file.  This  record must follow the variable records and precede the 
665 dictionary termination record. 
666
667 @example
668 struct sysfile_very_long_string_lengths
669   @{
670     /* Header. */
671     int32               rec_type;
672     int32               subtype;
673     int32               size;
674     int32               count;
675
676     /* Data. */
677     char                string_lengths[/* variable length */];
678   @};
679 @end example
680
681 @table @code
682 @item int32 rec_type;
683 Record type.  Always set to 7.
684
685 @item int32 subtype;
686 Record subtype.  Always set to 14.
687
688 @item int32 size;
689 The size of each element in the @code{string_lengths} member. Always set to 1.
690
691 @item int32 count;
692 The total number of bytes in @code{string_lengths}.
693
694 @item char string_lengths[/* variable length */];
695 A list of @var{key}--@var{value} tuples, where @var{key} is the name
696 of a variable, and @var{value} is its length.
697 The @var{key} field is at most 8 bytes long and must match the
698 name of a variable which appears in the variable record (@pxref{Variable
699 Record}).
700 The @var{value} field is exactly 5 bytes long. It is a zero-padded,
701 ASCII-encoded string that is the length of the variable.
702 The @var{key} and @var{value} fields are separated by a @samp{=} byte.
703 Tuples are delimited by a two-byte sequence @{00, 09@}.  
704 After the last tuple, there may be a single byte 00, or @{00, 09@}.  
705 The total length is @code{count} bytes.
706 @end table
707
708
709
710 @node Miscellaneous Informational Records
711 @section Miscellaneous Informational Records
712
713 Miscellaneous informational records must follow the variable records and
714 precede the dictionary termination record.
715
716 Some specific types of miscellaneous informational records are
717 documented here, but others are known to exist.  PSPP ignores unknown
718 miscellaneous informational records when reading system files.
719
720 @example
721 struct sysfile_misc_info
722   @{
723     /* Header. */
724     int32               rec_type;
725     int32               subtype;
726     int32               size;
727     int32               count;
728
729     /* Data. */
730     char                data[/* variable length */];
731   @};
732 @end example
733
734 @table @code
735 @item int32 rec_type;
736 Record type.  Always set to 7.
737
738 @item int32 subtype;
739 Record subtype.  May take any value.  According to Aapi
740 H@"am@"al@"ainen, value 5 indicates a set of grouped variables and 6
741 indicates date info (probably related to USE).
742
743 @item int32 size;
744 Size of each piece of data in the data part.  Should have the value 4 or
745 8, for @code{int32} and @code{flt64}, respectively.
746
747 @item int32 count;
748 Number of pieces of data in the data part.
749
750 @item char data[/* variable length */];
751 Arbitrary data.  There must be @code{size} times @code{count} bytes of
752 data.
753 @end table
754
755 @node Dictionary Termination Record
756 @section Dictionary Termination Record
757
758 The dictionary termination record must follow all other records, except
759 for the actual cases, which it must precede.  There must be exactly one
760 dictionary termination record in every system file.
761
762 @example
763 struct sysfile_dict_term
764   @{
765     int32               rec_type;
766     int32               filler;
767   @};
768 @end example
769
770 @table @code
771 @item int32 rec_type;
772 Record type.  Always set to 999.
773
774 @item int32 filler;
775 Ignored padding.  Should be set to 0.
776 @end table
777
778 @node Data Record
779 @section Data Record
780
781 Data records must follow all other records in the data file.  There must
782 be at least one data record in every system file.
783
784 The format of data records varies depending on whether the data is
785 compressed.  Regardless, the data is arranged in a series of 8-byte
786 elements.
787
788 When data is not compressed, 
789 each element corresponds to
790 the variable declared in the respective variable record (@pxref{Variable
791 Record}).  Numeric values are given in @code{flt64} format; string
792 values are literal characters string, padded on the right when
793 necessary.
794
795 Compressed data is arranged in the following manner: the first 8-byte
796 element in the data section is divided into a series of 1-byte command
797 codes.  These codes have meanings as described below:
798
799 @table @asis
800 @item 0
801 Ignored.  If the program writing the system file accumulates compressed
802 data in blocks of fixed length, 0 bytes can be used to pad out extra
803 bytes remaining at the end of a fixed-size block.
804
805 @item 1 through 251
806 These values indicate that the corresponding numeric variable has the
807 value @code{(@var{code} - @var{bias})} for the case being read, where
808 @var{code} is the value of the compression code and @var{bias} is the
809 variable @code{compression_bias} from the file header.  For example,
810 code 105 with bias 100.0 (the normal value) indicates a numeric variable
811 of value 5.
812
813 @item 252
814 End of file.  This code may or may not appear at the end of the data
815 stream.  PSPP always outputs this code but its use is not required.
816
817 @item 253
818 This value indicates that the numeric or string value is not
819 compressible.  The value is stored in the 8-byte element following the
820 current block of command bytes.  If this value appears twice in a block
821 of command bytes, then it indicates the second element following the
822 command bytes, and so on.
823
824 @item 254
825 Used to indicate a string value that is all spaces.
826
827 @item 255
828 Used to indicate the system-missing value.
829 @end table
830
831 When the end of the first 8-byte element of command bytes is reached,
832 any blocks of non-compressible values are skipped, and the next element
833 of command bytes is read and interpreted, until the end of the file is
834 reached.
835 @setfilename ignored