491 lines
21 KiB
Plaintext
491 lines
21 KiB
Plaintext
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ·
|
|
³ What is SAUCE? º
|
|
ÀÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
|
|
|
|
Recipe for SAUCE
|
|
|
|
Chef cuisinier : Tasmaniac / ACiD
|
|
Maitre d'h“tel : Rad Man / ACiD
|
|
|
|
ANSi's used to be just ANSi's, pictures were just pictures,
|
|
loaders were just loaders and quite frankly, every file was just
|
|
as plain tasting as every other. This is about to change, how-
|
|
ever, because ACiD has decided to give their files an extra
|
|
"je-ne-sais-quoi." In reality, we'll be adding SAUCE to every
|
|
file you can imagine.
|
|
|
|
Now, before we thoroughly confuse you, let us explain what we
|
|
are doing here. SAUCE stands for "Standard Architecture for
|
|
Universal Comment Extensions." Although originally intended for
|
|
personal use in ANSi's and RIP screens, early in the developement
|
|
of EFI (Extended File Information) it was decided that EFI should
|
|
be extended to have support for more than just ANSi and RIP
|
|
screens. Our brainchild was born and the specs were designed.
|
|
The only aspect left undecided was the name, and after rejecting
|
|
some very funny candidates, SAUCE was unanimously chosen. This
|
|
leads us to the big question in the sky, "What is sauce?" SAUCE
|
|
is a universal process to incorporate a full description for any
|
|
type of file. The most outstanding aspect of this concept is that
|
|
you have access to the complete file name, the file's title, the
|
|
creation date, the creator of the file, the group that the creator
|
|
is employed by, and much, much, more.
|
|
|
|
Let us begin with a description of the record layouts used.
|
|
The record layouts and code examples are in a variated pascal
|
|
pseudo code, and should be transferrable enough to implement in
|
|
most other programming languages. For ease of reading, the
|
|
examples assume that the file is correct and that no error-
|
|
checking need be included. How rigorous you check for errors is
|
|
completely up to you, and will most likely depend on the file type
|
|
you are describing.
|
|
|
|
|
|
SAUCE RECORD
|
|
------------
|
|
|
|
This portion of the documentation is about the SAUCE record.
|
|
The SAUCE record describes the file in short, and provides other
|
|
information not included in the SAUCE record itself.
|
|
|
|
A sauce record is _EXACTLY_ 128 bytes in size.
|
|
|
|
Fieldname : Name of the field.
|
|
Size : Size of the field in BYTES
|
|
Type : Type of data. This can be :
|
|
BYTE : One byte unsigned numeric value (0 to 255)
|
|
WORD : Two byte unsigned numeric value (0 to 65535)
|
|
INTEGER : Two byte signed numeric value (-32768 to 32767)
|
|
LONG : Four byte signed numeric value (-2147483648 to 2147483647)
|
|
CHARACTER : One byte ASCII value. Longer character fields are
|
|
padded with spaces. It is _NOT_ a PASCAL string (with a
|
|
leading length byte), and it's _NOT_ a C-Style string
|
|
(with a trailing nul-byte). A 10 byte character field
|
|
holding the text 'ANSI' would look like this.
|
|
'ANSI '.
|
|
|
|
Numeric fields should be zero when not used, character fields
|
|
should be all spaces when not used.
|
|
|
|
V# : SAUCE Version number. This indicates the version of
|
|
SAUCE when the field was implemented.
|
|
|
|
Description : Complete description of the field.
|
|
|
|
|
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
No fields are REQUIRED to be filled in except for ID, Version, FileSize,
|
|
DataType and FileType.
|
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
|
|
FieldName Size Type V# Description
|
|
--------- ---- --------- -- -----------
|
|
ID 5 Character 00 SAUCE Identification. This should be equal to
|
|
'SAUCE' or the record is not a valid SAUCE
|
|
record.
|
|
Version 2 Character 00 Version number of SAUCE. Current version is
|
|
'00'. As new features are added to the
|
|
specifications of SAUCE, this version number
|
|
will change. Future versions SHOULD remain
|
|
compatible with version 00 only ADDING on
|
|
the specifications, it is however not unlikely
|
|
that this compatibility is impossible to
|
|
maintain, but this is of no concern now.
|
|
Title 35 Character 00 Title of the file.
|
|
Author 20 Character 00 Name or handle of the creator of the file.
|
|
Group 20 Character 00 Name of the group the creator is employed by.
|
|
Date 8 Character 00 Date the file was created. This date is in
|
|
the format CCYYMMDD (Century, year, month,
|
|
day). There is a good reason why the date
|
|
is in this format, but it's not used in
|
|
version '00' of SAUCE. It will be used in
|
|
a future version of SAUCE.
|
|
FileSize 4 Long 00 Original filesize NOT including any
|
|
information of SAUCE.
|
|
DataType 1 Byte 00 Type of Data. (See DATATYPES further on)
|
|
FileType 1 Byte 00 Type of File. (See DATATYPES further on)
|
|
TInfo1 2 Word 00 Numeric information field 1 (See DATATYPES)
|
|
When used, this field holds informative
|
|
values. Any program using SAUCE should not
|
|
rely on these values being correct or filled
|
|
in.
|
|
TInfo2 2 Word 00 Numeric information field 2 (See DATATYPES)
|
|
TInfo3 2 Word 00 Numeric information field 3 (See DATATYPES)
|
|
TInfo4 2 Word 00 Numeric information field 4 (See DATATYPES)
|
|
Comments 1 Byte 00 Number of Comment lines (See COMMENTS)
|
|
Flags 2 Word * 00 Flags indication optional settings/switches
|
|
These flags have different meaning depending
|
|
on the data type.
|
|
The flags weren't originally in the concept
|
|
for Version 00 of SAUCE. but since the
|
|
specification of SAUCE expects all filler
|
|
bytes to be binary zero, the flags should be
|
|
set to ZERO in all previous files, and cause
|
|
no significant harm.
|
|
|
|
|
|
An Example PASCAL record looks like this:
|
|
|
|
TYPE SAUCERec = RECORD
|
|
ID : Array[1..5] of Char;
|
|
Version : Array[1..2] of Char;
|
|
Title : Array[1..35] of Char;
|
|
Author : Array[1..20] of Char;
|
|
Group : Array[1..20] of Char;
|
|
Date : Array[1..8] of Char;
|
|
FileSize : Longint;
|
|
DataType : Byte;
|
|
FileType : Byte;
|
|
TInfo1 : Word;
|
|
TInfo2 : Word;
|
|
TInfo3 : Word;
|
|
TInfo4 : Word;
|
|
Comments : Byte;
|
|
Flags : Byte;
|
|
Filler : Array[1..22] of Char;
|
|
END;
|
|
|
|
An Example C record looks like this:
|
|
|
|
typedef SAUCEREC {
|
|
char ID[5];
|
|
char Version[2];
|
|
char Title[35];
|
|
char Author[20];
|
|
char Group[20];
|
|
char Date[8];
|
|
signed long FileSize;
|
|
unsigned char DataType;
|
|
unsigned char FileType;
|
|
unsigned int TInfo1;
|
|
unsigned int TInfo2;
|
|
unsigned int TInfo3;
|
|
unsigned int TInfo4;
|
|
unsigned char Flags;
|
|
char Filler[22];
|
|
} SAUCEREC;
|
|
|
|
|
|
DATATYPES
|
|
---------
|
|
DataType and FileType hold the information needed to deter-
|
|
mine what type of file it is.
|
|
|
|
There are 5 DataTypes, these are (with their respective numeric values) :
|
|
0) None : Undefined filetype, you could use this to add SAUCE
|
|
information to personal datafiles needed by programs,
|
|
but not having any other meaning.
|
|
1) Character : Any character based file. Examples are ASCII, ANSi and
|
|
RIP.
|
|
2) Graphics : Any bitmap graphic file. Examples are GIF, LBM, and
|
|
PCX.
|
|
3) Vector : Any vector based graphic file. Examples are DXF and
|
|
CAD files.
|
|
4) Sound : Any sound related file. Examples are samples, MOD
|
|
files and MIDI.
|
|
5) BinaryText: This is RAW memory copy of a text screen. It's
|
|
basically the BIN format you can save from whitin
|
|
TheDraw. Each character is built up of two consecutive
|
|
bytes. The first is the character to be displayed. The
|
|
second is the Attribute byte.
|
|
|
|
|
|
None
|
|
----
|
|
When using the 'None' datatype, you should have FileType set to
|
|
zero also. This is a compatibility issue as it's not unlikely,
|
|
the 'None' datatype will have filetypes in the future.
|
|
|
|
Character
|
|
---------
|
|
When using the 'Character' datatype, you have following filetypes
|
|
available :
|
|
|
|
0) ASCII : Plain text file with no formatting codes or color codes.
|
|
TInfo1 is used for the width of the file.
|
|
TInfo2 is used to hold the number of lines in the file.
|
|
1) ANSi : ANSi file. With ANSi color codes and cursor
|
|
positioning.
|
|
TInfo1 is used for the width of the file.
|
|
TInfo2 is used to hold the number of ANSi screen lines
|
|
in the file.
|
|
2) ANSiMation: ANSi Animation. With ANSi color codes and cursor
|
|
positioning. While an ANSi file can also have animated
|
|
sequences, there is a clear distinction. While an ANSi
|
|
may or may not have a beginning animated sequence
|
|
introducing the group or artist the rest is just a
|
|
sequence of colored characters. An ANSiMation on the
|
|
other hand is a more like a text mode cartoon.
|
|
TInfo1 is used for the width of the file.
|
|
TInfo2 is used to hold the number of ANSi screen lines
|
|
the ANSiMation was created for.
|
|
A program using SAUCE may use these two values to
|
|
switch to the appropriate video mode.
|
|
3) RIP : Remote Imaging Protocol (RIP) graphics file.
|
|
TInfo1 holds the width (should be 640)
|
|
TInfo2 holds the height (should be 350)
|
|
TInfo3 holds the number of colors (should be 16)
|
|
4) PCBoard : File with PCBoard style @X color codes and @ macro's
|
|
and ANSi codes.
|
|
TInfo1 is used for the width of the file.
|
|
TInfo2 is used to hold the number of ANSi screen lines
|
|
in the file.
|
|
5) AVATAR : A file with AVATAR and ANSi color codes and cursor
|
|
positioning.
|
|
|
|
FLAGS for the Character Datatype.
|
|
-----
|
|
ÚÄ 7 ÄÂÄ 6 ÄÂÄ 5 ÄÂÄ 4 ÄÂÄ 3 ÄÂÄ 2 ÄÂÄ 1 ÄÂÄ 0 Ä¿
|
|
³ ³ ³ ³ ³ ³ ³ ³ ³
|
|
³ 0 ³ 0 ³ 0 ³ 0 ³ 0 ³ 0 ³ 0 ³ A ³
|
|
³ ³ ³ ³ ³ ³ ³ ³ ³
|
|
ÀÄÄÄÄÄÁÄÄÄÄÄÁÄÄÄÄÄÁÄÄÄÄÄÁÄÄÄÄÄÁÄÄÄÄÄÁÄÄÄÄÄÁÄÄÄÄÄÙ
|
|
|
|
All non-used bits should be ZERO.
|
|
|
|
A) Non-Blink mode (iCE Color).
|
|
When this bit is SET (equal to 1) The ANSi is created using iCE
|
|
color codes. This is a special mode where the blinking is
|
|
disabled, and you have 16 background colors available. Basically,
|
|
you have the same choice for background colors as for foreground
|
|
colors.
|
|
|
|
Please note:
|
|
|
|
When the picture does not make specific use of the iCE color, you
|
|
should NOT have this bit set. When you do not support the iCE
|
|
color mode, you should probably not display the file as it could
|
|
look pretty weird in normal mode.
|
|
|
|
Graphics
|
|
--------
|
|
For all graphics types, TInfo1 holds width of the image, TInfo2
|
|
holds the Height of the image and TInfo3 holds the number of bits
|
|
per pixel (a 256 colour image would have 8 bits per pixel, a
|
|
TrueColor image would have 24);
|
|
|
|
Following Graphics filetypes are available :
|
|
|
|
0) GIF (CompuServ Graphics Interchange format)
|
|
1) PCX (ZSoft Paintbrush PCX format)
|
|
2) LBM/IFF (DeluxePaint LBM/IFF format)
|
|
3) TGA (Targa Truecolor)
|
|
4) FLI (Autodesk FLI animation file)
|
|
5) FLC (Autodesk FLC animation file)
|
|
6) BMP (Windows Bitmap)
|
|
7) GL (Grasp GL Animation)
|
|
8) DL (DL Animation)
|
|
9) WPG (Wordperfect Bitmap)
|
|
10) SBM (SUN BitMap)
|
|
11) JPG (JPeg compressed File)
|
|
12) MPG (MPeg compressed animation/video)
|
|
13) AVI (Audio Visual Interlace)
|
|
|
|
FLAGS
|
|
-----
|
|
Not used, should be all zeroes.
|
|
|
|
Vector
|
|
------
|
|
Following Vector filetypes are available :
|
|
0) DXF (CAD Data eXchange File)
|
|
1) DWG (AutoCAD Drawing file)
|
|
2) WPG (WordPerfect/DrawPerfect vector graphics)
|
|
3) SVI (Sun VectorImage)
|
|
|
|
FLAGS
|
|
-----
|
|
Not used, should be all zeroes.
|
|
|
|
Sound
|
|
-----
|
|
Following sound filetypes are available :
|
|
0) MOD (4, 6 or 8 channel MOD/NST file)
|
|
1) 669 (Renaissance 8 channel 669 format)
|
|
2) STM (Future Crew 4 channel ScreamTracker format)
|
|
3) S3M (Future Crew variable channel ScreamTracker3 format)
|
|
4) MTM (Renaissance variable channel MultiTracker Module)
|
|
5) FAR (Farandole composer module)
|
|
6) ULT (UltraTracker module)
|
|
7) AMF (DMP/DSMI Advanced Module Format)
|
|
8) DMF (Delusion Digital Music Format (XTracker))
|
|
9) OKT (Oktalyser module)
|
|
10) ROL (AdLib ROL file (FM))
|
|
11) CMF (Creative Labs FM)
|
|
12) MIDI (MIDI file)
|
|
13) SADT (SAdT composer FM Module)
|
|
14) VOC (Creative Labs Sample)
|
|
15) WAV (Windows Wave file)
|
|
16) SMP8 (8 Bit Sample, TInfo1 holds sampling rate)
|
|
17) SMP8S (8 Bit sample stereo, TInfo1 holds sampling rate)
|
|
18) SMP16 (16 Bit sample, TInfo1 holds sampling rate)
|
|
19) SMP16S (16 Bit sample stereo, TInfo1 holds sampling rate)
|
|
20) PATCH8 (8 Bit patch-file)
|
|
21) PATCH16(16 Bit Patch-file)
|
|
|
|
FLAGS
|
|
-----
|
|
Not used, should be all zeroes.
|
|
|
|
BinaryText
|
|
----------
|
|
The Binary Text format, basically has no Filetype, since the datatype
|
|
has already defined how the file will look.
|
|
The FileType however specifies the WIDTH of the BinaryText screen.
|
|
Only the Width is required, as the Height can be calculated by dividing
|
|
the filesize by the Width.
|
|
In an attempt to provide as much WIDTH as possible in a possible 256
|
|
values of the Byte-sized FileType. The width is specified in Multiples
|
|
of 2. The fact that the Width is specified in multiples of 2 isn't
|
|
really a problem, since you also need to define the effective screen
|
|
size in multiples of 2.
|
|
|
|
An example : For normal 80*25 binary images as made with TheDraw the
|
|
FileType value would be 40 (since 2*40 equals 80 <g>)
|
|
All you need to do is divide the width of the binary text
|
|
image by 2. This gives a maximum width of 510 characters.
|
|
Although currently not supported, should there be a need
|
|
for even bigger images, this can be arranged.
|
|
|
|
Please note. BinaryText expects the character-attribute pairs to be
|
|
stored one row at a time. If you wanted to create a 80*100 Image, you
|
|
could do this by just copying 4 80*25 or 2 80*50 together to form one
|
|
bigger image.
|
|
If for example you wanted to create a 160*25 image from 2 80*25 images,
|
|
you would need to write a little program which would copy line 1 from
|
|
image 1, line 1 from image 2, Line 2 from Image 1, Line 2 from Image 2
|
|
and so on.
|
|
Basically, you should have all character-attribute pairs from one line
|
|
of the COMPLETE image one after the other, followed by all
|
|
char-attribute pairs from the next row, and so on.
|
|
|
|
If the picture does not fit this format. You should use the NONE
|
|
datatype. Besides. you'd probably want to have it in this format
|
|
anyway, as it seems to be the most logical approach to have these kind
|
|
of images.
|
|
|
|
FLAGS for the BinaryText Datatype.
|
|
-----
|
|
ÚÄ 7 ÄÂÄ 6 ÄÂÄ 5 ÄÂÄ 4 ÄÂÄ 3 ÄÂÄ 2 ÄÂÄ 1 ÄÂÄ 0 Ä¿
|
|
³ ³ ³ ³ ³ ³ ³ ³ ³
|
|
³ 0 ³ 0 ³ 0 ³ 0 ³ 0 ³ 0 ³ 0 ³ A ³
|
|
³ ³ ³ ³ ³ ³ ³ ³ ³
|
|
ÀÄÄÄÄÄÁÄÄÄÄÄÁÄÄÄÄÄÁÄÄÄÄÄÁÄÄÄÄÄÁÄÄÄÄÄÁÄÄÄÄÄÁÄÄÄÄÄÙ
|
|
|
|
All non-used bits should be ZERO.
|
|
|
|
A) Non-blink mode (iCE Color).
|
|
This bit has exactly the same meaning as for the Character
|
|
datatype. It indicates whether the picture uses iCE color.
|
|
|
|
|
|
COMMENTS
|
|
--------
|
|
The comment block is an addition to the SAUCE record. It
|
|
holds up to 255 lines of additional information. Each line 64
|
|
characters wide.
|
|
|
|
When the Comments field is not zero, it holds the number of
|
|
additional comment lines are available. A single comment line is
|
|
64 characters long. Like the character fields in the SAUCE
|
|
record, it is padded with spaces, and has no leading length byte
|
|
or trailing null-byte.
|
|
|
|
The comment block is preceded with a 5 character identifi-
|
|
cation mark. This identification mark is 'COMNT'.
|
|
|
|
|
|
SAUCE IN FILES
|
|
--------------
|
|
A file with SAUCE added to it. Will look like this:
|
|
|
|
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
|
³ ³
|
|
³ FILE DATA ³ Actual file data. As if it would be without SAUCE.
|
|
³ ³
|
|
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
|
|
³ ³
|
|
³ EOF MARKER ³ EOF marker. This will assure character files can
|
|
³ ³ easily determine the end of file.
|
|
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
|
|
³ ³
|
|
³ COMMENT BLOCK ³ Optional Comment block.
|
|
³ ³
|
|
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
|
|
³ ³
|
|
³ SAUCE RECORD ³ SAUCE record.
|
|
³ ³
|
|
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
|
|
|
|
|
The Comment block
|
|
|
|
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
|
³ ³
|
|
³ 'COMNT' ³ Comment block ID bytes
|
|
³ ³
|
|
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
|
|
³ ³
|
|
³ COMMENTLINE 1 ³ First comment line
|
|
³ ³
|
|
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
|
|
³ ³
|
|
³ COMMENTLINE 2 ³ Second comment line
|
|
³ ³
|
|
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
|
|
...
|
|
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
|
|
³ ³
|
|
³ COMMENTLINE N ³ n-th comment line, n equals the Comments field
|
|
³ ³ in SAUCE record.
|
|
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
|
|
|
|
|
|
|
EXAMPLE CODE TO READ SAUCE
|
|
--------------------------
|
|
Variables:
|
|
Byte : Count;
|
|
Long : FileSize;
|
|
file : F;
|
|
|
|
Code:
|
|
Open_File(F); | Open the file for read access
|
|
FileSize = Size_of_file(F); | Determine filesize
|
|
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
|
|
|
|
|
|
SAUCE DATAFILE
|
|
--------------
|
|
The full specifications of the SAUCE datafile are not ready yet.
|
|
|
|
|
|
INFORMATION OR UPGRADES
|
|
-----------------------
|
|
If you have a need for additional information on SAUCE, or
|
|
need modifications, you can contact me at these places...
|
|
|
|
Leave a message to TASMANIAC :
|
|
|
|
Neo Tokyo +32-50-620112 USR 28800 Dual
|
|
+32-50-625717 ZyXEL 19200
|
|
|
|
or contact SiDS at bmorin@wpi.edu
|
|
|