-
Notifications
You must be signed in to change notification settings - Fork 0
/
saucespec.html
4158 lines (4139 loc) · 111 KB
/
saucespec.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<title>SAUCE - Standard Architecture for Universal Comment Extensions - Revision 5
</title>
<meta name="author" content="Olivier Reubens (Tasmaniac / ACiD)" />
<style type="text/css">
body
{
font: 12pt arial,sans-serif;
padding-left: 1em;
}
h1
{
font-size: 150%;
font-weight: bold;
}
h2
{
font-size: 125%;
font-weight: bold;
}
h3
{
font-size: 110%;
font-weight: bold;
}
h4
{
font-size: 105%;
font-weight: bold;
margin-bottom: .5em; /* allows following <p> and <h3> close in. */
}
table.data
{
border: 2px solid #e0e0e0;
font: 10pt arial,sans-serif;
}
table.data thead td
{
background-color: #b0b0b0;
font-weight: bold;
}
table.data td
{
background-color: #e0e0e0;
padding: 0 0.5em 0 0.5em;
}
table.bitfield
{
border-collapse: collapse;
font: 10pt arial,sans-serif;
}
table.bitfield td
{
border: 1px solid black;
padding: 0 0.5em 0 0.5em;
}
td.nowrap
{
white-space: nowrap;
}
p
{
max-width: 45em;
text-align: justify;
}
ol, ul
{
padding-left: 2em;
margin-top: 0;
max-width: 43em; /* width of <p> minus padding-left of <ol> */
text-align: justify;
margin-bottom: 0;
}
ol ul
{
padding-left: 2em;
margin-top: 0;
max-width: 41em; /* width of <p> minus cumulative padding-left of <ol> and <ul> */
text-align: justify;
}
ol ul ul
{
padding-left: 2em;
margin-top: 0;
max-width: 39em; /* width of <p> minus cumulative padding-left of <ol> and 2x<ul> */
text-align: justify;
}
pre.Code
{
}
span.Formula
{
font: 10pt arial,sans-serif;
font-style: italic;
}
span.Code
{
font: 10pt consolas, "courier new" , courier, monospace;
white-space: nowrap;
}
</style>
</head>
<body>
<h1>
SAUCE – Standard Architecture for Universal Comment Extensions</h1>
<address class="author">
by Olivier "Tasmaniac" Reubens / ACiD</address>
<p>
The Standard Architecture for Universal Comment Extensions or SAUCE as it is more
commonly known, is an architecture or protocol for attaching meta data or comments
to files. Mainly intended for ANSI art files, SAUCE has always had provisions for
many different file types.
</p>
<h2>
Why SAUCE?</h2>
<p>
In the early 1990s there was a growing popularity in ANSI artwork. The ANSI art
groups regularly released the works of their members over a certain period. Some
of the bigger groups also included specialised viewers in each ‘artpack’.
One of the problems with these artpacks was a lack of standardized way to provide
meta data to the art, such as the title of the artwork, the author, the group, ...
Some of the specialised viewers provided such information for a specific artpack
either by encoding it as part of the executable, or by having some sort of database
or list. However every viewer did it their own way. This meant you either had to
use the viewer included with the artpack, or had to make do without the extra info.
SAUCE was created to address that need. So if you wanted to, you could use your
prefered viewer to view the art in a certain artpack, or even store the art files
you liked in a separate folder while retaining the meta data.
</p>
<p>
The goal was simple, but the way to get there certainly was not. Logistically, we
wanted as many art groups as possible to support it. Technically, we wanted a system
that was easy to implement and – if at all possible – manage to provide
this meta data while still being compatible with all the existing software such
as ANSI viewers, and Bulletin Board Software.
</p>
<h2>
The SAUCE Legacy</h2>
<p>
SAUCE was created in 1994 and it continues to be in use today as a de facto standard
within the ANSI art community. However, being created so many years ago, some of
the common assumptions made back then are now cause for confusion. This document
is a revised edition of the SAUCE specifications; slightly more formal and in a
fresh HTML format. This specification is still compatible with the original, some
of the legacy confusions are explicitly addressed, and a few new features have been
added.
</p>
<p>
The ‘born from DOS’ nature explains some of the limits of SAUCE. The
Title, Author and Group fields are so short because part of the original design
idea was that the DOS filename, title and author needed to fit on a single line
in text mode while still leaving some space so you could create a decent UI to select
the files in the ANSI viewers. Limitations were also designed around what video
cards could do in text mode.
<br />
The specialised viewers in the various ANSI artpacks also explain why it was possible
to add SAUCE to some files even though the file format really does not like it when
you just add a load of extra bytes at the end. The SAUCE-aware viewer could account
for the SAUCE and still render the file properly, even if the applications used
to edit those files regarded the file as corrupt. In such an event, it was easy
enough to remove the SAUCE.
</p>
<p>
SAUCE is not a perfect solution, but at the time – and with a bit of friendly
pressure from the right folks – it managed to fulfill what it was designed
to do.
</p>
<h2>
SAUCE applied to a file
</h2>
<p>
Applied to a file, SAUCE has 4 parts: The original file contents, an End-Of-File
or EOF character (Decimal 26, Hex 1A, Ctrl+Z), an optional comment block and the
SAUCE record.
</p>
<p>
The EOF character is an important part of what makes SAUCE work for text files.
When processing a text file, the DOS / Windows TYPE command, most BBS terminal software
and ANSI-viewers will all stop processing at the end of the file or when a EOF character
is encountered with the EOF character itself not being rendered.
</p>
<h3>
Writing SAUCE to a file</h3>
<p>
Adding SAUCE to a file that does not already contain SAUCE is straightforward. First,
you prepare the SAUCE record and optionally the comment block. You open the file
you want to add SAUCE to, you append the EOF character, if needed you append the
comment block and you append the SAUCE record.
</p>
<p>
Updating a file that already has SAUCE, can be easy as well if you only want to
change some fields in the SAUCE record or change existing comment lines. Things
become slightly tricky if you want to add a comment block when there was no comment
block before, or if the new comment block has a different number of lines than the
old one. The simple solution in such a case is to remove the old SAUCE then add
the new SAUCE you want. This involves truncating a file, which depending on the
language / library / OS can be a matter of a simple function call, or might involve
copying the file contents without the SAUCE to a new file.
</p>
<h3>
Reading SAUCE from a file
</h3>
<p>
Reading SAUCE is equally easy. Read the last 128 bytes of the file into a SAUCE
record structure. If the ID is set to "SAUCE", then you can assume you have a file
that has SAUCE otherwise it does not. If you need the comment block as well, then
once you have the SAUCE record, you can check the Comment field and work your way
back to read the comment block.
</p>
<p>
Below you find some pseudo code to explain this. This code assumes a language that
can not handle variable records, so the comment block is read one line at a time.
In a language like C or C++ this can be handled with a single read.
</p>
<pre class="Code">
Variables:
Byte : Count;
Long : FileSize;
file : F;
Code:
Open_File(F); | Open the file for read access
FileSize = Size_of_file(F); | Determine file size
Seek_file (F, FileSize-128); | Seek to start of SAUCE (Eof-128)
Read_File (F, SAUCE); | Read the SAUCE record
IF SAUCE.ID="SAUCE" THEN | ID bytes match "SAUCE" ?
IF SAUCE.Comments>0 THEN | Is there a comment block ?
Seek_File(F, FileSize-128-(SAUCE.Comments*64)-5);
| Seek to start of Comment block.
Read_File(F, CommentID); | Read Comment ID.
IF CommentID="COMNT" THEN | Comment ID matches "COMNT" ?
FOR Count=1 to SAUCE.Comments | \ Read all comment lines.
Read_File(F, CommentLine) | /
ENDFOR
ELSE
Invalid_Comment; | Non fatal, No comment present.
ENDIF
ENDIF
ELSE
Invalid_SAUCE; | No valid SAUCE record was found.
ENDIF
</pre>
<h4>
Warning!</h4>
<p>
SAUCE was initially created for supporting only the ANSi and RIP formats. Since
those formats are ‘technically’ processed one character at a time, SAUCE
almost never interferes with how a program treats the files, reading and processing
should stop at the EOF character. Files that are treated in a similar way such as
ASCII, PCBoard, Avatar and ANSiMations equally tend to work unaffected even in programs
that are not SAUCE aware.
</p>
<p>
This is <b>not</b> true for all the other types of files SAUCE has DataType / FileType
values for however. Adding SAUCE to some of the other types of files may have serious
consequences on programs using those files. For this reason I would currently advise
against adding SAUCE to such files, unless there is a pressing reason to do so anyway.
</p>
<p>
If there are any requests for extending SAUCE to support additional file types,
such requests will only be honored if the file does not already have its own meta
data feature and it can be proven that SAUCE can safely be added from the typical
programs editing such files.
</p>
<h2>
SAUCE Layout</h2>
<p>
A SAUCE record is a structure of 128 bytes having the following layout:
</p>
<table class="data">
<thead>
<tr>
<td>
Field name
</td>
<td>
Type
</td>
<td>
Size
</td>
<td>
Description
</td>
<td>
Required <sup>[1]</sup>
</td>
<td>
Revision <sup>[2]</sup>
</td>
</tr>
</thead>
<tr>
<td>
ID
</td>
<td>
Character <sup>[3]</sup>
</td>
<td>
5
</td>
<td>
SAUCE identification.<br />
This should be equal to "SAUCE".<br />
</td>
<td>
yes
</td>
<td>
00.0
</td>
</tr>
<tr>
<td>
Version <sup>[6]</sup>
</td>
<td>
Character <sup>[3]</sup>
</td>
<td>
2
</td>
<td>
SAUCE version number, should be "00".<br />
</td>
<td>
yes
</td>
<td>
00.0
</td>
</tr>
<tr>
<td>
Title
</td>
<td>
Character <sup>[3]</sup>
</td>
<td>
35
</td>
<td>
The title of the file.
</td>
<td>
no
</td>
<td>
00.0
</td>
</tr>
<tr>
<td>
Author
</td>
<td>
Character <sup>[3]</sup>
</td>
<td>
20
</td>
<td>
The (nick)name or handle of the creator of the file.
</td>
<td>
no
</td>
<td>
00.0
</td>
</tr>
<tr>
<td>
Group
</td>
<td>
Character <sup>[3]</sup>
</td>
<td>
20
</td>
<td>
The name of the group or company the creator is employed by.
</td>
<td>
no
</td>
<td>
00.0
</td>
</tr>
<tr>
<td>
Date
</td>
<td>
Character <sup>[3]</sup>
</td>
<td>
8
</td>
<td>
The date the file was created.<br />
The format for the date is CCYYMMDD (century, year, month, day).<br />
Example: 4 may 2013 would be stored as "20130504".
</td>
<td>
no
</td>
<td>
00.0
</td>
</tr>
<tr>
<td>
FileSize
</td>
<td>
Unsigned <sup>[4]</sup>
</td>
<td>
4
</td>
<td>
The original file size not including the SAUCE information.
</td>
<td>
no <sup>[8]</sup>
</td>
<td>
00.0
</td>
</tr>
<tr>
<td>
DataType
</td>
<td>
Unsigned <sup>[4]</sup>
</td>
<td>
1
</td>
<td>
Type of data.
</td>
<td>
yes
</td>
<td>
00.0
</td>
</tr>
<tr>
<td>
FileType
</td>
<td>
Unsigned <sup>[4]</sup>
</td>
<td>
1
</td>
<td>
Type of file.
</td>
<td>
yes
</td>
<td>
00.0
</td>
</tr>
<tr>
<td>
TInfo1 <sup>[7]</sup>
</td>
<td>
Unsigned <sup>[4]</sup>
</td>
<td>
2
</td>
<td>
Type dependant numeric information field 1.
</td>
<td>
no
</td>
<td>
00.0
</td>
</tr>
<tr>
<td>
TInfo2 <sup>[7]</sup>
</td>
<td>
Unsigned <sup>[4]</sup>
</td>
<td>
2
</td>
<td>
Type dependant numeric information field 2.
</td>
<td>
no
</td>
<td>
00.0
</td>
</tr>
<tr>
<td>
TInfo3 <sup>[7]</sup>
</td>
<td>
Unsigned <sup>[4]</sup>
</td>
<td>
2
</td>
<td>
Type dependant numeric information field 3.
</td>
<td>
no
</td>
<td>
00.0
</td>
</tr>
<tr>
<td>
TInfo4 <sup>[7]</sup>
</td>
<td>
Unsigned <sup>[4]</sup>
</td>
<td>
2
</td>
<td>
Type dependant numeric information field 4.
</td>
<td>
no
</td>
<td>
00.0
</td>
</tr>
<tr>
<td>
Comments
</td>
<td>
Unsigned <sup>[4]</sup>
</td>
<td>
1
</td>
<td>
Number of lines in the extra SAUCE comment block.<br />
0 indicates no comment block is present.
</td>
<td>
no
</td>
<td>
00.0
</td>
</tr>
<tr>
<td>
TFlags <sup>[7]</sup>
</td>
<td>
Unsigned <sup>[4]</sup>
</td>
<td>
1
</td>
<td>
Type dependant flags.
</td>
<td>
no
</td>
<td>
00.1
</td>
</tr>
<tr>
<td>
TInfoS <sup>[7]</sup>
</td>
<td>
ZString <sup>[5]</sup>
</td>
<td>
22
</td>
<td>
Type dependant string information field
</td>
<td>
no
</td>
<td>
00.5
</td>
</tr>
</table>
<p>
A SAUCE comment block is an optional, variable sized structure that holds up to
255 lines of additional information, each line 64 characters wide. There are as
many comment lines as is mentioned in the Comments field of the SAUCE record. If
the Comments field is set to 0, there should not be a comment block at all. The
comment block has the following layout:
</p>
<table class="data">
<thead>
<tr>
<td>
Field name
</td>
<td>
Type
</td>
<td>
Size
</td>
<td>
Description
</td>
<td>
Required <sup>[1]</sup>
</td>
<td>
Revision <sup>[2]</sup>
</td>
</tr>
</thead>
<tr>
<td>
ID
</td>
<td>
Character <sup>[3]</sup>
</td>
<td>
5
</td>
<td>
SAUCE comment block identification.<br />
This should be equal to "COMNT".<br />
</td>
<td>
yes
</td>
<td>
00.0
</td>
</tr>
<tr>
<td>
Comment Line 1
</td>
<td>
Character <sup>[3]</sup>
</td>
<td>
64
</td>
<td>
Line of text.
</td>
<td>
yes
</td>
<td>
00.0
</td>
</tr>
<tr>
<td>
...
</td>
<td>
</td>
<td>
</td>
<td>
</td>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td>
Comment Line x
</td>
<td>
Character <sup>[3]</sup>
</td>
<td>
64
</td>
<td>
Line of text.<br />
</td>
<td>
yes
</td>
<td>
00.0
</td>
</tr>
</table>
<h4>
Notes:</h4>
<ol>
<li>You need to provide a correct value for all required fields. A non-required field
should either be set to the correct value, or when not used should be filled with
spaces for the Character fields, set to 0 for the Unsigned fields or filled with
binary zeroes for the ZString field.</li>
<li>The <a href="#RevisionHistory">revision</a> this field was introduced. Before its
introduction, it was a filler and should have been set to binary 0. </li>
<li>The Character type is a string of characters encoded according to code page 437
(IBM PC / OEM ASCII). It is neither a pascal type string with a leading length byte
nor is it a C-style string with a trailing terminator character. Any value shorter
than the available length should be padded with spaces.
<ul>
<li>A Character field should be filled with spaces to indicate it is empty / unused.</li>
<li>Example: the ID field is 5 bytes long and contains the string "SAUCE".</li>
<li>I have seen SAUCE where Character fields were terminated with a binary 0 with the
remainder containing garbage. When making a SAUCE reader, it is a good idea to properly
handle this case. When writing SAUCE, stick with space padding.</li>
<li>Character fields should contain only plain text, do not insert formatting codes
such as ansi escape codes, pcboard color codes, html tags, ...</li>
<li>Do not assume that a viewer will display this in a particular font or even if the
font is fixed width or not.</li>
<li>Prior to revision 5, the SAUCE specifications specified ‘ASCII characters’
which implies code page 437. There are ANSI files out there however where the artist
assumed an ANSI according to his native code page and also has SAUCE assumed as
such.</li>
</ul>
</li>
<li>An unsigned binary value of 1 byte (0 to 255), 2 bytes (0 to 65535) or 4 bytes (0
to 4294967295) stored in intel <a href="http://en.wikipedia.org/wiki/Little_endian#Little-endian">
little-endian</a> format.
<ul>
<li>Note that the FileSize field prior to revision 5 was listed as signed. This was
an artefact of Turbo Pascal – a dominant programming language in the early
1990s – supporting a signed integer of 4 bytes but not having an unsigned
integer of 4 bytes. Since a file size can never be negative, it is safe to assume
unsigned.</li>
<li>SAUCE prior to revision 5 only allowed SAUCE on files up to 2Gb in size, which back
then was hardly a problem since hard disks were typically smaller.</li>
</ul>
</li>
<li>A C-style zero terminated string of characters encoded according to code page 437
(IBM PC / OEM ASCII). The part of the string not used should be filled with binary
zero. Prior to revision 00.5 this field was a filler and was expected to be set
to all binary zero, the different approach compared to the other Character fields
serves as extra backwards compatibility. </li>
<li>If you read a SAUCE record with a version number your software does not support,
do not try to interpret the rest of the SAUCE record according to the 00 version
spec.</li>
<li>The interpretation of the TInfo1, TInfo2, TInfo3, TInfo4, TFlags and TInfoS fields
<a href="#FileType">are dependant on the DataType and FileType</a> fields.</li>
<li>FileSize was required in SAUCE prior to revision 5, it is now optional to be more
in line with established reality. Many SAUCEd files have an incorrectly set FileSize.
If you need to add SAUCE to a file larger than 4Gb, set FileSize equal to 0.</li>
</ol>
<p>
An Example C or C++ SAUCE record looks like this:
</p>
<pre class="code">
struct SAUCE
{
char ID[5];
char Version[2];
char Title[35];
char Author[20];
char Group[20];
char Date[8];
unsigned long FileSize;
unsigned char DataType;
unsigned char FileType;
unsigned short TInfo1;
unsigned short TInfo2;
unsigned short TInfo3;
unsigned short TInfo4;
unsigned char Comments;
unsigned char TFlags;
char TInfoS[22];
};
</pre>
<h2>
SAUCE DataType</h2>
<p>
SAUCE currently supports the following values for DataType:
</p>
<table class="data">
<thead>
<tr>
<td>
DataType
</td>
<td>
Name
</td>
<td>
Description
</td>
<td>
Revision
</td>
</tr>
</thead>
<tr>
<td>
0
</td>
<td>
None
</td>
<td>
Undefined filetype.<br />
You could use this to add SAUCE to a custom or proprietary file, without giving
it any particular meaning or interpretation.
</td>
<td>
00.0
</td>
</tr>
<tr>
<td>
1
</td>
<td>
Character
</td>
<td>
A character based file.<br />
These files are typically interpreted sequentially. Also known as streams.
</td>
<td>
00.0
</td>
</tr>
<tr>
<td>
2
</td>
<td>
Bitmap <sup>[1]</sup>
</td>
<td>
Bitmap graphic and animation files.
</td>
<td>
00.0
</td>
</tr>
<tr>
<td>
3
</td>
<td>
Vector
</td>
<td>
A vector graphic file.
</td>
<td>
00.0
</td>
</tr>
<tr>
<td>
4
</td>
<td>
Audio <sup>[2]</sup>
</td>
<td>
An audio file.
</td>
<td>
00.0
</td>
</tr>
<tr>
<td>
5
</td>
<td>
BinaryText
</td>
<td>
This is a raw memory copy of a text mode screen. Also known as a .BIN file.<br />
This is essentially a collection of character and attribute pairs.
</td>
<td>
00.0
</td>
</tr>
<tr>
<td>
6
</td>
<td>
XBin
</td>
<td>
An XBin or eXtended BIN file.
</td>
<td>
00.2
</td>
</tr>
<tr>
<td>
7
</td>
<td>
Archive
</td>
<td>
An archive file.
</td>
<td>
00.2
</td>
</tr>
<tr>
<td>
8
</td>
<td>
Executable
</td>
<td>
A executable file.
</td>
<td>
00.2
</td>
</tr>
</table>
<h4>
Notes:</h4>
<ol>
<li>Prior to revision 5 this was called Graphics.</li>
<li>Prior to revision 5 this was called Sound.</li>
</ol>
<h2>
<a id="FileType">SAUCE FileType</a></h2>
<p>
Each DataType has 1 or more possible values for FileType, and associated with each
FileType value there is also an interpretation of the TInfo and Flags fields:
</p>
<table class="data">
<thead>
<tr>
<td>
DataType
</td>