home *** CD-ROM | disk | FTP | other *** search
- /*
- *
- * ilbm.h: Definitions for IFFParse ILBM reader.
- *
- * 6/27/91
- */
-
- #ifndef IFFP_ILBM_H
- #define IFFP_ILBM_H
-
- #ifndef IFFP_IFF_H
- #include "iffp/iff.h"
- #endif
-
- #ifndef INTUITION_INTUITION_H
- #include <intuition/intuition.h>
- #endif
- #ifndef GRAPHICS_VIDEOCONTROL_H
- #include <graphics/videocontrol.h>
- #endif
-
- #ifndef NO_PROTOS
- #include <clib/graphics_protos.h>
- #include <clib/intuition_protos.h>
- #include <clib/alib_protos.h>
- #endif
-
- /* IFF types we may encounter */
- #define ID_ILBM MAKE_ID('I','L','B','M')
-
- /* ILBM Chunk ID's we may encounter
- * (see iffp/iff.h for some other generic chunks)
- */
- #define ID_BMHD MAKE_ID('B','M','H','D')
- #define ID_CMAP MAKE_ID('C','M','A','P')
- #define ID_CRNG MAKE_ID('C','R','N','G')
- #define ID_CCRT MAKE_ID('C','C','R','T')
- #define ID_GRAB MAKE_ID('G','R','A','B')
- #define ID_SPRT MAKE_ID('S','P','R','T')
- #define ID_DEST MAKE_ID('D','E','S','T')
- #define ID_CAMG MAKE_ID('C','A','M','G')
-
- /* Use this constant instead of sizeof(ColorRegister). */
- #define sizeofColorRegister 3
-
- typedef WORD Color4; /* Amiga RAM version of a color-register,
- * with 4 bits each RGB in low 12 bits.*/
-
- /* Maximum number of bitplanes storable in BitMap structure */
- #define MAXAMDEPTH 8
- #define MAXAMCOLORREG 32
-
- /* Maximum planes we can save */
- #define MAXSAVEDEPTH 24
-
- /* convert width to BytesPerRow */
- #define BytesPerRow(w) ((w) + 15 >> 4 << 1)
- #define BitsPerRow(w) ((w) + 15 >> 4 << 4)
-
- /* Flags that should be masked out of old 16-bit CAMG before save or use.
- * Note that 32-bit mode id (non-zero high word) bits should not be twiddled
- */
- #define BADFLAGS (SPRITES|VP_HIDE|GENLOCK_AUDIO|GENLOCK_VIDEO)
- #define OLDCAMGMASK (~BADFLAGS)
-
-
- /* Masking techniques */
- #define mskNone 0
- #define mskHasMask 1
- #define mskHasTransparentColor 2
- #define mskLasso 3
-
- /* Compression techniques */
- #define cmpNone 0
- #define cmpByteRun1 1
-
- #define RowBytes(w) ((((w) + 15) >> 4) << 1)
-
- /* ---------- BitMapHeader ---------------------------------------------*/
- /* Required Bitmap header (BMHD) structure describes an ILBM */
- typedef struct {
- UWORD w, h; /* Width, height in pixels */
- WORD x, y; /* x, y position for this bitmap */
- UBYTE nPlanes; /* # of planes (not including mask) */
- UBYTE masking; /* a masking technique listed above */
- UBYTE compression; /* cmpNone or cmpByteRun1 */
- UBYTE reserved1; /* must be zero for now */
- UWORD transparentColor;
- UBYTE xAspect, yAspect;
- WORD pageWidth, pageHeight;
- } BitMapHeader;
-
- /* ---------- ColorRegister --------------------------------------------*/
- /* A CMAP chunk is a packed array of ColorRegisters (3 bytes each). */
- typedef struct {
- UBYTE red, green, blue; /* MUST be UBYTEs so ">> 4" won't sign extend.*/
- } ColorRegister;
-
- /* ---------- Point2D --------------------------------------------------*/
- /* A Point2D is stored in a GRAB chunk. */
- typedef struct {
- WORD x, y; /* coordinates (pixels) */
- } Point2D;
-
- /* ---------- DestMerge ------------------------------------------------*/
- /* A DestMerge is stored in a DEST chunk. */
- typedef struct {
- UBYTE depth; /* # bitplanes in the original source */
- UBYTE pad1; /* UNUSED; for consistency store 0 here */
- UWORD planePick; /* how to scatter source bitplanes into destination */
- UWORD planeOnOff; /* default bitplane data for planePick */
- UWORD planeMask; /* selects which bitplanes to store into */
- } DestMerge;
-
- /* ---------- SpritePrecedence -----------------------------------------*/
- /* A SpritePrecedence is stored in a SPRT chunk. */
- typedef UWORD SpritePrecedence;
-
- /* ---------- Camg Amiga Viewport Mode ---------------------------------*/
- /* A Commodore Amiga ViewPort->Modes is stored in a CAMG chunk. */
- /* The chunk's content is declared as a LONG. */
- typedef struct {
- ULONG ViewModes;
- } CamgChunk;
-
- /* ---------- CRange cycling chunk -------------------------------------*/
- #define RNG_NORATE 36 /* Dpaint uses this rate to mean non-active */
- /* A CRange is store in a CRNG chunk. */
- typedef struct {
- WORD pad1; /* reserved for future use; store 0 here */
- WORD rate; /* 60/sec=16384, 30/sec=8192, 1/sec=16384/60=273 */
- WORD active; /* bit0 set = active, bit 1 set = reverse */
- UBYTE low, high; /* lower and upper color registers selected */
- } CRange;
-
- /* ---------- Ccrt (Graphicraft) cycling chunk -------------------------*/
- /* A Ccrt is stored in a CCRT chunk. */
- typedef struct {
- WORD direction; /* 0=don't cycle, 1=forward, -1=backwards */
- UBYTE start; /* range lower */
- UBYTE end; /* range upper */
- LONG seconds; /* seconds between cycling */
- LONG microseconds; /* msecs between cycling */
- WORD pad; /* future exp - store 0 here */
- } CcrtChunk;
-
- /* If you are writing all of your chunks by hand,
- * you can use these macros for these simple chunks.
- */
- #define putbmhd(iff, bmHdr) \
- PutCk(iff, ID_BMHD, sizeof(BitMapHeader), (BYTE *)bmHdr)
- #define putgrab(iff, point2D) \
- PutCk(iff, ID_GRAB, sizeof(Point2D), (BYTE *)point2D)
- #define putdest(iff, destMerge) \
- PutCk(iff, ID_DEST, sizeof(DestMerge), (BYTE *)destMerge)
- #define putsprt(iff, spritePrec) \
- PutCk(iff, ID_SPRT, sizeof(SpritePrecedence), (BYTE *)spritePrec)
- #define putcamg(iff, camg) \
- PutCk(iff, ID_CAMG, sizeof(CamgChunk),(BYTE *)camg)
- #define putcrng(iff, crng) \
- PutCk(iff, ID_CRNG, sizeof(CRange),(BYTE *)crng)
- #define putccrt(iff, ccrt) \
- PutCk(iff, ID_CCRT, sizeof(CcrtChunk),(BYTE *)ccrt)
-
- #ifndef NO_PROTOS
- /* unpacker.c */
- BOOL unpackrow(BYTE **pSource, BYTE **pDest, WORD srcBytes0, WORD dstBytes0);
-
- /* packer.c */
- LONG packrow(BYTE **pSource, BYTE **pDest, LONG rowSize);
-
- /* ilbmr.c ILBM reader routines */
- LONG loadbody(struct IFFHandle *iff, struct BitMap *bitmap,
- BitMapHeader *bmhd);
- LONG loadbody2(struct IFFHandle *iff, struct BitMap *bitmap,
- BYTE *mask, BitMapHeader *bmhd,
- BYTE *buffer, ULONG bufsize);
- LONG loadcmap(struct IFFHandle *, WORD *colortable, USHORT *pNcolors);
- LONG getcolors(struct ILBMInfo *ilbm);
- void freecolors(struct ILBMInfo *ilbm);
- LONG alloccolortable(struct ILBMInfo *ilbm);
- ULONG getcamg(struct ILBMInfo *ilbm);
-
- /* ilbmw.c ILBM writer routines */
- long initbmhd(BitMapHeader *bmhd, struct BitMap *bitmap,
- WORD masking, WORD compression, WORD transparentColor,
- WORD width, WORD height, WORD pageWidth, WORD pageHeight,
- ULONG modeid);
- long putcmap(struct IFFHandle *iff,APTR colortable,UWORD ncolors,UWORD bitspergun);
- long putbody(struct IFFHandle *iff, struct BitMap *bitmap,
- BYTE *mask, BitMapHeader *bmHdr,
- BYTE *buffer, LONG bufsize);
-
- /* getdisplay.c (used to load a display) */
- LONG showilbm(struct ILBMInfo *ilbm, UBYTE *filename);
- void unshowilbm(struct ILBMInfo *ilbm);
- LONG createdisplay(struct ILBMInfo *);
- void deletedisplay(struct ILBMInfo *);
- LONG getdisplay(struct ILBMInfo *);
- void freedisplay(struct ILBMInfo *);
-
- /* getbitmap.c (used if just loading brush or bitmap) */
- LONG createbrush(struct ILBMInfo *);
- void deletebrush(struct ILBMInfo *);
- LONG getbitmap(struct ILBMInfo *);
- void freebitmap(struct ILBMInfo *);
-
- /* screen.c (opens 1.3 or 2.0 screen) */
- struct Screen *openidscreen(struct ILBMInfo *,SHORT,SHORT,SHORT,ULONG);
- struct Window *opendisplay(struct ILBMInfo *,SHORT,SHORT,SHORT,ULONG);
- ULONG modefallback(ULONG, SHORT, SHORT, SHORT);
- void clipit(SHORT wide, SHORT high, struct Rectangle *spos,
- struct Rectangle *dclip, struct Rectangle *txto,
- struct Rectangle *stdo,struct Rectangle *maxo,
- struct Rectangle * uclip);
- void closedisplay(struct ILBMInfo *);
- void modeErrorMsg(ULONG,ULONG);
-
- /* loadilbm.c */
- LONG loadbrush(struct ILBMInfo *ilbm, UBYTE *filename);
- void unloadbrush(struct ILBMInfo *ilbm);
-
- LONG queryilbm(struct ILBMInfo *ilbm, UBYTE *filename);
-
- LONG loadilbm(struct ILBMInfo *ilbm, UBYTE *filename);
- void unloadilbm(struct ILBMInfo *ilbm);
-
- /* saveilbm.c */
- LONG screensave(struct ILBMInfo *ilbm,
- struct Screen *scr,
- struct Chunk *chunklist1, struct Chunk *chunklist2,
- UBYTE *filename);
-
- LONG saveilbm(struct ILBMInfo *ilbm,
- struct BitMap *bitmap, ULONG modeid,
- WORD width, WORD height, WORD pagewidth, WORD pageheight,
- APTR colortable, UWORD count, UWORD bitspergun,
- WORD masking, WORD transparentColor,
- struct Chunk *chunklist1, struct Chunk *chunklist2,
- UBYTE *filename);
-
-
- /* screendump.c (print screen or brush) */
- int screendump(struct Screen *scr,
- UWORD srcx, UWORD srcy, UWORD srcw, UWORD srch,
- LONG destcols, UWORD special);
-
- /* bmprintc.c (write C source for ILBM) */
- void BMPrintCRep(struct BitMap *bm, FILE *fp, UBYTE *name, UBYTE *fmt);
-
- #endif /* NO_PROTOS */
-
- #endif /* IFFP_ILBM_H */
-