home *** CD-ROM | disk | FTP | other *** search
- --------a-ANM-------------------------------
-
- DeluxePaint Animation ".ANM" files consist of a large header and a
- series of structures that can be up to 64 KB long each. The programmer
- refers to these structures as "Large Pages". Large Pages are a format
- for dividing a file into 64 KB chunks that can be stored out-of-sequence
- in the file. That is, a large page can be logically inserted into the
- file, without having to move all the following data out of the way.
-
- Each large page holds one or more "records". A record represents one
- frame of the original animation. A record is of any length from 0 to
- almost 64 KB. The records in a large page are sequential. However, the
- first large page may not contain the first frames of the anim file. Each
- large page contains a sequential set of records but the large pages
- themselves are not in sequential order. It is possible for the first
- large page in a file to contain the last few frames of the animation.
- When you process the anim file you must scan the large page structures
- to find which large page conatins the frame you wish to display or
- process next.
-
- A DeluxePaint Animation "ANM" ("Anim") file is built on this mechanism,
- so that as frames change in size, they can be maintained with a minimum
- of extra file i/o, yet without loss of playback performance. In
- addition, there is an optional special record which is the delta from
- the last frame to the first frame, for smooth playback of looping anims.
-
- The following is the structure of a DeluxeAnimate anim file header.
- Header size is exactly 2816 bytes. The first large page structure can be
- reached by simply seeking to this location in the file.
-
- ULONG id; 4 character ID == "LPF "
-
- UWORD maxLps; max # largePages allowed. 256 FOR NOW.
-
- UWORD nLps; # largePages in this file.
-
- ULONG nRecords; # records in this file. 65534 is current limit plus
- one for last-to-first delta for looping the animation
-
- UWORD maxRecsPerLp; # records permitted in an lp. 256 FOR NOW.
-
- UWORD lpfTableOffset;
- Absolute Seek position of lpfTable. 1280 FOR NOW. The lpf Table is an
- array of 256 large page structures that is used to facilitate finding
- records in an anim file without having to seek through all of the Large
- Pages to find which one a specific record lives in.
-
- ULONG contentType; 4 character ID == "ANIM"
-
- UWORD width; Width of screen in pixels.
- UWORD height; Height of screen in pixels.
- UBYTE variant; 0==ANIM.
- UBYTE version; 0==frame rate is multiple of 18 cycles/sec.
- 1==frame rate is multiple of 70 cycles/sec.
-
- UBYTE hasLastDelta; 1==Last record is a delta from last-to-first frame.
-
- UBYTE lastDeltaValid;
- 0==The last-to-first delta (if present) hasn't been
- updated to match the current first&last frames, so it
- should be ignored.
-
- UBYTE pixelType; 0==256 color.
-
- UBYTE CompressionType; 1==(RunSkipDump) Only one used FOR NOW.
-
- UBYTE otherRecsPerFrm; 0 FOR NOW.
-
- UBYTE bitmaptype; 1==320x200, 256-color. Only one implemented so far.
-
- UBYTE recordTypes[32]; Not yet implemented.
-
- ULONG nFrames; In case future version adds other records at end of
- file, we still know how many actual frames.
- NOTE: DOES include last-to-first delta when present.
-
- UWORD framesPerSecond; Number of frames to play per second.
-
- UWORD pad2[29]; 58 bytes of filler to round up to 128 bytes total.
-
- Range cycles[16]; Color cycling info (128 bytes long).
- This is the format of a cycle structure.
- typedef struct {
- WORD count;
- WORD rate;
- WORD flags;
- UBYTE low, high; /* bounds of range */
- } Range;
-
-
- total is = 256 bytes.
-
- Following the anim file header is the color palette
-
- ULONG palette[256]
- Color palette arranged as 3 bytes each of Red Green& Blue and one unused
- byte.
-
- Following the palette is an array of structures that are copies of the
- large page headers. This array is loaded and used to find which large
- page a given frame can be found in.
-
- Large_page LParay[256] Copies of all the Large Page structures in the
- anim file. Each Large Page structure is 6 bytes long so the total length
- of this table is 1536 bytes. Even if the file only contains 1 large page
- there are still 256 entries of 6 bytes each.
-
- The Large Pages follow the LParray and are in the sequence dictated by
- their order of occurence in the LParray in the anim file header.
-
- The following is the structure of a single Large Page in an anim file.
- Each Large Page is exactly 64k long in the anim file. The only exception
- is the last large page wich is truncated to be only as long as
- necessary.
-
- UWORD baseRecord; Number of first record in this large page.
-
- UWORD nRecords; Number of records in lp.
- bit 15 of "nRecords" == "has continuation from previous lp".
- bit 14 of "nRecords" == "final record continues on next lp".
-
- UWORD nBytes; Total number of bytes of contents, excluding header.
-
- UWORD BytesContinued;
- The number of bytes of the last record of the
- previous large page that extend into this large page.
- This was never implemented and is always 0.
-
- UWORD RecordSizes[nRecords] Array of lengths of each record in the large
- page.
-
- The actual records start here. Each record has a variable length header
- that is like the following structure.
-
- typedef struct{
- UBYTE IDnum; always 66
- UBYTE Flags; 0==no extra bytes field next
-
- UWORD extrabytes; if Flags is non zero this is # of bytes
- to skip before compressed data starts
- extrabytes does not include the size
- of the 2 previous bytes. Also make
- sure you round the final address up to
- an even byte boundry.
- } record_header;
-
- EXTENSION:ANM
- OCCURENCES:PC,AMIGA (?)
- PROGRAMS:Deluxe Paint
- SEE ALSO:LBM,RIFF,FLI