123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225 |
- //**************************************************************************
- //
- // Filename : flic.h
- //
- // Purpose : to define some flic stuff
- //
- // Modification history :
- //
- //**************************************************************************
- #ifndef __FLIC_H
- #define __FLIC_H
- //**************************************************************************
- //
- // Includes
- //
- //**************************************************************************
- #include "sgp.h"
- #include <stdio.h>
- //**************************************************************************
- //
- // Defines
- //
- //**************************************************************************
- #define ErrFlicLibAccess -1
- #define ErrFlicAccess -2
- #define ErrFlicSeek -3
- #define ErrFlicRead -4
- #define ErrFlicBad -5
- #define ErrFlicBadFrame -6
- //**************************************************************************
- //
- // Typedefs
- //
- //**************************************************************************
- struct _Flic;
- typedef signed char Char; /* Signed 8 bits. */
- typedef unsigned char Uchar; /* Unsigned 8 bits. */
- typedef short Short; /* Signed 16 bits please. */
- typedef unsigned short Ushort; /* Unsigned 16 bits please. */
- typedef long Long; /* Signed 32 bits. */
- typedef unsigned long Ulong; /* Unsigned 32 bits. */
- typedef int Boolean; /* TRUE or FALSE value. */
- typedef int ErrCode; /* ErrXXX or Success. */
- typedef int FileHandle; /* OS file handle. */
- typedef Uchar Pixel; /* Pixel type. */
- typedef ErrCode FlicOpenFunc(struct _Flic *flic, const char *filename);
- typedef ErrCode FlicCheckFrameFunc(struct _Flic *);
- typedef ErrCode FlicSeekFunc(struct _Flic *, long offset);
- typedef struct
- {
- Uchar r,g,b;
- } Colour; /* One color map entry r,g,b 0-255. */
- typedef struct
- {
- Pixel pixels[2];
- } Pixels2; /* For word-oriented run length encoding */
- /* Flic Header */
- typedef struct
- {
- Long size; /* Size of flic including this header. */
- Ushort type; /* Either FLI_TYPE or FLC_TYPE below. */
- Ushort frames; /* Number of frames in flic. */
- Ushort width; /* Flic width in pixels. */
- Ushort height; /* Flic height in pixels. */
- Ushort depth; /* Bits per pixel. (Always 8 now.) */
- Ushort flags; /* FLI_FINISHED | FLI_LOOPED ideally. */
- Long speed; /* Delay between frames. */
- Short reserved1; /* Set to zero. */
- Short created1;
- Short created2;
- //Ulong created; /* Date of flic creation. (FLC only.) */
- Short creator1;
- Short creator2;
- //Ulong creator; /* Serial # of flic creator. (FLC only.) */
- Short updated1;
- Short updated2;
- //Ulong updated; /* Date of flic update. (FLC only.) */
- Short updater1;
- Short updater2;
- //Ulong updater; /* Serial # of flic updater. (FLC only.) */
- Ushort aspect_dx; /* Width of square rectangle. (FLC only.) */
- Ushort aspect_dy; /* Height of square rectangle. (FLC only.) */
- Char reserved2[38]; /* Set to zero. */
- Long oframe1; /* Offset to frame 1. (FLC only.) */
- Long oframe2; /* Offset to frame 2. (FLC only.) */
- Char reserved3[40]; /* Set to zero. */
- } FlicHead;
- typedef struct
- {
- Pixel *pixels; /* Set to AOOO:0000 for hardware. */
- int width, height; /* Dimensions of screen. (320x200) */
- char change_palette; /*True means that the flic changes the palette */
- } FlicScreen; /* Device specific screen type. */
- typedef struct
- {
- Ulong max_loop_count,
- loop_count;
- Ushort max_frame_index,
- frame_index;
- } FlicFrameStatus;
- typedef struct
- {
- // lmlib_t *names;
- long offset,
- length;
- }FlicLib;
- typedef struct _Flic
- {
- FlicHead head; /* Flic file header. */
- FILE *file; /* File handle. */
- const char *name; /* Name from flic_open. Helps error reporting. */
- int xoff,yoff; /* Offset to display flic at. */
- FlicFrameStatus status;
- FlicScreen screen;
- FlicLib lib;
- FlicOpenFunc *open;
- FlicCheckFrameFunc *check_frame;
- FlicSeekFunc *seek;
- } Flic;
- /* Values for FlicHead.type */
- #define FLI_TYPE 0xAF11u /* 320x200 .FLI type ID */
- #define FLC_TYPE 0xAF12u /* Variable rez .FLC type ID */
- /* Values for FlicHead.flags */
- #define FLI_FINISHED 0x0001
- #define FLI_LOOPED 0x0002
- /* Optional Prefix Header */
- typedef struct
- {
- Long size; /* Size of prefix including header. */
- Ushort type; /* Always PREFIX_TYPE. */
- Short chunks; /* Number of subchunks in prefix. */
- Char reserved[8];/* Always 0. */
- } PrefixHead;
- /* Value for PrefixHead.type */
- #define PREFIX_TYPE 0xF100u
- /* Frame Header */
- typedef struct
- {
- Long size; /* Size of frame including header. */
- Ushort type; /* Always FRAME_TYPE */
- Short chunks; /* Number of chunks in frame. */
- Char reserved[8];/* Always 0. */
- } FrameHead;
- /* Value for FrameHead.type */
- #define FRAME_TYPE 0xF1FAu
- /* Chunk Header */
- typedef struct
- {
- Long size; /* Size of chunk including header. */
- Ushort type; /* Value from ChunkTypes below. */
- } ChunkHead;
- typedef enum
- {
- COLOR_256 = 4, /* 256 level color pallette info. (FLC only.) */
- DELTA_FLC = 7, /* Word-oriented delta compression. (FLC only.) */
- COLOR_64 = 11, /* 64 level color pallette info. */
- DELTA_FLI = 12, /* Byte-oriented delta compression. */
- BLACK_FRAME = 13, /* whole frame is color 0 */
- BYTE_RUN = 15, /* Byte run-length compression. */
- LITERAL = 16, /* Uncompressed pixels. */
- PSTAMP = 18, /* "Postage stamp" chunk. (FLC only.) */
- } ChunkTypes;
- //**************************************************************************
- //
- // Function prototypes.
- //
- //**************************************************************************
- #ifdef __cplusplus
- extern "C" {
- #endif /* __cplusplus */
- void FlicInit(Flic *flic, unsigned screen_width, unsigned screen_height, char change_palette, char *Buffer);
- ErrCode FlicOpen(Flic *flic, const char *filename);
- void FlicSetOrigin(Flic *flic, unsigned x, unsigned y);
- ErrCode FlicPlay(Flic *flic, Ulong max_loop);
- void FlicClose(Flic *flic);
- void FlicSeekFirst(Flic *flic);
- int FlicAdvance(Flic *flic, BOOL fDecode);
- int FlicAdvanceNoDecode(Flic *flic);
- int FlicStart(char *filename, int width, int height, char *buffer, Flic *flic, char usepal);
- void FlicStop(Flic *flic);
- ErrCode FlicGetStats(char *filename, int width, int height, Flic *flic, int *piBufferSize, int *piColourPalSize);
- ErrCode FlicGetColourPalette(CHAR *filename, int width, int height, CHAR **ppBuffer, INT *piNumColours);
- CHAR *FlicSeekChunk(Flic *flic, INT iFrame, ChunkTypes eType, INT *piChunkSize);
- INT FlicFindByteRunBeforeFrame(Flic *flic, INT iFrame);
- ErrCode FlicFillBitmapData( Flic *flic, INT iPrevFrame, INT iFrame, HBITMAP hBitmap );
- ErrCode FlicFillFrameData( Flic *flic, INT iPrevFrame, INT iFrame, CHAR *, INT * );
- void FlicClearBitmap( HBITMAP hBitmap, INT iColourIndex );
- #ifdef __cplusplus
- }
- #endif /* __cplusplus */
- extern char FlicPal[768];
- #endif
|