/* * whirlgif.h * * Copyright (c) 1997,1998,1999 by Hans Dinsen-Hansen * Copyright (c) 1995,1996 by Kevin Kadow * Copyright (c) 1990,1991,1992 by Mark Podlipec. * All rights reserved. * * This software may be freely copied, modified and redistributed * without fee provided that this copyright notice is preserved * intact on all copies and modified copies. * * There is no warranty or other guarantee of fitness of this software. * It is provided solely "as is". The author(s) disclaim(s) all * responsibility and liability with respect to this software's usage * or its effect upon hardware or computer systems. * * The Graphics Interchange format (c) is the Copyright property of * Compuserve Incorporated. Gif(sm) is a Service Mark property of * Compuserve Incorporated. * */ #define DA_REV 3.04 /* common includes */ #include #include #ifdef _USE_STRINGS_H #include #else #include #endif #ifdef _FOPEN_TXT_OR_BIN #define WRIBIN "wb" #define REATXT "rt" #define REABIN "rb" #else /* Usually there is no need to distinguish between binary and txt */ #define WRIBIN "w" #define REATXT "r" #define REABIN "r" #endif #ifndef TRUE #define TRUE 1 #endif #ifndef FALSE #define FALSE 0 #endif /* define constants and defaults */ /* Default amount of inter-frame time */ #define DEFAULT_TIME 10 /* If set to 1, Netscape 'loop' code will be added by default */ #define DEFAULT_LOOP 0 /* If set to 1, use the colormaps from all images, not just the first */ #define DEFAULT_USE_COLORMAP 0 /* Used in calculating the transparent color */ #define TRANS_NONE 1 #define TRANS_RGB 2 #define TRANS_MAP 3 #define DISP_NONE 0 #define DISP_NOT 1 #define DISP_BACK 2 #define DISP_PREV 3 #define DEFAULT_DISPOSAL DISP_NONE /* set default disposal method here to any of the DISP_XXXX values */ #define BIGSTRING 256 #define MAXVAL 4096 /* maxval of lzw coding size */ #define MAXVALP 4096 #define TERMIN 'T' #define LOOKUP 'L' #define SEARCH 'S' #define noOfArrays 20 /* defines the amount of memory set aside in the encoding for the * LOOKUP type nodes; for a 256 color GIF, the number of LOOKUP * nodes will be <= noOfArrays, for a 128 color GIF the number of * LOOKUP nodes will be <= 2 * noOfArrays, etc. */ /* define shorthand for various types */ #define LONG int #define ULONG unsigned int #define BYTE char #define UBYTE unsigned char #define SHORT short #define USHORT unsigned short #define WORD short int #define UWORD unsigned short int /* definition of various structures */ typedef struct Transparency { int type; UBYTE valid; UBYTE map; UBYTE red; UBYTE green; UBYTE blue; } Transparency; typedef struct Global { Transparency trans; int left; int top; unsigned int time; unsigned short disposal; } Global; typedef struct GifScreenHdr { int width; int height; UBYTE m; UBYTE cres; UBYTE pixbits; UBYTE bc; UBYTE aspect; } GifScreenHdr; typedef union GifColor { struct cmap { UBYTE red; UBYTE green; UBYTE blue; UBYTE pad; } cmap; ULONG pixel; } GifColor; typedef struct GifImageHdr { int left; int top; int width; int height; UBYTE m; UBYTE i; UBYTE pixbits; UBYTE reserved; } GifImageHdr; typedef struct GifTree { char typ; /* terminating, lookup, or search */ int code; /* the code to be output */ UBYTE ix; /* the color map index */ struct GifTree **node, *nxt, *alt; } GifTree; /* define inline functions */ #define GifPutShort(i, fout) {fputc(i&0xff, fout); fputc(i>>8, fout);} #define GifGetShort(fin) (Xgetc(fin) | Xgetc(fin)<<8) /* forward declaration of the functions */ char *AddCodeToBuffer(int, short, char *); void CalcTrans(char *); void ClearTree(int, GifTree *); void GifClearTable(); void GifComment(FILE *, char *); void GifDecode(FILE *, UBYTE *, GifImageHdr); void GifEncode(FILE *, UBYTE *, int, int); void GifLoop(FILE *, unsigned int); void GifReadFile(FILE *, char *, int); void GifScreenHeader(FILE *, FILE *, int); UBYTE *GifSendData(UBYTE *, int, UBYTE *); void ReadImageHeader(FILE *); void SetOffset(char *); long sq(UBYTE, UBYTE); void TheEnd(); void TheEnd1(char *); void Usage(); void WriteImageHeader(FILE *); UBYTE Xgetc(FILE *);